SpringBoot使用JavaMailSender发送邮件
在学习过程中,竟然发现springboot可以发送邮件!!于是记录下来,方便以后翻阅!
首先spring提供了一个非常好用的接口----JavaMailSender,用于发送邮件,本文就讲解一下如何快速上手JavaMailSender
这里我是利用网易163邮箱给qq邮箱发送邮件
包括普通文本邮件、附件邮件、图片展示在表面的邮件
1、导入依赖
使用springboot发送邮箱,需要在pom.xml中导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2.在yml中配置属性
这一步需要我们先给邮箱开通SMTP服务,这里我使用的是网易的163邮箱,
因为我已经开通就不给大家演示了,这一步大家可以网上搜索:“如何开通网易163的SMTP服务器”,按照步骤开通即可,非常简单,两三步就能完成。
假设我们已经开通完毕,我们还需要在springboot的application.yml文件中写明配置信息,如下:
#邮箱
spring:
mail:
default-encoding: utf-8
host: smtp.163.com
username: *******@163.com #开通smtp的邮箱
password: PIMQXJZBRCULUSXE #开通时显示的授权密码
3.编写控制类
这里展示了三种发送邮件的方法
- sendMail() :发送文本邮件
- sendMail2():发送文本+附件
- sendMail3() :发送文本+
其中值得一提的是JavaMailSender,是我们上边导入依赖时,spring中的自动注入的接口,发送邮件我们需要用到这个接口中的send(message)方法
/**
* Description: 控制层web方法
* @author ltc
* @version 1.0
* @date 2023/3/31 14:18
*/
@RestController
@RequestMapping("/test")
@Slf4j
public class TestController {
@Autowired
private JavaMailSender mailSender;
/**
*发送邮件(简单的文本邮件)
**/
@PostMapping("/sendmail")
public void sendMail(){
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom("13331755335@163.com");
message.setTo("1771967998@qq.com");
message.setSubject("这是个测试");
message.setText("hello,这是文本内容);
try{
mailSender.send(message);//发送邮件
System.out.println("发送成功");
}
catch (Exception e){
System.out.println("发送失败");
}
}
/**
*将发送的图片添加到邮件的附件中
**/
@PostMapping("/sendmail2")
public void sendMail2() throws MessagingException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom("13331755335@163.com"); //设置发送者
helper.setTo("1771967998@qq.com"); //设置接收者
helper.setSubject("主题:送你一张图片"); //设置邮件的主题
helper.setText("你好,这是文本,送你一张图片"); //设置邮件的内容
FileSystemResource file = new FileSystemResource(new File("D:\\imgs\\图片2.jpg"));//获取本地图片
helper.addAttachment("附件1",file); //给邮件添加附件
try{
mailSender.send(mimeMessage);
System.out.println("发送成功");
}catch (Exception e){
System.out.println("发送失败");
}
}
/**
*将发送的图片展示在表面
**/
@PostMapping("/sendmail3")
public void sendMail3() throws MessagingException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom("13331755335@163.com");
helper.setTo("1771967998@qq.com");
helper.setSubject("主题:图片显示在文本上");
helper.setText("<html><body><img src=\"cid:hello\" ></body></html>",true);
FileSystemResource file = new FileSystemResource(new File("D:\\imgs\\图片2.jpg"));
//addInline的第一个参数一定要和上边的src一致
helper.addInline("hello",file);
try{
mailSender.send(mimeMessage);
System.out.println("发送成功");
}catch (Exception e){
System.out.println("发送失败");
}
}
}
最后,大家就可以启动服务,访问自己的controller方法测试一下。