001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    
018    package examples.mail;
019    
020    import java.io.BufferedReader;
021    import java.io.FileNotFoundException;
022    import java.io.FileReader;
023    import java.io.IOException;
024    import java.io.InputStreamReader;
025    import java.io.PrintWriter;
026    import java.io.Writer;
027    import java.util.ArrayList;
028    import java.util.Enumeration;
029    import java.util.List;
030    
031    import org.apache.commons.net.PrintCommandListener;
032    import org.apache.commons.net.io.Util;
033    import org.apache.commons.net.smtp.SMTPClient;
034    import org.apache.commons.net.smtp.SMTPReply;
035    import org.apache.commons.net.smtp.SimpleSMTPHeader;
036    
037    /***
038     * This is an example program using the SMTP package to send a message
039     * to the specified recipients.  It prompts you for header information and
040     * a filename containing the message.
041     * <p>
042     ***/
043    
044    public final class SMTPMail
045    {
046    
047        public final static void main(String[] args)
048        {
049            String sender, recipient, subject, filename, server, cc;
050            List<String> ccList = new ArrayList<String>();
051            BufferedReader stdin;
052            FileReader fileReader = null;
053            Writer writer;
054            SimpleSMTPHeader header;
055            SMTPClient client;
056            Enumeration en;
057    
058            if (args.length < 1)
059            {
060                System.err.println("Usage: mail smtpserver");
061                System.exit(1);
062            }
063    
064            server = args[0];
065    
066            stdin = new BufferedReader(new InputStreamReader(System.in));
067    
068            try
069            {
070                System.out.print("From: ");
071                System.out.flush();
072    
073                sender = stdin.readLine();
074    
075                System.out.print("To: ");
076                System.out.flush();
077    
078                recipient = stdin.readLine();
079    
080                System.out.print("Subject: ");
081                System.out.flush();
082    
083                subject = stdin.readLine();
084    
085                header = new SimpleSMTPHeader(sender, recipient, subject);
086    
087    
088                while (true)
089                {
090                    System.out.print("CC <enter one address per line, hit enter to end>: ");
091                    System.out.flush();
092    
093                    // Of course you don't want to do this because readLine() may be null
094                    cc = stdin.readLine().trim();
095    
096                    if (cc.length() == 0)
097                        break;
098    
099                    header.addCC(cc);
100                    ccList.add(cc);
101                }
102    
103                System.out.print("Filename: ");
104                System.out.flush();
105    
106                filename = stdin.readLine();
107    
108                try
109                {
110                    fileReader = new FileReader(filename);
111                }
112                catch (FileNotFoundException e)
113                {
114                    System.err.println("File not found. " + e.getMessage());
115                }
116    
117                client = new SMTPClient();
118                client.addProtocolCommandListener(new PrintCommandListener(
119                                                      new PrintWriter(System.out)));
120    
121                client.connect(server);
122    
123                if (!SMTPReply.isPositiveCompletion(client.getReplyCode()))
124                {
125                    client.disconnect();
126                    System.err.println("SMTP server refused connection.");
127                    System.exit(1);
128                }
129    
130                client.login();
131    
132                client.setSender(sender);
133                client.addRecipient(recipient);
134    
135               
136    
137                for (String recpt : ccList)
138                    client.addRecipient(recpt);
139    
140                writer = client.sendMessageData();
141    
142                if (writer != null)
143                {
144                    writer.write(header.toString());
145                    Util.copyReader(fileReader, writer);
146                    writer.close();
147                    client.completePendingCommand();
148                }
149    
150                fileReader.close();
151    
152                client.logout();
153    
154                client.disconnect();
155            }
156            catch (IOException e)
157            {
158                e.printStackTrace();
159                System.exit(1);
160            }
161        }
162    }
163    
164