1 /*
2  * Copyright (c) 1996-2010 Oracle and/or its affiliates. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  *   - Redistributions of source code must retain the above copyright
9  *     notice, this list of conditions and the following disclaimer.
10  *
11  *   - Redistributions in binary form must reproduce the above copyright
12  *     notice, this list of conditions and the following disclaimer in the
13  *     documentation and/or other materials provided with the distribution.
14  *
15  *   - Neither the name of Oracle nor the names of its
16  *     contributors may be used to endorse or promote products derived
17  *     from this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
20  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 import java.util.*;
33 import java.io.*;
34 import javax.mail.*;
35 import javax.mail.internet.*;
36 import javax.activation.*;
37 
38 /**
39  * sendfile will create a multipart message with the second
40  * block of the message being the given file.<p>
41  *
42  * This demonstrates how to use the FileDataSource to send
43  * a file via mail.<p>
44  *
45  * usage: <code>java sendfile <i>to from smtp file true|false</i></code>
46  * where <i>to</i> and <i>from</i> are the destination and
47  * origin email addresses, respectively, and <i>smtp</i>
48  * is the hostname of the machine that has smtp server
49  * running.  <i>file</i> is the file to send. The next parameter
50  * either turns on or turns off debugging during sending.
51  *
52  * @author	Christopher Cotton
53  */
54 public class sendfile {
55 
main(String[] args)56     public static void main(String[] args) {
57 	if (args.length != 5) {
58 	    System.out.println("usage: java sendfile <to> <from> <smtp> <file> true|false");
59 	    System.exit(1);
60 	}
61 
62 	String to = args[0];
63 	String from = args[1];
64 	String host = args[2];
65 	String filename = args[3];
66 	boolean debug = Boolean.valueOf(args[4]).booleanValue();
67 	String msgText1 = "Sending a file.\n";
68 	String subject = "Sending a file";
69 
70 	// create some properties and get the default Session
71 	Properties props = System.getProperties();
72 	props.put("mail.smtp.host", host);
73 
74 	Session session = Session.getInstance(props, null);
75 	session.setDebug(debug);
76 
77 	try {
78 	    // create a message
79 	    MimeMessage msg = new MimeMessage(session);
80 	    msg.setFrom(new InternetAddress(from));
81 	    InternetAddress[] address = {new InternetAddress(to)};
82 	    msg.setRecipients(Message.RecipientType.TO, address);
83 	    msg.setSubject(subject);
84 
85 	    // create and fill the first message part
86 	    MimeBodyPart mbp1 = new MimeBodyPart();
87 	    mbp1.setText(msgText1);
88 
89 	    // create the second message part
90 	    MimeBodyPart mbp2 = new MimeBodyPart();
91 
92 	    // attach the file to the message
93 	    mbp2.attachFile(filename);
94 
95 	    /*
96 	     * Use the following approach instead of the above line if
97 	     * you want to control the MIME type of the attached file.
98 	     * Normally you should never need to do this.
99 	     *
100 	    FileDataSource fds = new FileDataSource(filename) {
101 		public String getContentType() {
102 		    return "application/octet-stream";
103 		}
104 	    };
105 	    mbp2.setDataHandler(new DataHandler(fds));
106 	    mbp2.setFileName(fds.getName());
107 	     */
108 
109 	    // create the Multipart and add its parts to it
110 	    Multipart mp = new MimeMultipart();
111 	    mp.addBodyPart(mbp1);
112 	    mp.addBodyPart(mbp2);
113 
114 	    // add the Multipart to the message
115 	    msg.setContent(mp);
116 
117 	    // set the Date: header
118 	    msg.setSentDate(new Date());
119 
120 	    /*
121 	     * If you want to control the Content-Transfer-Encoding
122 	     * of the attached file, do the following.  Normally you
123 	     * should never need to do this.
124 	     *
125 	    msg.saveChanges();
126 	    mbp2.setHeader("Content-Transfer-Encoding", "base64");
127 	     */
128 
129 	    // send the message
130 	    Transport.send(msg);
131 
132 	} catch (MessagingException mex) {
133 	    mex.printStackTrace();
134 	    Exception ex = null;
135 	    if ((ex = mex.getNextException()) != null) {
136 		ex.printStackTrace();
137 	    }
138 	} catch (IOException ioex) {
139 	    ioex.printStackTrace();
140 	}
141     }
142 }
143