目录
之前用过 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 授权码的获取方式:
- 进入 qq 邮箱首页,点击顶部导航栏的“设置”一栏。
- 选择“账户”,下滑至“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”。
- 开启 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", "这里是标题", "这里是内容");