springboot发送邮件(Mail)笔记

使用场景

注册验证,注册各大网站,通常需要输入邮件地址,在注册成功后,会发送一封邮箱验证的邮件,点击确认,证明这个邮箱是用户自己的
网站营销,公司运营做活动的时候,提前几天给用户发邮件,提醒老用户在活动时间参加活动。
安全防线, 一个网站好久不用的时候,会忘记密码,这个时候需要找回密码,很多种找回方式,最常用的找回方式就是通过邮箱找回密码。
首先,在网站输入邮箱,系统会根据注册的邮箱发送一封邮件,根据邮件中的地址,可以重新设置新的密码。
触发机制, 定时邮件的发送,计算机忘记关机,发送一个特殊的邮件,让计算机自动关机。
提醒,监控告警, 如果系统没有监控,将是一种灾难性的事件,系统被实时的监控起来,出了问题,第一时间通知到开发人员,在事态没有扩散,影响最小的时候把问题解决掉。

邮件发送原理

邮件传输协议(早期):
SMTP协议:简单传输协议,原地址到目标地址传输的规范,重要特点,能在传送中接力传送邮件,
POP3协议:从邮件服务器上下下载协议。
后期增加的协议:
IMAP协议:对POP3协议的补充
Mime协议:二进制有关
邮件发送流程:
在这里插入图片描述

实战

依赖

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

配置文件:
application.yaml配置文件

spring:
  mail:
    host: smtp.qq.com
    username: //账户记得加后缀qq.com
    password: //授权码不是密码
    default-encoding: UTF-8

简单(文本)邮件

/**
 * 参数:
 * 发送给谁
 * 发送主题
 * 发送内容
 */
@Service
public class MailService {
    @Value("${spring.mail.username}")//注意加花括号
    private String from;
    @Autowired
    private JavaMailSender javaMailSender;//不要new
    public void sendSimpleMail(String to,String subject,String content)
    {
        SimpleMailMessage message=new  SimpleMailMessage();
                message.setTo(to);
                message.setSubject(subject);
                message.setText(content);
                message.setFrom(from);
               javaMailSender.send(message);
    }
}

测试

  @Test
    void test1()
    {

            mailService.sendSimpleMail("xxxxxxxxxxx@qq.com","测试邮件","hellow,这是帝封邮件!");
System.out.println("发送成功!");
    }

常犯的错误:
如果交给spring管理就用@Autowired注入,new 的话为空
HTML文件邮件()

 public void sendHTMLMail(String to,String subject ,String content) throws MessagingException {
        MimeMessage mimeMessage= javaMailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper =new MimeMessageHelper(mimeMessage,true);
        mimeMessageHelper.setTo(to);
        mimeMessageHelper.setSubject(subject);
        mimeMessageHelper.setText(content,true);
        mimeMessageHelper.setFrom(from);
        javaMailSender.send(mimeMessage);
    }

带附件的邮件

 public void sendFileMail(String to,String subject ,String content,String filePath) throws MessagingException {
        MimeMessage mimeMessage= javaMailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper =new MimeMessageHelper(mimeMessage,true);
        mimeMessageHelper.setTo(to);
        mimeMessageHelper.setSubject(subject);
        mimeMessageHelper.setText(content,true);
        mimeMessageHelper.setFrom(from);
        FileSystemResource file=new FileSystemResource(new File(filePath));
        String fileName=file.getFilename();
        mimeMessageHelper.addAttachment(fileName,file);//如果多个邮件批量发,参数设为数组,遍历数组多次执行mimeMessageHelper.addAttachment(fileName,file)
        javaMailSender.send(mimeMessage);
    }

带图片的邮件

  public void sendPactureMail(String to,String subject ,String content,String srcPath,String srcId) throws MessagingException {
        MimeMessage mimeMessage= javaMailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper =new MimeMessageHelper(mimeMessage,true);
        mimeMessageHelper.setTo(to);
        mimeMessageHelper.setSubject(subject);
        mimeMessageHelper.setText(content,true);
        mimeMessageHelper.setFrom(from);
        FileSystemResource file=new FileSystemResource(new File(srcPath));

        mimeMessageHelper.addInline(srcId, file);
        javaMailSender.send(mimeMessage);
    }

模板邮件
thymeleaf依赖
写html(thymeleaf),
使用TemplateEngine 解析HTML,Context(import org.thymeleaf.context.Context;)设置参数

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>你好,感谢您的注册,这是一封验证邮件</h1>
<!--/*@thymesVar id="id" type=""*/-->
<a href="#" th:href="@{https://www.baidu.com/{id}(id=${id})}">激活账号</a>
</body>
</html>
 @Resource
    private TemplateEngine templateEngine;
    @Test
    void test4()
    {
Context context=new Context();
context.setVariable("id","11");
String content=templateEngine.process("index.html",context);
        try {
            mailService.sendHTMLMail("xxxxxxx@qq.com","测试邮件",content);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        System.out.println("发送成功!");
    }

异常的处理
使用loginfo打印参数等

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值