需求
最近在由于項目需求需要用到郵箱驗證,因此在這里分享一下Java如何用代碼實現(xiàn)郵箱發(fā)送信息到用戶手里(這里以qq郵箱為例)
最終效果
這里展示一下發(fā)送到用戶手里的最終效果
效果
那么如何實現(xiàn)呢?
1. 開通服務(wù)
- 登錄到自己的qq郵箱中
- 點擊頭部的”設(shè)置“按鈕
- 點擊二級目錄“賬戶”中拉到下部,這POP3/SMTP服務(wù)和IMAP/SMTP服務(wù)這兩項勾上
開啟發(fā)送服務(wù) - 開啟后記錄驗證后的校驗串,供后續(xù)代碼使用
2. 導(dǎo)入依賴
<!-- 郵箱-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<!--郵件發(fā)送-->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.1</version>
</dependency>
3. 編寫MailUtils工具類
這這里解釋一下類里面看兩個方法:
sendEmail() 為發(fā)送的方法,參數(shù)有
toEmailAddress:用戶郵箱
emailTitle:郵件標(biāo)題
emailContent:發(fā)送內(nèi)容
DLYZ() 方法則為HTML模板,參數(shù)只有一個,就是驗證碼code??梢愿鶕?jù)自定義HTML發(fā)送,當(dāng)然這里不建議引入css文件和js文件,因為郵箱服務(wù)器會在發(fā)送后屏蔽掉這些文件
下面代碼過多,自行品味
public class MailUtils {
public static void sendEmail(String toEmailAddress, String emailTitle, StringBuffer emailContent) throws GeneralSecurityException, MessagingException {
Properties props = new Properties();
//開啟debug調(diào)試
props.setProperty("mail.debug", "false");
//發(fā)送服務(wù)器需要身份驗證
props.setProperty("mail.smtp.auth", "true");
//設(shè)置郵件服務(wù)器主機(jī)名
props.setProperty("mail.host", "smtp.qq.com");
//發(fā)送郵件協(xié)議名稱
props.setProperty("mail.transport.protocol", "smtp");
//創(chuàng)建MailSSLSocketFactory
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.socketFactory", sf);
//創(chuàng)建會話
Session session = Session.getInstance(props);
//發(fā)送的消息,基于觀察者模式進(jìn)行設(shè)計的
Message msg = new MimeMessage(session);
//設(shè)置發(fā)送標(biāo)題
msg.setSubject(emailTitle);
//設(shè)置發(fā)送內(nèi)容
//使用StringBuilder,因為StringBuilder加載速度會比String快,而且線程安全性也不錯
StringBuilder builder = new StringBuilder();
builder.append("\n" + emailContent);
//發(fā)送普通文本內(nèi)容
//msg.setText(builder.toString());
//發(fā)送帶html的內(nèi)容(由于需要發(fā)送HTML信息,故選這個)
msg.setContent(builder.toString(),"text/html;charset=utf-8");
msg.setFrom(new InternetAddress("發(fā)送者郵箱"));
Transport transport = session.getTransport();
transport.connect("smtp.qq.com", "發(fā)送者郵箱", "校驗串");
transport.sendMessage(msg, new Address[]{new InternetAddress(toEmailAddress)});
transport.close();
}
//登錄驗證碼HTML消息模板
public StringBuffer DLYZ(String code){
StringBuffer dlyz =new StringBuffer();
dlyz.append("<body style=\"color: #666; font-size: 14px; font-family: 'Open Sans',Helvetica,Arial,sans-serif;\">\n" +
"<div class=\"box-content\" style=\"width: 80%; margin: 20px auto; max-width: 800px; min-width: 600px;\">\n" +
" <div class=\"header-tip\" style=\"font-size: 12px;\n" +
" color: #aaa;\n" +
" text-align: right;\n" +
" padding-right: 25px;\n" +
" padding-bottom: 10px;\">\n" +
" </div>\n" +
" <div class=\"info-top\" style=\"padding: 15px 25px;\n" +
" border-top-left-radius: 10px;\n" +
" border-top-right-radius: 10px;\n" +
" background: {0};\n" +
" color: #fff;\n" +
" overflow: hidden;\n" +
" line-height: 32px;\">\n" +
" <img src=\"http://0000.000.00.00:8088/images/logo.png\" style=\"float: left; margin: 0 10px 0 0; width: 32px;\" /><div style=\"color:#010e07\"><strong>OA系統(tǒng)</strong></div>\n" +
" </div>\n" +
" <div class=\"info-wrap\" style=\"border-bottom-left-radius: 10px;\n" +
" border-bottom-right-radius: 10px;\n" +
" border:1px solid #ddd;\n" +
" overflow: hidden;\n" +
" padding: 15px 15px 20px;\">\n" +
" <div class=\"tips\" style=\"padding:15px;\">\n" +
" <p style=\" list-style: 160%; margin: 10px 0;\">Hi,</p>\n" +
" <p style=\" list-style: 160%; margin: 10px 0;\">歡迎使用XXXXX-XXXXOA系統(tǒng),您的驗證碼為:<span style=\"font-weight:bolder;font-size:25px;\">"+code+"</span> (5分鐘內(nèi)有效),為了保證您的帳戶安全,請勿向任何人提供此驗證碼。感謝您使用!</p>\n" +
" </div>\n" +
" <div class=\"time\" style=\"text-align: right; color: #999; padding: 0 15px 15px;\">本郵件由系統(tǒng)自動發(fā)送,請勿直接回復(fù)</div>\n" +
" <br>\n" +
" <table class=\"list\" style=\"width: 100%; border-collapse: collapse; border-top:1px solid #eee; font-size:12px;\">\n" +
" <thead>\n" +
" <tr style=\" background: #fafafa; color: #333; border-bottom: 1px solid #eee;\">\n" +
" \n" +
"官方網(wǎng)站:<a href=\"http://000.00.00.00:8088\">http://000.00.00.00:8088<a>\n" +
" </tr>\n" +
" </thead>\n" +
" <tbody>\n" +
" <br>\n" +
"管理員郵箱:XXXXXXXXXXX@qq.com\n" +
" </tbody>\n" +
" </table>\n" +
" </div>\n" +
"</div>\n" +
"</body>\n");
return dlyz;
}
}
4. 測試發(fā)送
@Test
public void testMailTemplate() throws GeneralSecurityException, MessagingException {
MailUtils mailUtils = new MailUtils();
mailUtils.sendEmail("某某某@qq.com","測試郵件發(fā)送",mailUtils.DLYZ("666666"));
}
結(jié)果:
效果
OK,大功告成!
