一、获取邮箱授权码
1、以163邮箱为例,页面首部找到设置,选择SMTP
2、开启POP3/SMTP服务
3、获取授权码
二、SpringBoot集成邮件发送
1、环境配置
- 添加依赖
<!-- springboot 邮件mail -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>${springboot.version}</version>
</dependency>
- 配置文件
# 发送邮件配置
spring.mail.protocol=smtps
# 配置 smtp 服务器地址
spring.mail.host=smtp.163.com
#服务器的端口
spring.mail.port=465
# 配置邮箱用户名
spring.mail.username=xxx@163.com
# 配置申请到的授权码(刚让复制的授权码)
spring.mail.password=xxx
# 配置邮件编码
spring.mail.default-encoding=UTF-8
# 配饰 SSL 加密工厂
spring.mail.properties.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.debug=true
# 发送方邮件
spring.mail.from=xxx@163.com
邮箱类型 | SMTP服务器地址 | 端口号 |
---|---|---|
QQ邮箱 | smtp.qq.com | 465或587 |
sina邮箱 | smtp.sina.cn | 465或587 |
126邮箱 | smtp.126.com | 465或994 |
aliyun邮箱 | smtp.aliyun.com | 465或994 |
163邮箱 | smtp.163.com | 465或994 |
yeah邮箱 | smtp.yeah.net | 465或994 |
开启debug模式,这样邮件发送过程的日志会在控制台打印出来,方便排查错误
debug: true
三、代码编写
- 工具类
@Component
public class SendEmailUtil {
@Value("${spring.mail.from}")
private String from; // 发送发邮箱地址
@Autowired
private JavaMailSender mailSender;
/**
* 发送纯文本邮件信息
*
* @param to 接收方
* @param subject 邮件主题
* @param content 邮件内容(发送内容)
*/
public void sendMessage(String to, String subject, String content) {
// 创建一个邮件对象
SimpleMailMessage msg = new SimpleMailMessage();
msg.setFrom(from); // 设置发送发
msg.setTo(to); // 设置接收方
msg.setSubject(subject); // 设置邮件主题
msg.setText(content); // 设置邮件内容
// 发送邮件
mailSender.send(msg);
}
/**
* 发送带附件的邮件信息
*
* @param to 接收方
* @param subject 邮件主题
* @param content 邮件内容(发送内容)
* @param files 文件数组 // 可发送多个附件
*/
public void sendMessageCarryFiles(String to, String subject, String content, File[] files) {
MimeMessage mimeMessage = mailSender.createMimeMessage();
//解决附件文件名称过长乱码问题
System.setProperty("mail.mime.splitlongparameters","false");
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setFrom(from); // 设置发送发
helper.setTo(to); // 设置接收方
helper.setSubject(subject); // 设置邮件主题
helper.setText(content,true); // 设置邮件内容
if (files != null && files.length > 0) { // 添加附件(多个)
for (File file : files) {
helper.addAttachment(MimeUtility.encodeWord(file.getName(), "utf-8", "B"), file);
}
}
} catch (MessagingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// 发送邮件
mailSender.send(mimeMessage);
}
/**
* 发送带附件的邮件信息
*
* @param to 接收方
* @param subject 邮件主题
* @param content 邮件内容(发送内容)
* @param file 单个文件
*/
public void sendMessageCarryFile(String to, String subject, String content, File file) {
MimeMessage mimeMessage = mailSender.createMimeMessage();
//解决附件文件名称过长乱码问题
System.setProperty("mail.mime.splitlongparameters","false");
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setFrom(from); // 设置发送发
helper.setTo(to); // 设置接收方
helper.setSubject(subject); // 设置邮件主题
helper.setText(content,true); // 设置邮件内容
helper.addAttachment(MimeUtility.encodeWord(file.getName(), "utf-8", "B"), file); // 单个附件
} catch (MessagingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// 发送邮件
mailSender.send(mimeMessage);
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
}
四、测试邮件发送
@RunWith(SpringRunner.class)
@SpringBootTest(classes = AmqpApplication.class)
public class ApiApplicationTests {
@Resource
private SendEmailUtil emailUtil;
@Test
public void sendStringEmail() {
// 测试文本邮件发送(无附件)
String to = "axxx@163.com"; // 接收邮箱地址
String title = "文本邮件发送测试";
String content = "文本邮件发送测试";
emailUtil.sendMessage(to, title, content);
}
@Test
public void sendFileEmail() {
// 测试单个附件邮件发送
String to = "axxx@163.com"; // 接收邮箱地址
String title = "温度信息附件邮件发送测试";
String content = "温度信息附件邮件发送测试";
File file = new File("C:\\Users\\xsj\\Desktop\\问题.docx");
emailUtil.sendMessageCarryFile(to, title, content, file);
}
@Test
public void sendFilesEmail() {
// 测试多个附件邮件发送
String to = "axxx@163.com"; // 接收邮箱地址
String title = "多个温度信息附件邮件发送测试";
String content = "多个温度信息附件邮件发送测试";
File[] files = new File[2];
files[0] = new File("C:\\Users\\xsj\\Desktop\\位图\\微信_20220729142127.jpg");
files[1] = new File("C:\\Users\\xsj\\Desktop\\问题.docx");
emailUtil.sendMessageCarryFiles(to, title, content, files);
}
}