Java發(fā)送郵件那些事

需求

最近在由于項目需求需要用到郵箱驗證,因此在這里分享一下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,大功告成!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容