【springboot】使用 javax.mail 发送邮件

目录

之前用过 springboot 自带的发送邮件,发送一个简单邮件需要11s+,而使用 javax.mail 只需要不到2s,暂时不清楚原因。

引入依赖

在项目的根目录下的 pom.xml 中加入以下内容:

<!--邮件发送-->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4</version>
</dependency>

配置信息

在项目的 resource 文件夹下的 application.properties 中加入以下内容:

## 邮箱配置
# 邮箱stmp
spring.mail.host=smtp.qq.com
# 你的qq邮箱
spring.mail.username=xxxxx@qq.com
# 注意这里不是邮箱密码,而是SMTP授权密码
spring.mail.password=xxxxx

注意:这里的 host 以 qq 邮箱为例,其他邮箱需要做出相应的修改,如163邮箱:smtp.163.com

SMTP 授权码的获取方式:

  1. 进入 qq 邮箱首页,点击顶部导航栏的“设置”一栏。
  2. 选择“账户”,下滑至“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”。
  3. 开启 POP3/SMTP 服务,开启需要验证,验证完毕后会给出 SMTP 授权码。

发送邮件工具类

import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

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

/**
 * @program: xxx
 * @description: 发送邮件工具类
 * @author: z2devil
 * @create: 2021-05-19
 **/
@Service
@RequiredArgsConstructor
public class MailUtils {

    @Value("${spring.mail.host}")
    private String host;

    @Value("${spring.mail.username}")
    private String username;

    @Value("${spring.mail.password}")
    private String password;

    /**
     * 简单文本邮件
     * @param to 接收者邮件
     * @param subject 邮件主题
     * @param content 邮件内容
     */
    public void sendSimpleMail(String to, String subject, String content) throws Exception {
        Properties prop = new Properties();
        prop.setProperty("mail.host", host);
        prop.setProperty("mail.transport.protocol", "smtp");
        prop.setProperty("mail.smtp.auth", "true");
        // 使用JavaMail发送邮件的5个步骤
        // 1、创建session
        Session session = Session.getInstance(prop);
        // 开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
        session.setDebug(false);
        // 2、通过session得到transport对象
        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(content, "text/html;charset=UTF-8");
        // 5、发送邮件
        ts.sendMessage(message, message.getAllRecipients());
        ts.close();
    }
}

使用方法

mailUtils.sendSimpleMail("xxxxx@qq.com", "这里是标题", "这里是内容");
上一篇:邮件配置


下一篇:django send_mail发送邮件