Subversion Repositories javautils

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
7 daniel-mar 1
/*
2
 * Copyright 1998-2007 Sun Microsystems, Inc. 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 Sun Microsystems 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.io.*;
33
import java.util.Properties;
34
import java.util.Date;
35
 
36
import javax.mail.*;
37
import javax.activation.*;
38
import javax.mail.internet.*;
39
import javax.mail.util.*;
40
 
41
/**
42
 * Demo app that shows how to construct and send a single part html
43
 * message.  Note that the same basic technique can be used to send
44
 * data of any type.
45
 *
46
 * @author John Mani
47
 * @author Bill Shannon
48
 * @author Max Spivak
49
 */
50
 
51
public class sendhtml {
52
 
53
    public static void main(String[] argv) {
54
        new sendhtml(argv);
55
    }
56
 
57
    public sendhtml(String[] argv) {
58
 
59
        String  to, subject = null, from = null,
60
                cc = null, bcc = null, url = null;
61
        String mailhost = null;
62
        String mailer = "sendhtml";
63
        String protocol = null, host = null, user = null, password = null;
64
        String record = null;   // name of folder in which to record mail
65
        boolean debug = false;
66
        BufferedReader in =
67
                        new BufferedReader(new InputStreamReader(System.in));
68
        int optind;
69
 
70
        for (optind = 0; optind < argv.length; optind++) {
71
            if (argv[optind].equals("-T")) {
72
                protocol = argv[++optind];
73
            } else if (argv[optind].equals("-H")) {
74
                host = argv[++optind];
75
            } else if (argv[optind].equals("-U")) {
76
                user = argv[++optind];
77
            } else if (argv[optind].equals("-P")) {
78
                password = argv[++optind];
79
            } else if (argv[optind].equals("-M")) {
80
                mailhost = argv[++optind];
81
            } else if (argv[optind].equals("-f")) {
82
                record = argv[++optind];
83
            } else if (argv[optind].equals("-s")) {
84
                subject = argv[++optind];
85
            } else if (argv[optind].equals("-o")) { // originator
86
                from = argv[++optind];
87
            } else if (argv[optind].equals("-c")) {
88
                cc = argv[++optind];
89
            } else if (argv[optind].equals("-b")) {
90
                bcc = argv[++optind];
91
            } else if (argv[optind].equals("-L")) {
92
                url = argv[++optind];
93
            } else if (argv[optind].equals("-d")) {
94
                debug = true;
95
            } else if (argv[optind].equals("--")) {
96
                optind++;
97
                break;
98
            } else if (argv[optind].startsWith("-")) {
99
                System.out.println(
100
"Usage: sendhtml [[-L store-url] | [-T prot] [-H host] [-U user] [-P passwd]]");
101
                System.out.println(
102
"\t[-s subject] [-o from-address] [-c cc-addresses] [-b bcc-addresses]");
103
                System.out.println(
104
"\t[-f record-mailbox] [-M transport-host] [-d] [address]");
105
                System.exit(1);
106
            } else {
107
                break;
108
            }
109
        }
110
 
111
        try {
112
            if (optind < argv.length) {
113
                // XXX - concatenate all remaining arguments
114
                to = argv[optind];
115
                System.out.println("To: " + to);
116
            } else {
117
                System.out.print("To: ");
118
                System.out.flush();
119
                to = in.readLine();
120
            }
121
            if (subject == null) {
122
                System.out.print("Subject: ");
123
                System.out.flush();
124
                subject = in.readLine();
125
            } else {
126
                System.out.println("Subject: " + subject);
127
            }
128
 
129
            Properties props = System.getProperties();
130
            // XXX - could use Session.getTransport() and Transport.connect()
131
            // XXX - assume we're using SMTP
132
            if (mailhost != null)
133
                props.put("mail.smtp.host", mailhost);
134
 
135
            // Get a Session object
136
            Session session = Session.getInstance(props, null);
137
            if (debug)
138
                session.setDebug(true);
139
 
140
            // construct the message
141
            Message msg = new MimeMessage(session);
142
            if (from != null)
143
                msg.setFrom(new InternetAddress(from));
144
            else
145
                msg.setFrom();
146
 
147
            msg.setRecipients(Message.RecipientType.TO,
148
                                        InternetAddress.parse(to, false));
149
            if (cc != null)
150
                msg.setRecipients(Message.RecipientType.CC,
151
                                        InternetAddress.parse(cc, false));
152
            if (bcc != null)
153
                msg.setRecipients(Message.RecipientType.BCC,
154
                                        InternetAddress.parse(bcc, false));
155
 
156
            msg.setSubject(subject);
157
 
158
            collect(in, msg);
159
 
160
            msg.setHeader("X-Mailer", mailer);
161
            msg.setSentDate(new Date());
162
 
163
            // send the thing off
164
            Transport.send(msg);
165
 
166
            System.out.println("\nMail was sent successfully.");
167
 
168
            // Keep a copy, if requested.
169
 
170
            if (record != null) {
171
                // Get a Store object
172
                Store store = null;
173
                if (url != null) {
174
                    URLName urln = new URLName(url);
175
                    store = session.getStore(urln);
176
                    store.connect();
177
                } else {
178
                    if (protocol != null)              
179
                        store = session.getStore(protocol);
180
                    else
181
                        store = session.getStore();
182
 
183
                    // Connect
184
                    if (host != null || user != null || password != null)
185
                        store.connect(host, user, password);
186
                    else
187
                        store.connect();
188
                }
189
 
190
                // Get record Folder.  Create if it does not exist.
191
                Folder folder = store.getFolder(record);
192
                if (folder == null) {
193
                    System.err.println("Can't get record folder.");
194
                    System.exit(1);
195
                }
196
                if (!folder.exists())
197
                    folder.create(Folder.HOLDS_MESSAGES);
198
 
199
                Message[] msgs = new Message[1];
200
                msgs[0] = msg;
201
                folder.appendMessages(msgs);
202
 
203
                System.out.println("Mail was recorded successfully.");
204
            }
205
 
206
        } catch (Exception e) {
207
            e.printStackTrace();
208
        }
209
    }
210
 
211
    public void collect(BufferedReader in, Message msg)
212
                                        throws MessagingException, IOException {
213
        String line;
214
        String subject = msg.getSubject();
215
        StringBuffer sb = new StringBuffer();
216
        sb.append("<HTML>\n");
217
        sb.append("<HEAD>\n");
218
        sb.append("<TITLE>\n");
219
        sb.append(subject + "\n");
220
        sb.append("</TITLE>\n");
221
        sb.append("</HEAD>\n");
222
 
223
        sb.append("<BODY>\n");
224
        sb.append("<H1>" + subject + "</H1>" + "\n");
225
 
226
        while ((line = in.readLine()) != null) {
227
            sb.append(line);
228
            sb.append("\n");
229
        }
230
 
231
        sb.append("</BODY>\n");
232
        sb.append("</HTML>\n");
233
 
234
        msg.setDataHandler(new DataHandler(
235
                new ByteArrayDataSource(sb.toString(), "text/html")));
236
    }
237
}