spring boot发送邮件教程

一、说明:

项目中,我们经常会用到发送邮件的功能,那邮件的功能有很多:

  • 网站的注册验证

  • 网站营销

  • 安全的最后一道防线

  • 提醒、监控、告警

  • 触发机制

二、邮件传输原理

邮件传输协议:SMTP协议和POP3协议

内容不断发展:IMAP协议和Mime协议

三、邮件发送流程
四、邮件的几种类型
  • 基础配置

  • 文本邮件

  • HTML邮件

  • 附件邮件

  • 图片邮件

  • 模板邮件

五、前置操作

申请邮件客户端授权码:以网易邮箱为例

我这个是已经开启过,如未开启点击开启,生成一串授权码,将授权码复制下来

六、代码实践
  1. 添加依赖,spring boot会自动引入版本
         <!--邮件发送 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <!--模板邮件发送 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
2、填写application.yml授权文件
#邮箱配置
spring:
  mail:
    #地址 我的是网易邮箱所以是@163.com
    host: smtp.163.com
    username: nuanxin0321@163.com
    #客户端授权码
    password: WPYAIRJDUYHBQHPZ
    default-encoding: utf-8
3、邮件发送代码
@Component
public class MailUtils {

    private final Logger logger = LoggerFactory.getLogger(MailUtils.class);

    @Value("${spring.mail.username}")
    private String fromUser;

    @Resource
    private JavaMailSender mailSender;

    /*
     * @Author @csn
     * @Description //发送文本邮件
     * @Date 15:58 2023/2/9
     * @param  sendUsr subject content
     * @return
     **/
    public void sendSimpleMail(String sendUsr, String subject, String content) {
        //参数说明 sendUsr接收用户 subject 发送主题 content 发送正文
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setTo(sendUsr);
        simpleMailMessage.setSubject(subject);
        simpleMailMessage.setText(content);
        simpleMailMessage.setFrom(fromUser);
        mailSender.send(simpleMailMessage);
    }

    /*
     * @Author @csn
     * @Description 发送Html邮件
     * @Date 16:40 2023/2/9
     * @param  * @param null
     * @return {@link null}
     **/
    public void sendHtmlMail(String sendUsr, String subject, String content){
        try {
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            helper.setTo(sendUsr);
            helper.setSubject(subject);
            helper.setText(content,true);
            helper.setFrom(fromUser);
            mailSender.send(mimeMessage);
        } catch (Exception e) {
            logger.error("邮件发送失败{}",e);
        }
    }

    /*
     * @Author @csn
     * @Description 发送附件邮件
     * @Date 16:40 2023/2/9
     * @param  * @param null
     * @return {@link null}
     **/
    public void sendAttachmentMail(String sendUsr, String subject, String content,String filePath){
        try {
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            helper.setTo(sendUsr);
            helper.setSubject(subject);
            helper.setText(content,true);
            helper.setFrom(fromUser);
            FileSystemResource file = new FileSystemResource(new File(filePath));
            String fileName = file.getFilename();
            helper.addAttachment(fileName,file);
            mailSender.send(mimeMessage);
        } catch (MessagingException e) {
            logger.error("邮件发送失败{}",e);
        }
    }

    /*
     * @Author @csn
     * @Description 发送图片邮件
     * @Date 16:40 2023/2/9
     * @param  * @param null
     * @return {@link null}
     **/
    public void sendPictureMail(String sendUsr, String subject, String content,String picPath,String picId){
        try {
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            helper.setTo(sendUsr);
            helper.setSubject(subject);
            helper.setText(content,true);
            helper.setFrom(fromUser);
            FileSystemResource file = new FileSystemResource(new File(picPath));
            String fileName = file.getFilename();
            helper.addInline(picId,file);
            mailSender.send(mimeMessage);
        } catch (MessagingException e) {
            logger.error("邮件发送失败{}",e);
        }
    }
}
4、邮件发送测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class MailTest {
    @Resource
    private MailUtils mailUtils;
    @Resource
    TemplateEngine templateEngine;
    
    @Test
    public void sayHelloTest()  {
        mailUtils.sendSimpleMail("nuanxan0321@163.com","测试文本邮件","测试文本邮件发送");
    }

    @Test
    public void sendHtmlTest() {
        String content = "<html>\n" +
                "<body>\n" +
                "<h3>hello,这是一封html邮件!</h3>\n" +
                "</body>\n" +
                "</html>";
        mailUtils.sendHtmlMail("nuanxin0321@163.com","测试html邮件",content);
    }

    @Test
    public void sendAttachmentsTest() {
        String fileName = "C:\\Users\\scn\\Documents\\csn\\装修\\新建文本文档.txt";
        mailUtils.sendAttachmentMail("nuanxin0321@163.com","测试附件邮件","这是附件文件",fileName);

    }

    @Test
    public void sendPictureTest(){
        String fileName = "C:\\Users\\scn\\Documents\\csn\\生活记录\\关大爷.png";
        String picId = "csn0001";
        String content = "<html><body> 这是有图片的邮件:<img src=\'cid:"+picId+
                "\'> </img></body></html>";
        mailUtils.sendPictureMail("969857738@qq.com","测试有图片的邮件",content,fileName,picId);

    }

    @Test
    public void sendTemplateMailTest()  {
        Context context = new Context();
        //以下参数为模板配置里的参数,可见步骤5
        context.setVariable("id","006");
        String emailTemplate = templateEngine.process("emailTemplate", context);
        mailUtils.sendHtmlMail("nuanxin0321@163.com","测试模板邮件",emailTemplate);

    }
}
5、模板邮件模板配置
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>邮件模板</title>
</head>
<body>
    您好,感谢您的注册,这是一封验证邮件,请点击下面的链接完成注册,感谢您的支持!
    <a href="#" th:href="@{https://i.csdn.net/#/user-center/profile?spm=${id}(id=${id})}">激活账号</a>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值