JavaMail發送郵件簡單實現

實現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));
	}
}


發佈了26 篇原創文章 · 獲贊 40 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章