    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