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

Java编程

开发平台:

Java

  1. /*
  2.  * @(#)msgsend.java 1.17 03/04/22
  3.  *
  4.  * Copyright 1997-2003 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.io.*;
  39. import java.net.InetAddress;
  40. import java.util.Properties;
  41. import java.util.Date;
  42. import javax.mail.*;
  43. import javax.mail.internet.*;
  44. /**
  45.  * Demo app that shows how to construct and send an RFC822
  46.  * (singlepart) message.
  47.  *
  48.  * XXX - allow more than one recipient on the command line
  49.  *
  50.  * @author Max Spivak
  51.  * @author Bill Shannon
  52.  */
  53. public class msgsend {
  54.     public static void main(String[] argv) {
  55. new msgsend(argv);
  56.     }
  57.     public msgsend(String[] argv) {
  58. String  to, subject = null, from = null, 
  59. cc = null, bcc = null, url = null;
  60. String mailhost = null;
  61. String mailer = "msgsend";
  62. String protocol = null, host = null, user = null, password = null;
  63. String record = null; // name of folder in which to record mail
  64. boolean debug = false;
  65. BufferedReader in =
  66. new BufferedReader(new InputStreamReader(System.in));
  67. int optind;
  68. for (optind = 0; optind < argv.length; optind++) {
  69.     if (argv[optind].equals("-T")) {
  70. protocol = argv[++optind];
  71.     } else if (argv[optind].equals("-H")) {
  72. host = argv[++optind];
  73.     } else if (argv[optind].equals("-U")) {
  74. user = argv[++optind];
  75.     } else if (argv[optind].equals("-P")) {
  76. password = argv[++optind];
  77.     } else if (argv[optind].equals("-M")) {
  78. mailhost = argv[++optind];
  79.     } else if (argv[optind].equals("-f")) {
  80. record = argv[++optind];
  81.     } else if (argv[optind].equals("-s")) {
  82. subject = argv[++optind];
  83.     } else if (argv[optind].equals("-o")) { // originator
  84. from = argv[++optind];
  85.     } else if (argv[optind].equals("-c")) {
  86. cc = argv[++optind];
  87.     } else if (argv[optind].equals("-b")) {
  88. bcc = argv[++optind];
  89.     } else if (argv[optind].equals("-L")) {
  90. url = argv[++optind];
  91.     } else if (argv[optind].equals("-d")) {
  92. debug = true;
  93.     } else if (argv[optind].equals("--")) {
  94. optind++;
  95. break;
  96.     } else if (argv[optind].startsWith("-")) {
  97. System.out.println(
  98. "Usage: msgsend [[-L store-url] | [-T prot] [-H host] [-U user] [-P passwd]]");
  99. System.out.println(
  100. "t[-s subject] [-o from-address] [-c cc-addresses] [-b bcc-addresses]");
  101. System.out.println(
  102. "t[-f record-mailbox] [-M transport-host] [-d] [address]");
  103. System.exit(1);
  104.     } else {
  105. break;
  106.     }
  107. }
  108. try {
  109.     if (optind < argv.length) {
  110. // XXX - concatenate all remaining arguments
  111. to = argv[optind];
  112. System.out.println("To: " + to);
  113.     } else {
  114. System.out.print("To: ");
  115. System.out.flush();
  116. to = in.readLine();
  117.     }
  118.     if (subject == null) {
  119. System.out.print("Subject: ");
  120. System.out.flush();
  121. subject = in.readLine();
  122.     } else {
  123. System.out.println("Subject: " + subject);
  124.     }
  125.     Properties props = System.getProperties();
  126.     // XXX - could use Session.getTransport() and Transport.connect()
  127.     // XXX - assume we're using SMTP
  128.     if (mailhost != null)
  129. props.put("mail.smtp.host", mailhost);
  130.     // Get a Session object
  131.     Session session = Session.getInstance(props, null);
  132.     if (debug)
  133. session.setDebug(true);
  134.     // construct the message
  135.     Message msg = new MimeMessage(session);
  136.     if (from != null)
  137. msg.setFrom(new InternetAddress(from));
  138.     else
  139. msg.setFrom();
  140.     msg.setRecipients(Message.RecipientType.TO,
  141. InternetAddress.parse(to, false));
  142.     if (cc != null)
  143. msg.setRecipients(Message.RecipientType.CC,
  144. InternetAddress.parse(cc, false));
  145.     if (bcc != null)
  146. msg.setRecipients(Message.RecipientType.BCC,
  147. InternetAddress.parse(bcc, false));
  148.     msg.setSubject(subject);
  149.     collect(in, msg);
  150.     msg.setHeader("X-Mailer", mailer);
  151.     msg.setSentDate(new Date());
  152.     // send the thing off
  153.     Transport.send(msg);
  154.     System.out.println("nMail was sent successfully.");
  155.     // Keep a copy, if requested.
  156.     if (record != null) {
  157. // Get a Store object
  158. Store store = null;
  159. if (url != null) {
  160.     URLName urln = new URLName(url);
  161.     store = session.getStore(urln);
  162.     store.connect();
  163. } else {
  164.     if (protocol != null)
  165. store = session.getStore(protocol);
  166.     else
  167. store = session.getStore();
  168.     // Connect
  169.     if (host != null || user != null || password != null)
  170. store.connect(host, user, password);
  171.     else
  172. store.connect();
  173. }
  174. // Get record Folder.  Create if it does not exist.
  175. Folder folder = store.getFolder(record);
  176. if (folder == null) {
  177.     System.err.println("Can't get record folder.");
  178.     System.exit(1);
  179. }
  180. if (!folder.exists())
  181.     folder.create(Folder.HOLDS_MESSAGES);
  182. Message[] msgs = new Message[1];
  183. msgs[0] = msg;
  184. folder.appendMessages(msgs);
  185. System.out.println("Mail was recorded successfully.");
  186.     }
  187. } catch (Exception e) {
  188.     e.printStackTrace();
  189. }
  190.     }
  191.     public void collect(BufferedReader in, Message msg)
  192. throws MessagingException, IOException {
  193. String line;
  194. StringBuffer sb = new StringBuffer();
  195. while ((line = in.readLine()) != null) {
  196.     sb.append(line);
  197.     sb.append("n");
  198. }
  199. // If the desired charset is known, you can use
  200. // setText(text, charset)
  201. msg.setText(sb.toString());
  202.     }
  203. }