Java SMTP郵件發送

最近剛剛寫個Java定時發送郵件 所以記錄下代碼,方便後面使用。

此郵件發送的是非匿名郵件,應爲多次測試發現大家習慣性把匿名郵件置爲垃圾郵件

這次用的是outlook的郵箱代碼,這個時候發生了一點小問題

大家看outlook端口爲 587 當時以爲發送郵件端口也是587,所以不能發送。。。。  實際端口爲25,JavaMeil默認發送端口也是25,下面代碼

package com.hand.jobs.job;

import com.sun.mail.util.MailSSLSocketFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;

/**
 * @Auther:lkj
 * @Date:2018/8/9 09:33
 * @E-mail:
 * @Description: 郵件發送工具
 */
public class MailUtil {
    private static Logger logger = LoggerFactory.getLogger(MailUtil.class);

    private static final String HOST = "smtp.partner.outlook.cn";// 郵箱服務器
    private static final String USERNAME = "*****@uabsbattery.com";// 發件人 
    private static final String PASSWORD = "******";// 郵箱密碼
    /**
     * 郵件發送器
     *
     * @return 配置好的工具
     */
    public static void sendMail(String to, String subject, String html) {
        /**
         *
         * 功能描述: 郵件發送,只發送文本
         *
         * @auther:lkj
         * @date:2018/8/9 上午11:46
         * @param:[to 收件人, subject 主題, html 內容]
         * @return:void
         *
         */
        Transport ts = null;
        try{
            Properties prop = new Properties();
            prop.put("mail.host", HOST);
            prop.put("mail.transport.protocol", "smtp");
            prop.put("mail.smtp.auth", "true");
            prop.put("mail.smtp.starttls.enable", "true");
            MailSSLSocketFactory sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            prop.put("mail.smtp.ssl.socketFactory", sf); //這句加上後才發送成功,不加的話就發送不成功
            prop.put("mail.smtp.socketFactory.fallback", "false");
            //使用JavaMail發送郵件的5個步驟
            //1、創建session
            Session session = Session.getInstance(prop);
            //開啓Session的debug模式,這樣就可以查看到程序發送Email的運行狀態
            session.setDebug(true);
            //2、通過session得到transport對象
            ts = session.getTransport();
            //3、使用郵箱的用戶名和密碼連上郵件服務器,發送郵件時,發件人需要提交郵箱的用戶名和密碼給smtp服務器,用戶名和密碼都通過驗證之後才能夠正常發送郵件給收件人。
            ts.connect(HOST, USERNAME, PASSWORD);
            //4、創建郵件
            //創建郵件對象
            MimeMessage message = new MimeMessage(session);
            //指明郵件的發件人
            message.setFrom(new InternetAddress(USERNAME));
            //指明郵件的收件人,現在發件人和收件人是一樣的,那就是自己給自己發
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
            //郵件的標題
            message.setSubject(subject);
            //郵件的文本內容
            message.setContent(html, "text/html;charset=UTF-8");
            //返回創建好的郵件對象
            //5、發送郵件
            ts.sendMessage(message, message.getAllRecipients());
            ts.close();
            logger.info("SendMail Success.>"+to);
        }catch (Exception e){
            e.printStackTrace();
            logger.error(e.getMessage());
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章