本文基於Spring 注解,讓Spring跑起來
。
容器:tomcat6
(1) 導入jar包mail.jar、activation.jar和org.springframework.comtext.support.jar,其中mail.jar來自於javaMail,activation.jar來自於jaf,最好都使用最新版。
(2) 編寫MailUtil類作為郵件發送的工具類:
- /**
- *
- * @author geloin
- * @date 2012-5-8 上午11:02:41
- */
- package com.embest.ruisystem.util;
-
- import java.util.Properties;
-
- import javax.mail.MessagingException;
- import javax.mail.Session;
- import javax.mail.internet.MimeMessage;
-
- import org.springframework.mail.javamail.JavaMailSenderImpl;
- import org.springframework.mail.javamail.MimeMessageHelper;
-
- /**
- *
- * @author geloin
- * @date 2012-5-8 上午11:02:41
- */
- public class MailUtil {
-
- /**
- * 發送html郵件
- *
- * @author geloin
- * @date 2012-5-8 上午11:38:44
- * @param toEmail
- * @param subject
- * @param htmlContent
- */
- public static void sendMail(String toEmail, String subject,
- String htmlContent) {
-
- JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();
-
- // 發送郵箱的郵件服務器
- senderImpl.setHost(Constants.emailHost);
-
- // 建立郵件消息,發送簡單郵件和html郵件的區別
- MimeMessage mailMessage = senderImpl.createMimeMessage();
- // 為防止亂碼,添加編碼集設置
- MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,
- "UTF-8");
-
- try {
- // 接收方郵箱
- messageHelper.setTo(toEmail);
- } catch (MessagingException e) {
- throw new RuntimeException("收件人郵箱地址出錯!");
- }
- try {
- // 發送方郵箱
- messageHelper.setFrom(Constants.emailFrom);
- } catch (MessagingException e) {
- throw new RuntimeException("發件人郵箱地址出錯!");
- }
- try {
- messageHelper.setSubject(subject);
- } catch (MessagingException e) {
- throw new RuntimeException("郵件主題出錯!");
- }
- try {
- // true 表示啟動HTML格式的郵件
- messageHelper.setText(htmlContent, true);
- } catch (MessagingException e) {
- throw new RuntimeException("郵件內容出錯!");
- }
-
- Properties prop = new Properties();
- // 將這個參數設為true,讓服務器進行認證,認證用戶名和密碼是否正確
- prop.put("mail.smtp.auth", "true");
- // 超時時間
- prop.put("mail.smtp.timeout", "25000");
-
- // 添加驗證
- MyAuthenticator auth = new MyAuthenticator(Constants.emailUsername,
- Constants.emailPassword);
-
- Session session = Session.getDefaultInstance(prop, auth);
- senderImpl.setSession(session);
-
- // senderImpl.setJavaMailProperties(prop);
- // 發送郵件
- senderImpl.send(mailMessage);
-
- }
-
- }
以上代碼中,發送郵箱的郵件服務器、發送方郵箱、發送方用戶名、發送方郵箱密碼均來自Constants類,該類從資源文件中獲取相關數據並設為類中常量的值,資源環境中的名值對如下所示:
- email.from=abc@163.com
- email.host=smtp.163.com
- email.username=abc
- email.password=abcdefg
其中,email.host為發送方郵箱的發送服務器,163郵箱為smtp.163.com,若使用別的郵箱而未知服務器,則可使用foxmail等工具測試得出結果,或者問渡娘。
上述代碼中很重要的片段如下:
- // 添加驗證
- MyAuthenticator auth = new MyAuthenticator(Constants.emailUsername, Constants.emailPassword);
- Session session = Session.getDefaultInstance(prop, auth);
- senderImpl.setSession(session);
上述代碼的作用為添加驗證,在使用郵箱服務器發送郵件時,需要驗證發送方的用戶名和密碼,驗證成功後,郵箱服務器才允許發送郵件。若不加上此代碼,則會出現AuthenticationFailedException異常。
MyAuthenticator為自定義的驗證類,該類代碼如下所示: