實現JavaMail發送郵件功能 ,這裏共有三個類去實現。示例用的是企業版163郵箱。
一、郵件VO,代碼如下:
public class MailVO {
// 發送郵件的服務器地址
private String mailServerHost;
// 發送郵件的服務器端口
private String mailServerPort;
// 登錄發送郵件服務器的用戶名
private String userName;
// 登錄發送郵件服務器的密碼
private String password;
// 郵件發送者地址
private String fromAddress;
// 郵件接收者地址
private String[] mailTo;
// 郵件抄送地址
private String[] mailCC;
// 郵件密送地址
private String[] mailBCC;
// 是否需要安全驗證
private boolean validation = true;
// 郵件主題
private String subject;
// 郵件內容
private String content;
// 郵件附件的文件名
private String[] attachFileNames;
/**
* 獲得郵件會話屬性
*
* @return
*/
public Properties getSessionProperties() {
Properties properties = new Properties();
properties.put("mail.smtp.host", this.mailServerHost);
properties.put("mail.smtp.port", this.mailServerPort);
properties.put("mail.smtp.auth", this.validation ? "true" : "false");
return properties;
}
/** 以下爲getter和setter,這裏省略 */
}
二、郵件密碼驗證器,繼承自javax.mail.Authenticator,並重寫getPasswordAuthentication()方法,代碼如下:
public class MyAuthenticator extends Authenticator {
private String userName = null;
private String password = null;
public RainbowAuthenticator() {
}
public RainbowAuthenticator(String userName, String password) {
this.userName = userName;
this.password = password;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(this.userName, this.password);
}
}
三、發送郵件
public class MailSender {
public boolean sendMail(MailVO mailVO) {
System.out.println("====================開始發送====================");
if (null == mailVO) {
return false;
}
boolean flag = true;
// 郵件會話
Session mailSession = null;
if (mailVO.isValidation()) {
MyAuthenticator authenticator = new MyAuthenticator(
mailVO.getUserName(), mailVO.getPassword());
mailSession = Session.getDefaultInstance(
mailVO.getSessionProperties(), authenticator);
} else {
mailSession = Session.getDefaultInstance(mailVO
.getSessionProperties());
}
try {
// 郵件消息器
Message message = new MimeMessage(mailSession);
// 郵件發送地址
Address from = new InternetAddress(mailVO.getFromAddress());
message.setFrom(from);
// 郵件收件人地址
if (null != mailVO.getMailTo()) {
for (String to : mailVO.getMailTo()) {
Address address = new InternetAddress(to);
message.addRecipient(Message.RecipientType.TO, address);
}
}
// 郵件抄送人地址
if (null != mailVO.getMailCC()) {
for (String to : mailVO.getMailCC()) {
Address address = new InternetAddress(to);
message.addRecipient(Message.RecipientType.CC, address);
}
}
// 郵件密送人地址
if (null != mailVO.getMailBCC()) {
for (String to : mailVO.getMailBCC()) {
Address address = new InternetAddress(to);
message.addRecipient(Message.RecipientType.BCC, address);
}
}
// 郵件主題
message.setSubject(mailVO.getSubject());
// 郵件發送時間
message.setSentDate(new Date());
// 設置自動解析html格式的內容
message.setContent(mailVO.getContent(), "text/html;charset=utf-8");
// 發送郵件
Transport.send(message);
} catch (Exception e) {
e.printStackTrace();
flag = false;
}
System.out.println("====================結束髮送====================");
return flag;
}
}
四、測試類。這裏用的是企業版163郵箱,郵件發送服務器地址爲:smtp.qiye.163.com,端口號:25,代碼如下:
public class Test {
public static void main(String[] args) {
MailVO mailVO = new MailVO();
mailVO.setMailServerHost("smtp.qiye.163.com");
mailVO.setMailServerPort("25");
mailVO.setUserName("[email protected]");
mailVO.setPassword("******");
mailVO.setFromAddress("[email protected]");
mailVO.setMailTo(new String[] { "[email protected]" });
mailVO.setSubject("測試郵件標題");
mailVO.setContent("<p>這是一封測試郵件,百度地址爲:<a href=\"www.baidu.com\">www.baidu.com</a></p>");
MailSender sender = new MailSender();
System.out.println(sender.sendMail(mailVO));
}
}