Java實現發送郵箱驗證碼/注冊驗證鏈接


本文以163郵箱為例

1、准備(郵箱賬號,郵箱必須設置POP3/SMTP/IMAP,設置步驟如下:)

》》步驟:1 開啟授權碼服務

》》步驟:2 手機獲取驗證碼

》》步驟:3 設置授權碼

》》步驟:4 開啟服務smtp/pop3/imap

》》步驟:5 開啟成功,忘記授權碼可重設

 

2、發送郵件的jar包(以下使用的為maven的pom坐標)

<dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4</version>
        </dependency>

 

3、代碼實現

 

import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

//發送郵件
public class test {
    //配置信息
    private static final String MAIL_TRANSPORT_PROTOCOL ="mail.transport.protocol";//郵件的傳輸協議
    private static final String MAIL_TRANSPORT_PROTOCOL_VALUE ="smtp";//使用smtp協議
    private static final String MAIL_HOST ="mail.host";//發送郵件的主機
    private static final String MAIL_HOST_VALUE ="smtp.163.com"; //發送郵件的服務器地址
    private static final String MAIL_DEBUG ="mail.debug"; //調試模式
    private static final String MAIL_SMTP_AUTH ="mail.smtp.auth";//郵件smtp作者確認
    private static final String CONFIRM ="true";//確認
    private static final String SEND_ENCODING_LAYOUT ="text/html;charset=utf-8";//發送郵件的編碼格式

    //郵件編輯信息(僅需寫上自己的)
    private static final String MAIL_FROM =xxx@163.com";//郵件發送人
    private static final String MAIL_FROM_PASSWORD ="xxxxx";//郵件發送人授權碼
    private static final String MAIL_SUBJECT_REGISTER ="xxxx【注冊鏈接】";//郵件主題(注冊鏈接)
    private static final String MAIL_SUBJECT_VERIFY_CODE ="xxxx【郵箱驗證碼】";//郵件主題(郵箱驗證碼)
    private static final String MAIL_ORGANIZATION ="xxxx";//郵件組織
    private static final String MAIL_WEBSITE ="https://www.xxxx.com/";//組織主頁
    private static final String MAIL_ORGANIZATION_LOGO ="https://wwwxxxx.com/xxxx/xxxlogo.jpg";//網站logo
    private static final String MAIL_ORGANIZATION_QRCODE ="https://www.xxxx.com/xxxx/xxx.jpg";//網站二維碼圖片


    public static void main(String[] args) throws Exception{
        sendEmail(MAIL_FROM,
                "xxxx@qq.com",
                MAIL_SUBJECT_REGISTER,
                prettyLayout(MAIL_ORGANIZATION,MAIL_WEBSITE,
                        MAIL_ORGANIZATION_LOGO,
                        prettyRegisterLayout("2小時",MAIL_ORGANIZATION,"https://www.xxxx.com/user/register/8asc824jnd741n2c"),
                        MAIL_ORGANIZATION_QRCODE),
                MAIL_FROM_PASSWORD);
        sendEmail(MAIL_FROM,
                "xxxx@qq.com",
                MAIL_SUBJECT_VERIFY_CODE,
                prettyLayout(MAIL_ORGANIZATION,MAIL_WEBSITE,
                        MAIL_ORGANIZATION_LOGO,
                        prettyQrCodeLayout("2分鍾","580123"),
                        MAIL_ORGANIZATION_QRCODE),
                MAIL_FROM_PASSWORD);
    }

    /**
     * 發送郵件
     * @param from 發送人(郵箱地址)
     * @param to 接收人  (郵箱地址)
     * @param subject 主題
     * @param content 內容
     * @param password  密碼(密碼為授權碼不是郵箱的登錄密碼)
     * @throws Exception
     */
    public static void sendEmail(String from,String to,String subject,String content,String password) throws Exception{
        Properties props = new Properties();//key value:配置參數。真正發送郵件時再配置
        props.setProperty(MAIL_TRANSPORT_PROTOCOL, MAIL_TRANSPORT_PROTOCOL_VALUE);//指定郵件發送的協議,參數是規范規定的
        props.setProperty(MAIL_HOST, MAIL_HOST_VALUE);//指定發件服務器的地址,參數是規范規定的
//        props.setProperty(MAIL_DEBUG, "true");//郵件發送的調試模式,參數是規范規定的
        props.setProperty(MAIL_SMTP_AUTH, CONFIRM);//請求服務器進行身份認證。參數與具體的JavaMail實現有關
        Session session = Session.getInstance(props);//發送郵件時使用的環境配置
        session.setDebug(true);
        MimeMessage message = new MimeMessage(session);
        //設置郵件的頭
        message.setFrom(new InternetAddress(  from  )); //誰發送的
        message.setRecipients(Message.RecipientType.TO,    to   );//發送給誰
        message.setSubject(   subject   );
        //設置正文
        message.setContent(  content  ,SEND_ENCODING_LAYOUT);
//        message.setText("<h1>hello</h1>");//純文本
        message.saveChanges();

        //發送郵件
        Transport ts = session.getTransport();
        ts.connect(   from  , password  );       // 密碼為授權碼不是郵箱的登錄密碼
        ts.sendMessage(message, message.getAllRecipients());//對象,用實例方法}
    }

    /**
     * 郵件內容頭部
     * @param websiteName 網站名稱
     * @param principal 網站主頁
     * @param principalImage 網站logo圖片超鏈接
     * @param logoWidth logo圖片寬度
     * @param logoHeight logo圖片高度
     * @return
     */
    private static String mailHead(String websiteName,String principal,String principalImage,String logoWidth,String logoHeight){
        return "<div style=\"margin: 0 auto; text-align: left;\n" +
                "padding: 38px 50px; width: 560px; font-size: 14px;\n" +
                "color: #606060; background: #fff; border-radius:\n" +
                "2px; font-family:Tahoma,Helvetica,'microsoft\n" +
                "yahei','Hiragino Sans GB',Simsun,sans-serif;\n" +
                "box-shadow: 0 0 4px rgba(0,0,0,0.2);\">\n" +
                "        <table style=\"margin: 0 auto;\n" +
                "text-align: left; font-size: 14px; color: #606060;\n" +
                "background: #fff; font-family: inherit;\n" +
                "font-family:Tahoma,Helvetica,'microsoft\n" +
                "yahei','Hiragino Sans GB',Simsun,sans-serif;\" width=\"560\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n" +
                "            <tbody><tr>\n" +
                "                <th colspan=\"2\"><a href=\""+principal+"\" rel=\"noopener\" target=\"_blank\"><img src=\""+principalImage+"\" width=\""+logoWidth+"\" height=\""+logoHeight+"\"></a></th>\n" +
                "            </tr>\n" +
                "            <tr>\n" +
                "                <td colspan=\"2\" style=\"font-size:\n" +
                "18px; padding: 30px 0\n" +
                "18px;\">尊敬的"+websiteName+"用戶:</td>\n" +
                "            </tr>\n" +
                "            <tr>\n" +
                "                <td colspan=\"2\" style=\"line-height: 1.8;\">\n" +
                "                   \n" +
                "<div>歡迎使用"+websiteName+"!</div>\n";
    }

    /**
     * 郵件內容腳部
     * @param websiteName 網站名稱
     * @param principal 網站主頁
     * @param qrCode 二維碼圖片鏈接(可不填寫/僅支持第一張)
     * @return
     */
    private static String mailFoot(String websiteName,String principal,String...qrCode){
        SimpleDateFormat sdf  = new SimpleDateFormat("yyyy年MM月dd日");
        String nowDate =sdf.format(new Date());
        return "            <tr>\n" +
                "                <td colspan=\"2\" style=\"text-align:\n" +
                "right; line-height: 1.8; padding-bottom: 18px;\">\n" +
                "                    <div>"+websiteName+"團隊</div>\n" +
                "                    <div style=\"color:\n" +
                "#909090;\">"+nowDate+"</div>\n" +
                "                </td>\n" +
                "            </tr>\n" +
                (qrCode!=null&&qrCode.length!=0?setQrCode(websiteName,qrCode[0]):"")+
                "            <tr>\n" +
                "                <td colspan=\"2\" style=\"padding-top: 20px; border-top: 1px solid\n" +
                "#e7e7e7; line-height: 1.8; font-size: 12px; color:\n" +
                "#909090;\">\n" +
                "                    <div>溫馨提示:</div>\n" +
                "                    <div>1.\n" +websiteName+
                "官方網址為:<a href=\""+principal+"\" rel=\"noopener\" target=\"_blank\">"+principal+"</a>,請注意網址,防止釣魚。</div>\n" +
                "                    <div>2.\n" +
                "本郵件為系統自動發出,請勿回復。</div>\n" +
                "                </td>\n" +
                "            </tr>\n" +
                "        </tbody></table>\n" +
                "    </div>";
    }

    /**
     * 輸出漂亮格式(帶logo,可帶二維碼)
     * @param websiteName 網站名稱
     * @param principal 主頁地址
     * @param principalImage 主頁logo 323 x 48 拉伸寬度為 (超鏈接形式)
     * @param business 業務
     * @param qrCode 二維碼 (超鏈接形式)
     * @return
     */
    private static String prettyLayout(String websiteName,String principal,String principalImage,String business,String...qrCode){
        return mailHead(websiteName,principal,principalImage,"","")+
                business +
                mailFoot(websiteName,principal,qrCode);


    }


    /**
     * 二維碼 樣式A
     * @param websiteName //網站名稱
     * @param qrCode //二維碼圖片鏈接
     * @return
     */
    private static String setQrCode(String websiteName,String qrCode){
        return "            <tr>\n" +
                "                <td style=\"padding-bottom: 20px;\" width=\"145\">\n" +
                "                    <img src=\""+qrCode+"\" width=\"110\" height=\"112\">\n" +
                "                </td>\n" +
                "                <td style=\"line-height: 2;\n" +
                "padding-bottom: 20px;\">\n" +
                "                    <div style=\"font-size: 18px;\n" +
                "color:\n" +
                "#03c5ff;\">掃描關注"+websiteName+"公眾號</div>\n" +
                "                </td>\n" +
                "            </tr>\n" ;
    }

    /**
     * 發送郵箱驗證碼
     * @param validity 有效期/單位自行填寫
     * @param verifyCode 驗證碼
     * @return
     */
    private static String prettyQrCodeLayout(String validity,String verifyCode){
        return "<div>郵箱驗證碼的有效期為:"+validity+"郵箱驗證碼如下:</div>\n" +
                "                </td>\n" +
                "            </tr>\n" +
                "            <tr>\n" +
                "                <td colspan=\"2\" style=\"font-size:\n" +
                "12px; line-height: 20px; padding-top: 14px;\n" +
                "padding-bottom: 25px; color: #909090;\">\n" +
                "                    <div>"+verifyCode+"</div>\n" +
                "                </td>\n" +
                "            </tr>\n";
    }

    /**
     * 發送郵箱注冊激活鏈接
     * @param validity 有效期/單位自行填寫
     * @param websiteName 網站名
     * @param verifyLink 注冊驗證鏈接
     * @return
     */
    private static String prettyRegisterLayout(String validity,String websiteName,String verifyLink){
        return  "<div>請點擊以下的鏈接驗證您的郵箱,驗證成功后就可以使用"+websiteName+"提供的服務了。</div>\n" +
                "                </td>\n" +
                "            </tr>\n" +
                "            <tr>\n" +
                "                <td colspan=\"2\" style=\"font-size:\n" +
                "12px; line-height: 20px; padding-top: 14px;\n" +
                "padding-bottom: 25px; color: #909090;\">\n" +
                "                    <div>該鏈接的有效期為"+validity+",如鏈接超過有效期請重新發送郵件<a href=\""+verifyLink+"\" style=\"color: #03c5ff; text-decoration:\n" +
                "underline;\" rel=\"noopener\" target=\"_blank\">"+verifyLink+"</a></div>\n" +
                "                    <div style=\"padding-top:\n" +
                "4px;\">(如果不能打開頁面,請復制該地址到瀏覽器打開)</div>\n" +
                "                </td>\n" +
                "            </tr>\n";
    }


}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM