transport.java
上传用户:dinglihq
上传日期:2013-02-04
资源大小:99958k
文件大小:7k
源码类别:

Java编程

开发平台:

Java

  1. /*
  2.  * @(#)transport.java 1.12 01/05/23
  3.  *
  4.  * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 
  10.  * - Redistributions of source code must retain the above copyright
  11.  *   notice, this list of conditions and the following disclaimer.
  12.  * 
  13.  * - Redistribution in binary form must reproduce the above copyright
  14.  *   notice, this list of conditions and the following disclaimer in the
  15.  *   documentation and/or other materials provided with the distribution.
  16.  * 
  17.  * Neither the name of Sun Microsystems, Inc. or the names of contributors
  18.  * may be used to endorse or promote products derived from this software
  19.  * without specific prior written permission.
  20.  * 
  21.  * This software is provided "AS IS," without a warranty of any kind. ALL
  22.  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
  23.  * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
  24.  * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND
  25.  * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES OR LIABILITIES
  26.  * SUFFERED BY LICENSEE AS A RESULT OF  OR RELATING TO USE, MODIFICATION
  27.  * OR DISTRIBUTION OF THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
  28.  * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
  29.  * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
  30.  * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
  31.  * ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS
  32.  * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  33.  * 
  34.  * You acknowledge that Software is not designed, licensed or intended
  35.  * for use in the design, construction, operation or maintenance of any
  36.  * nuclear facility.
  37.  */
  38. import java.util.*;
  39. import javax.mail.*;
  40. import javax.mail.internet.*;
  41. import javax.mail.event.*;
  42. import javax.activation.*;
  43. /**
  44.  * transport is a simple program that creates a message, explicitly
  45.  * retrieves a Transport from the session based on the type of the
  46.  * address (it's InternetAddress, so SMTP will be used) and sends 
  47.  * the message.
  48.  *
  49.  * usage: <code>java transport <i>"toaddr1[, toaddr2]*"  from smtphost 
  50.  * true|false</i></code><br>
  51.  * where <i>to</i> and <i>from</i> are the destination and
  52.  * origin email addresses, respectively, and <i>smtphost</i>
  53.  * is the hostname of the machine that has the smtp server
  54.  * running. The <i>to</i> addresses can be either a single email
  55.  * address or a comma-separated list of email addresses in
  56.  * quotes, i.e. "joe@machine, jane, max@server.com"
  57.  * The last parameter either turns on or turns off
  58.  * debugging during sending.
  59.  *
  60.  * @author Max Spivak
  61.  */
  62. public class transport implements ConnectionListener, TransportListener {
  63.     static String msgText = "This is a message body.nHere's the second line.";
  64.     static String msgText2 = "nThis was sent by transport.java demo program.";
  65.     public static void main(String[] args) {
  66. Properties props = new Properties();
  67. // parse the arguments
  68. InternetAddress[] addrs = null;
  69. boolean debug = false;
  70. if (args.length != 4) {
  71.     usage();
  72.     return;
  73. } else {
  74.     props.put("mail.smtp.user", args[1]);
  75.     props.put("mail.smtp.host", args[2]);
  76.     if (args[3].equals("true")) {
  77. debug = true;
  78.     } else if (args[3].equals("false")) {
  79. debug = false;
  80.     } else {
  81. usage();
  82. return;
  83.     }
  84.     // parse the destination addresses
  85.     try {
  86. addrs = InternetAddress.parse(args[0], false);
  87.     } catch (AddressException aex) {
  88. System.out.println("Invalid Address");
  89. aex.printStackTrace();
  90. return;
  91.     }
  92. }
  93. // create some properties and get a Session
  94. Session session = Session.getInstance(props, null);
  95. session.setDebug(debug);
  96. transport t = new transport();
  97. t.go(session, addrs);
  98.     }
  99.     public transport() {}
  100.     public void go(Session session, InternetAddress[] toAddr) {
  101. Transport trans = null;
  102. try {
  103.     // create a message
  104.     Message msg = new MimeMessage(session);
  105.     msg.setFrom();
  106.     msg.setRecipients(Message.RecipientType.TO, toAddr);
  107.     msg.setSubject("JavaMail APIs transport.java Test");
  108.     msg.setSentDate(new Date());  // Date: header
  109.     msg.setContent(msgText+msgText2, "text/plain");
  110.     msg.saveChanges();
  111.     // get the smtp transport for the address
  112.     trans = session.getTransport(toAddr[0]);
  113.     // register ourselves as listener for ConnectionEvents 
  114.     // and TransportEvents
  115.     trans.addConnectionListener(this);
  116.     trans.addTransportListener(this);
  117.     // connect the transport
  118.     trans.connect();
  119.     // send the message
  120.     trans.sendMessage(msg, toAddr);
  121.     // give the EventQueue enough time to fire its events
  122.     try {Thread.sleep(5);}catch(InterruptedException e) {}
  123. } catch (MessagingException mex) {
  124.     // give the EventQueue enough time to fire its events
  125.     try {Thread.sleep(5);}catch(InterruptedException e) {}
  126.     mex.printStackTrace();
  127.     System.out.println();
  128.     Exception ex = mex;
  129.     do {
  130. if (ex instanceof SendFailedException) {
  131.     SendFailedException sfex = (SendFailedException)ex;
  132.     Address[] invalid = sfex.getInvalidAddresses();
  133.     if (invalid != null) {
  134. System.out.println("    ** Invalid Addresses");
  135. if (invalid != null) {
  136.     for (int i = 0; i < invalid.length; i++) 
  137. System.out.println("         " + invalid[i]);
  138. }
  139.     }
  140.     Address[] validUnsent = sfex.getValidUnsentAddresses();
  141.     if (validUnsent != null) {
  142. System.out.println("    ** ValidUnsent Addresses");
  143. if (validUnsent != null) {
  144.     for (int i = 0; i < validUnsent.length; i++) 
  145. System.out.println("         "+validUnsent[i]);
  146. }
  147.     }
  148.     Address[] validSent = sfex.getValidSentAddresses();
  149.     if (validSent != null) {
  150. System.out.println("    ** ValidSent Addresses");
  151. if (validSent != null) {
  152.     for (int i = 0; i < validSent.length; i++) 
  153. System.out.println("         "+validSent[i]);
  154. }
  155.     }
  156. }
  157. System.out.println();
  158. if (ex instanceof MessagingException)
  159.     ex = ((MessagingException)ex).getNextException();
  160. else
  161.     ex = null;
  162.     } while (ex != null);
  163. } finally {
  164.     try {
  165. // close the transport
  166. trans.close();
  167.     } catch (MessagingException mex) { /* ignore */ }
  168. }
  169.     }
  170.     // implement ConnectionListener interface
  171.     public void opened(ConnectionEvent e) {
  172. System.out.println(">>> ConnectionListener.opened()");
  173.     }
  174.     public void disconnected(ConnectionEvent e) {}
  175.     public void closed(ConnectionEvent e) {
  176. System.out.println(">>> ConnectionListener.closed()");
  177.     }
  178.     // implement TransportListener interface
  179.     public void messageDelivered(TransportEvent e) {
  180. System.out.print(">>> TransportListener.messageDelivered().");
  181. System.out.println(" Valid Addresses:");
  182. Address[] valid = e.getValidSentAddresses();
  183. if (valid != null) {
  184.     for (int i = 0; i < valid.length; i++) 
  185. System.out.println("    " + valid[i]);
  186. }
  187.     }
  188.     public void messageNotDelivered(TransportEvent e) {
  189. System.out.print(">>> TransportListener.messageNotDelivered().");
  190. System.out.println(" Invalid Addresses:");
  191. Address[] invalid = e.getInvalidAddresses();
  192. if (invalid != null) {
  193.     for (int i = 0; i < invalid.length; i++) 
  194. System.out.println("    " + invalid[i]);
  195. }
  196.     }
  197.     public void messagePartiallyDelivered(TransportEvent e) {
  198. // SMTPTransport doesn't partially deliver msgs
  199.     }
  200.     private static void usage() {
  201. System.out.println("usage: java transport "<to1>[, <to2>]*" <from> <smtp> true|falsenexample: java transport "joe@machine, jane" senderaddr smtphost false");
  202.     }
  203. }