前言🦄
我们在开发博客时,或者在一些需要通知用户的项目中,通常会使用以下方法通知用户:
- 短信
- 邮件
- 其他(app)推送等
但是短信得收费啊🤨非公司项目,我们通常选择使用邮件通知,例如本博客,在评论后 我就会收到通知,如下:
当我进行评论回复的时候,你们也会收到通知,当然也是我发送的~
今天我就来介绍一下在springboot中如何发送邮件。
准备✉️
在进行发送邮件前,我们需要准备如下几样东西:
邮箱
这个我就不多说了,基本每个人都有~
开通smtp服务
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地 址传送邮件的规则,由它来控制信件的中转方式
每种邮箱的smtp服务器都不同
QQ --- smtp.qq.com
sina --- smtp.sina.cn
aliyun --- smtp.aliyun.com
163 --- smtp.163.com
首先 ,我们在自己对应的邮箱内找到设置,在设置中找到如下设置
然后我们开启IMAP|SMTP服务,再申请一个授权密码,这个密码就是服务器使用这个邮箱发送邮件的密码。
申请成功后 建议记住密码,像163邮箱,只显示一次😒
后台
新建项目,在项目的pom文件中,加入maven坐标
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
</dependencies>
在application.properties配置文件中,加入如下配置
server.port=8081
#邮箱服务器地址
#QQ smtp.qq.com
#sina smtp.sina.cn
#aliyun smtp.aliyun.com
#163 smtp.163.com
spring.mail.host=smtp.163.com
#邮箱用户名
spring.mail.username=自己的邮箱
#邮箱密码(注意:应该使用独立密码,设置里面获取)
spring.mail.password=授权密码
#编码格式
spring.mail.default-encoding=UTF-8
#发送邮件地址
mail.fromMail.sender=自己的邮箱
新建controller类
package com.world.lzh;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
/**
* @Author lzh
* @Date 2022/5/7 - 9:28
* @Description
* @Version 1.0.0
**/
@RestController
public class IndexController {
@Autowired
private JavaMailSender mailSender;
@Value("${mail.fromMail.sender}") //发送人的邮箱
private String from;
/**
* 普通文本邮件发送
*
* @param to 发给谁 对方邮箱
* @param subject 标题 测试邮件
* @param content 内容
*/
@RequestMapping("/sendMail")
public String sendTextMail(String to, String subject, String content) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
message.setText(content);
try {
mailSender.send(message);//发送
System.out.println("测试邮件已发送。");
} catch (Exception e) {
System.out.println("发送邮件时发生异常了!");
return "邮件发送失败:" + e;
}
return "邮件发送成功";
}
/**
* 发送HTML邮件
*
* @param to 发给谁 对方邮箱
* @param subject 标题 测试邮件
* @param content 内容
*/
@RequestMapping("/sendHtmlMail")
public String sendHtmlMail(String to, String subject, String content) {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = null;
try {
mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
mimeMessageHelper.setFrom(from);
mimeMessageHelper.setTo(to);
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setText(content, true);//发送HTML内容时需要设置html开启,默认为false
mailSender.send(mimeMessage);
} catch (MessagingException e) {
e.printStackTrace();
return "邮件发送失败:" + e;
}
return "邮件发送成功";
}
/**
* 发送附件邮件
*
* @param to 发给谁 对方邮箱
* @param subject 标题 测试邮件
* @param content 内容
* @param filePath 文件路径
*/
@RequestMapping("/sendAttachmentMail")
public String sendAttachmentMail(String to, String subject, String content, String filePath) {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = null;
try {
mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);//需要开启邮件附件
mimeMessageHelper.setFrom(from);
mimeMessageHelper.setTo(to);
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setText(content, true);
FileSystemResource fileSystemResource = new FileSystemResource(new File(filePath));
String fileName = fileSystemResource.getFilename();
mimeMessageHelper.addAttachment(fileName, fileSystemResource);//添加附件
mailSender.send(mimeMessage);
} catch (MessagingException e) {
e.printStackTrace();
return "邮件发送失败:" + e;
}
return "邮件发送成功";
}
}
以上为三种发送方式,我们依次测试。
测试✔️
简单邮件
纯文本邮件,在此我用apipost测试。
HTML邮件
我在这插入一个简单的html代码片段,为了区分是html,给h3标签加了个红色
附件邮件
我这直接找个本地的文件,当做附件,可以使用网络地址。
直接用昨天上传的图片
是不是非常的so easy~
源码地址:点击访问欢迎评论star⭐
64