|   | 1 |  | 
                  
                          |   | 2 |  * 系統要裝能寄信的工具才可 | 
                  
                          |   | 3 |  | 
                  
                          |   | 4 | {{{ | 
                  
                          |   | 5 | sudo apt-get install sendmail sendmail-bin | 
                  
                          |   | 6 | }}} | 
                  
                          |   | 7 |  | 
                  
                          |   | 8 |  * 下載 javamail | 
                  
                          |   | 9 | [http://www.oracle.com/technetwork/java/javamail/index.html] | 
                  
                          |   | 10 |  | 
                  
                          |   | 11 |  * 其實不用  JavaBeans Activation Framework (JAF) | 
                  
                          |   | 12 |  | 
                  
                          |   | 13 | {{{ | 
                  
                          |   | 14 | #!java | 
                  
                          |   | 15 | package tw.org.nchc.icasIII; | 
                  
                          |   | 16 |  | 
                  
                          |   | 17 | import java.io.BufferedReader; | 
                  
                          |   | 18 | import java.io.File; | 
                  
                          |   | 19 | import java.io.FileReader; | 
                  
                          |   | 20 | import java.io.IOException; | 
                  
                          |   | 21 | import java.util.Date; | 
                  
                          |   | 22 | import java.util.Properties; | 
                  
                          |   | 23 |  | 
                  
                          |   | 24 | import javax.activation.DataHandler; | 
                  
                          |   | 25 | import javax.mail.Folder; | 
                  
                          |   | 26 | import javax.mail.Message; | 
                  
                          |   | 27 | import javax.mail.MessagingException; | 
                  
                          |   | 28 | import javax.mail.Session; | 
                  
                          |   | 29 | import javax.mail.Store; | 
                  
                          |   | 30 | import javax.mail.Transport; | 
                  
                          |   | 31 | import javax.mail.URLName; | 
                  
                          |   | 32 | import javax.mail.internet.InternetAddress; | 
                  
                          |   | 33 | import javax.mail.internet.MimeMessage; | 
                  
                          |   | 34 | import javax.mail.util.ByteArrayDataSource; | 
                  
                          |   | 35 |  | 
                  
                          |   | 36 | public class sendhtml { | 
                  
                          |   | 37 |  | 
                  
                          |   | 38 |         public static void main(String[] argv) { | 
                  
                          |   | 39 |                 new sendhtml(argv); | 
                  
                          |   | 40 |         } | 
                  
                          |   | 41 |  | 
                  
                          |   | 42 |         public sendhtml(String[] argv) { | 
                  
                          |   | 43 |  | 
                  
                          |   | 44 |                 String to, subject = null, from = null; | 
                  
                          |   | 45 |                 String cc = null, bcc = null, url = null; | 
                  
                          |   | 46 |                 String mailhost = null; | 
                  
                          |   | 47 |                 String mailer = "sendhtml"; | 
                  
                          |   | 48 |                 String protocol = null, host = null, user = null, password = null; | 
                  
                          |   | 49 |                 String record = null; // name of folder in which to record mail | 
                  
                          |   | 50 |                 boolean debug = false; | 
                  
                          |   | 51 |                  | 
                  
                          |   | 52 |                 int optind; | 
                  
                          |   | 53 |                 /* | 
                  
                          |   | 54 |  | 
                  
                          |   | 55 |  | 
                  
                          |   | 56 |                 for (optind = 0; optind < argv.length; optind++) { | 
                  
                          |   | 57 |                         if (argv[optind].equals("-T")) { | 
                  
                          |   | 58 |                                 protocol = argv[++optind]; | 
                  
                          |   | 59 |                         } else if (argv[optind].equals("-H")) { | 
                  
                          |   | 60 |                                 host = argv[++optind]; | 
                  
                          |   | 61 |                         } else if (argv[optind].equals("-U")) { | 
                  
                          |   | 62 |                                 user = argv[++optind]; | 
                  
                          |   | 63 |                         } else if (argv[optind].equals("-P")) { | 
                  
                          |   | 64 |                                 password = argv[++optind]; | 
                  
                          |   | 65 |                         } else if (argv[optind].equals("-M")) { | 
                  
                          |   | 66 |                                 mailhost = argv[++optind]; | 
                  
                          |   | 67 |                         } else if (argv[optind].equals("-f")) { | 
                  
                          |   | 68 |                                 record = argv[++optind]; | 
                  
                          |   | 69 |                         } else if (argv[optind].equals("-s")) { | 
                  
                          |   | 70 |                                 subject = argv[++optind]; | 
                  
                          |   | 71 |                         } else if (argv[optind].equals("-o")) { // originator | 
                  
                          |   | 72 |                                 from = argv[++optind]; | 
                  
                          |   | 73 |                         } else if (argv[optind].equals("-c")) { | 
                  
                          |   | 74 |                                 cc = argv[++optind]; | 
                  
                          |   | 75 |                         } else if (argv[optind].equals("-b")) { | 
                  
                          |   | 76 |                                 bcc = argv[++optind]; | 
                  
                          |   | 77 |                         } else if (argv[optind].equals("-L")) { | 
                  
                          |   | 78 |                                 url = argv[++optind]; | 
                  
                          |   | 79 |                         } else if (argv[optind].equals("-d")) { | 
                  
                          |   | 80 |                                 debug = true; | 
                  
                          |   | 81 |                         } else if (argv[optind].equals("--")) { | 
                  
                          |   | 82 |                                 optind++; | 
                  
                          |   | 83 |                                 break; | 
                  
                          |   | 84 |                         } else if (argv[optind].startsWith("-")) { | 
                  
                          |   | 85 |                                 System.out | 
                  
                          |   | 86 |                                                 .println("Usage: sendhtml [[-L store-url] | [-T prot] [-H host] [-U user] [-P passwd]]"); | 
                  
                          |   | 87 |                                 System.out | 
                  
                          |   | 88 |                                                 .println("\t[-s subject] [-o from-address] [-c cc-addresses] [-b bcc-addresses]"); | 
                  
                          |   | 89 |                                 System.out | 
                  
                          |   | 90 |                                                 .println("\t[-f record-mailbox] [-M transport-host] [-d] [address]"); | 
                  
                          |   | 91 |                                 System.exit(1); | 
                  
                          |   | 92 |                         } else { | 
                  
                          |   | 93 |                                 break; | 
                  
                          |   | 94 |                         } | 
                  
                          |   | 95 |                 } | 
                  
                          |   | 96 |                 */ | 
                  
                          |   | 97 |                  | 
                  
                          |   | 98 |                 to = "waue0920@gmail.com"; | 
                  
                          |   | 99 |                 subject = "test, javamail"; | 
                  
                          |   | 100 |                 from = "waue0920@nchc.org.tw"; | 
                  
                          |   | 101 |                 cc = null; | 
                  
                          |   | 102 |                 bcc = null; | 
                  
                          |   | 103 |                 url = null; | 
                  
                          |   | 104 |                 mailhost = "localhost"; | 
                  
                          |   | 105 |                 mailer = "sendhtml"; | 
                  
                          |   | 106 |                 protocol = null; | 
                  
                          |   | 107 |                 host = null; | 
                  
                          |   | 108 |                 user = null; | 
                  
                          |   | 109 |                 password = null; | 
                  
                          |   | 110 |                 record = null; // name of folder in which to record mail | 
                  
                          |   | 111 |                  | 
                  
                          |   | 112 |                 try { | 
                  
                          |   | 113 |                         BufferedReader in = new BufferedReader(new FileReader(new File("/home/waue/Desktop/index.html"))); | 
                  
                          |   | 114 |                         if (subject == null) { | 
                  
                          |   | 115 |                                 System.out.print("Subject: "); | 
                  
                          |   | 116 |                                 System.out.flush(); | 
                  
                          |   | 117 |                                 subject = in.readLine(); | 
                  
                          |   | 118 |                         } else { | 
                  
                          |   | 119 |                                 System.out.println("Subject: " + subject); | 
                  
                          |   | 120 |                         } | 
                  
                          |   | 121 |  | 
                  
                          |   | 122 |                         Properties props = System.getProperties(); | 
                  
                          |   | 123 |  | 
                  
                          |   | 124 |                         if (mailhost != null) | 
                  
                          |   | 125 |                                 props.put("mail.smtp.host", mailhost); | 
                  
                          |   | 126 |  | 
                  
                          |   | 127 |                         Session session = Session.getInstance(props, null); | 
                  
                          |   | 128 |                         if (debug) | 
                  
                          |   | 129 |                                 session.setDebug(true); | 
                  
                          |   | 130 |  | 
                  
                          |   | 131 |                         // construct the message | 
                  
                          |   | 132 |                         Message msg = new MimeMessage(session); | 
                  
                          |   | 133 |                         if (from != null) | 
                  
                          |   | 134 |                                 msg.setFrom(new InternetAddress(from)); | 
                  
                          |   | 135 |                         else | 
                  
                          |   | 136 |                                 msg.setFrom(); | 
                  
                          |   | 137 |  | 
                  
                          |   | 138 |                         msg.setRecipients(Message.RecipientType.TO, | 
                  
                          |   | 139 |                                         InternetAddress.parse(to, false)); | 
                  
                          |   | 140 |                         if (cc != null) | 
                  
                          |   | 141 |                                 msg.setRecipients(Message.RecipientType.CC, | 
                  
                          |   | 142 |                                                 InternetAddress.parse(cc, false)); | 
                  
                          |   | 143 |                         if (bcc != null) | 
                  
                          |   | 144 |                                 msg.setRecipients(Message.RecipientType.BCC, | 
                  
                          |   | 145 |                                                 InternetAddress.parse(bcc, false)); | 
                  
                          |   | 146 |  | 
                  
                          |   | 147 |                         msg.setSubject(subject); | 
                  
                          |   | 148 |  | 
                  
                          |   | 149 |                         collect(in, msg); | 
                  
                          |   | 150 |  | 
                  
                          |   | 151 |                         msg.setHeader("X-Mailer", mailer); | 
                  
                          |   | 152 |                         msg.setSentDate(new Date()); | 
                  
                          |   | 153 |  | 
                  
                          |   | 154 |                         // send the thing off | 
                  
                          |   | 155 |                         Transport.send(msg); | 
                  
                          |   | 156 |  | 
                  
                          |   | 157 |                         System.out.println("\nMail was sent successfully."); | 
                  
                          |   | 158 |  | 
                  
                          |   | 159 |                         // Keep a copy, if requested. | 
                  
                          |   | 160 |  | 
                  
                          |   | 161 |                         if (record != null) { | 
                  
                          |   | 162 |                                 // Get a Store object | 
                  
                          |   | 163 |                                 Store store = null; | 
                  
                          |   | 164 |                                 if (url != null) { | 
                  
                          |   | 165 |                                         URLName urln = new URLName(url); | 
                  
                          |   | 166 |                                         store = session.getStore(urln); | 
                  
                          |   | 167 |                                         store.connect(); | 
                  
                          |   | 168 |                                 } else { | 
                  
                          |   | 169 |                                         if (protocol != null) | 
                  
                          |   | 170 |                                                 store = session.getStore(protocol); | 
                  
                          |   | 171 |                                         else | 
                  
                          |   | 172 |                                                 store = session.getStore(); | 
                  
                          |   | 173 |  | 
                  
                          |   | 174 |                                         // Connect | 
                  
                          |   | 175 |                                         if (host != null || user != null || password != null) | 
                  
                          |   | 176 |                                                 store.connect(host, user, password); | 
                  
                          |   | 177 |                                         else | 
                  
                          |   | 178 |                                                 store.connect(); | 
                  
                          |   | 179 |                                 } | 
                  
                          |   | 180 |  | 
                  
                          |   | 181 |                                 // Get record Folder. Create if it does not exist. | 
                  
                          |   | 182 |                                 Folder folder = store.getFolder(record); | 
                  
                          |   | 183 |                                 if (folder == null) { | 
                  
                          |   | 184 |                                         System.err.println("Can't get record folder."); | 
                  
                          |   | 185 |                                         System.exit(1); | 
                  
                          |   | 186 |                                 } | 
                  
                          |   | 187 |                                 if (!folder.exists()) | 
                  
                          |   | 188 |                                         folder.create(Folder.HOLDS_MESSAGES); | 
                  
                          |   | 189 |  | 
                  
                          |   | 190 |                                 Message[] msgs = new Message[1]; | 
                  
                          |   | 191 |                                 msgs[0] = msg; | 
                  
                          |   | 192 |                                 folder.appendMessages(msgs); | 
                  
                          |   | 193 |  | 
                  
                          |   | 194 |                                 System.out.println("Mail was recorded successfully."); | 
                  
                          |   | 195 |                         } | 
                  
                          |   | 196 |  | 
                  
                          |   | 197 |                 } catch (Exception e) { | 
                  
                          |   | 198 |                         e.printStackTrace(); | 
                  
                          |   | 199 |                 } | 
                  
                          |   | 200 |         } | 
                  
                          |   | 201 |  | 
                  
                          |   | 202 |         public void collect(BufferedReader in, Message msg) | 
                  
                          |   | 203 |                         throws MessagingException, IOException { | 
                  
                          |   | 204 |                 String line; | 
                  
                          |   | 205 |                 String subject = msg.getSubject(); | 
                  
                          |   | 206 |                 StringBuffer sb = new StringBuffer(); | 
                  
                          |   | 207 |                 sb.append("<HTML>\n"); | 
                  
                          |   | 208 |                 sb.append("<HEAD>\n"); | 
                  
                          |   | 209 |                 sb.append("<TITLE>\n"); | 
                  
                          |   | 210 |                 sb.append(subject + "\n"); | 
                  
                          |   | 211 |                 sb.append("</TITLE>\n"); | 
                  
                          |   | 212 |                 sb.append("</HEAD>\n"); | 
                  
                          |   | 213 |  | 
                  
                          |   | 214 |                 sb.append("<BODY>\n"); | 
                  
                          |   | 215 |                 sb.append("<H1>" + subject + "</H1>" + "\n"); | 
                  
                          |   | 216 |  | 
                  
                          |   | 217 |                 while ((line = in.readLine()) != null) { | 
                  
                          |   | 218 |                         sb.append(line); | 
                  
                          |   | 219 |                         sb.append("\n"); | 
                  
                          |   | 220 |                 } | 
                  
                          |   | 221 |  | 
                  
                          |   | 222 |                 sb.append("</BODY>\n"); | 
                  
                          |   | 223 |                 sb.append("</HTML>\n"); | 
                  
                          |   | 224 |  | 
                  
                          |   | 225 |                 msg.setDataHandler(new DataHandler(new ByteArrayDataSource(sb | 
                  
                          |   | 226 |                                 .toString(), "text/html"))); | 
                  
                          |   | 227 |         } | 
                  
                          |   | 228 | } | 
                  
                          |   | 229 |  | 
                  
                          |   | 230 | }}} |