写这篇文章是基于目前我在做的一个项目中的一个需求,邮件催交功能。

首先需要下载一个javaMail.jar ,或者是maven依赖,或者是gradle的依赖。我用的是gradle的依赖方式加载jar。

不过还是要下载一下jar包。

dependencies{

//邮件催交需要的jar
compile files('E:\\ideaWorkspace\\jxls_template\\javaMail\\javax.mail-1.6.0.jar')

}

以下是实现代码:


package test.service;

import com.sun.mail.util.MailSSLSocketFactory;
import lombok.extern.slf4j.Slf4j;
import sun.rmi.runtime.Log;

import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;

/**
 * Created by czb on 2018/4/12.
 */
@Slf4j
public class Main {
    //发件人的邮箱和密码
    //一、发件人的邮箱需要开始SMTP服务
    public static String myEmailAccount = "[email protected]";
    public static String myEmailPassword = "xxxxxxxxxxxxx";//二、授权码,并不是qq密码

    //发件人邮箱的SMTP服务器地址,如果是网易邮箱,这地方就是:smtp.163.com
    public static String myEmailSMTPHost = "smtp.qq.com";
    //收件人邮箱
    public static String receiveMailAccount = "[email protected]";

    public static void main(String[] args) {
        System.out.println("发送邮件开始~");
        // 1. 创建参数配置, 用于连接邮件服务器的参数配置
        Properties props = new Properties();// 参数配置
        props.setProperty("mail.transport.protocol", "smtp");// 使用的协议(JavaMail规范要求)
        props.setProperty("mail.smtp.host", myEmailSMTPHost);// 发件人的邮箱的 SMTP 服务器地址
        props.setProperty("mail.smtp.auth", "true");// 需要请求认证
        try {
            //三、开启SSL加密,如果没有SSL加密,会报530错误
            MailSSLSocketFactory mailSSLSocketFactory = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            props.put("mail.smtp.ssl.enable","true");
            props.put("mail.smtp.ssl.socketFactory",mailSSLSocketFactory);
        }catch (java.security.GeneralSecurityException e){
            log.error(e.getMessage());
        }
        // 2. 根据配置创建会话对象, 用于和邮件服务器交互
        Session session = Session.getInstance(props);
        session.setDebug(true);
        // 3. 创建一封邮件
        MimeMessage message = createMimeMessage(session, myEmailAccount, receiveMailAccount);
        try {
            // 4. 根据 Session 获取邮件传输对象
            Transport transport = session.getTransport();
            // 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错
            transport.connect(myEmailAccount, myEmailPassword);
            // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
            transport.sendMessage(message, message.getAllRecipients());
            // 7. 关闭连接
            transport.close();
        }catch (javax.mail.NoSuchProviderException e){
            log.error(e.getMessage());
        }catch (javax.mail.MessagingException e){
            log.error(e.getMessage());
        }
        System.out.println("发送邮件结束~");
    }

    /**
     * @param session     和服务器交互的会话
     * @param sendMail    发件人邮箱
     * @param receiveMail 收件人邮箱
     * @return message
     */
    public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) {
        // 1. 创建一封邮件
        MimeMessage message = new MimeMessage(session);
        try {
            // 2. From: 发件人
            message.setFrom(new InternetAddress(sendMail, "大头", "UTF-8"));
            // 3. To: 收件人(可以增加多个收件人、抄送、密送)
            message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "收件人名字", "UTF-8"));
            //To:增加收件人,如果要发送多个
            //message.addRecipient(MimeMessage.RecipientType.TO,new InternetAddress("[email protected]","最爱的明明","UTF-8"));
            // 4. Subject: 邮件主题
            message.setSubject("邮件主题", "UTF-8");
            // 5. Content: 邮件正文(可以使用html标签)
            Object o = "后来,终于在眼泪中明白,有些人,一旦错过就不在。妈妈说,人生不能错过的两种东西,最后一班回家的车,和一段真诚的感情,幸运的是,我只错过后者";
            message.setContent(o, "text/html;charset=UTF-8");
            // 6. 设置发件时间
            message.setSentDate(new Date());
            // 7. 保存设置
            message.saveChanges();
        }catch (UnsupportedEncodingException e){
            log.error(e.getMessage());
        }catch (MessagingException e){
            log.error(e.getMessage());
        }
        return message;
    }
}

以上代码有三个地方我标记为红色的,是需要注意的地方。


第一个地方:

一个javaMail.jar实现邮件发送


一个javaMail.jar实现邮件发送


这样做完之后,第一步就没啥问题了。

第二个地方,生成授权码:

一个javaMail.jar实现邮件发送


好了,第二个注意的地方就解决了。

第三个地方是因为我之前没有加上那一段代码,所以报了530错误。说是ssl的权限被拒绝了,所以连不上。加上这段代码就OK了。


到此测试代码就完成了,然后测试一下:

一个javaMail.jar实现邮件发送

OK,邮件发出去了。

相关文章:

  • 2021-08-26
  • 2021-11-07
  • 2021-11-17
  • 2021-09-26
  • 2021-08-18
  • 2021-10-27
  • 2021-11-12
猜你喜欢
  • 2022-12-23
  • 2021-08-06
  • 2021-11-03
  • 2021-06-07
  • 2021-11-28
  • 2021-12-31
  • 2021-04-16
相关资源
相似解决方案