公司新做了一個項目,需要用到郵件發送功能。因為以前同事在其他項目上做過郵件模塊,所以直接移植過來了。
本以為很簡單的功能,直接copy多好。然而命運多舛。 調用發送郵件的代碼時候報錯。
主要代碼:
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.starttls.enable", "true");// 使用 STARTTLS安全連接
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props);
session.setDebug(false);
MimeMessage message = new MimeMessage(session);
try {
String show_username = username;
if (show_username.indexOf("@") > -1) {
show_username = show_username.split("@")[0];
}
message.setFrom(new InternetAddress(username, show_username));
InternetAddress[] internetAddressTo = new InternetAddress().parse(toMail);
message.setRecipients(Message.RecipientType.TO, internetAddressTo);
//message.addRecipient(Message.RecipientType.TO, new InternetAddress(toMail));
message.setSubject(subject);
message.addHeader("charset", "UTF-8");
/* 添加正文內容 */
Multipart multipart = new MimeMultipart();
StringBuffer lineTxt = new StringBuffer();
BodyPart contentPart = new MimeBodyPart();
contentPart.setText(lineTxt.toString());
contentPart.setHeader("Content-Type", "text/html; charset=UTF-8");
multipart.addBodyPart(contentPart);
message.setContent(multipart);
message.setSentDate(new Date());
message.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(host, port, username, password);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
} catch (Exception e) {
e.printStackTrace();
}
打斷點看到是Transport transport = session.getTransport("smtp"); 時報錯
百度好久,三問度娘。最后發現是引用的jar包問題
原先系統用的jdk7 用的 mail-1.4.jar
現在系統是jdk8 重新在網上下載了 最新的 javax.mail.jar 搞定。