JAVA SMTP邮件发送

时间:2024-03-26 12:41:01

最近刚刚写个Java定时发送邮件 所以记录下代码,方便后面使用。

此邮件发送的是非匿名邮件,应为多次测试发现大家习惯性把匿名邮件置为垃圾邮件

这次用的是outlook的邮箱代码,这个时候发生了一点小问题

JAVA SMTP邮件发送

大家看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());
        }
    }
}