| | 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 | }}} |