SpringBoot发送邮件

2023-02-19 13:51:08 浏览数 (1)

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3 天,点击查看活动详情

在实际工作中已经遇到数次需要发邮件的场景了,因此把这个操作分享给大家

1发送的邮箱设置

需要开启POP3/SMTP服务,并获取一个验证码,具体教程参见baidu

引入组件,设置邮箱信息

pom引入

代码语言:txt复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.11</version>
</dependency>

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.31</version>
</dependency>
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.3</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

需要特别多注意的是,文章正文内容使用html文本编写,因此如果需要动态替换文本内容,就需要引入模板引起来进行操作,因此我引入的是freemarker来进行模板替换

application.properties中设置对应的发送邮箱的信息

代码语言:txt复制
spring.mail.host=smtp.qq.com
spring.mail.username=xxxx@qq.com
spring.mail.password=xxxx

实际操作代码

代码语言:txt复制
public void  sendEmail(){
    // 获取MimeMessage对象
    MimeMessage message = mailSender.createMimeMessage();
    MimeMessageHelper messageHelper;
    try {
        messageHelper = new MimeMessageHelper(message, true, "utf-8");
        // 发件人
        messageHelper.setFrom("xxxxx@qq.com");
        // 收件人
        messageHelper.setTo("xxxx@qq.com");
        // 邮件主题
        message.setSubject("测试邮件发送功能");
        // 邮件内容
        messageHelper.setText(getNoticeHtmlByTemplate(1,"test.vtl"), true);
        
        messageHelper.addAttachment(MimeUtility.encodeWord("drools.pdf","utf-8","B"),new File("/Users/zhaozhen/Desktop/office/规则引擎drools讲义.pdf"));
        // 发件
        mailSender.send(message);
        // 更新发件状态

        log.info("发送理赔通知邮件任务已结束");
    } catch (Exception e) {
        e.printStackTrace();
    }
}


private String getNoticeHtmlByTemplate(int applyCnt,String temp) {

    // 创建数据模型
    Map<String, Object> map = new HashMap(16);
    map.put("name", "赵镇");
    // 写数据
    TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("templates/", TemplateConfig.ResourceMode.CLASSPATH));
    Template template = engine.getTemplate(temp);
    return template.render(map);
}

对应的在resources下templates邮件正文内容test.vtl下的邮件正文内容为

代码语言:txt复制
<html>
  <head></head>
  <br>
  <div>尊敬的${name},你好</div>
  <br>
  <body>
      <div>以下是内容部分</div>
  </body>
  <br>
</html>

另外就是附件的功能,主要由如下代码完成,及读取文件,设置发送附件时的文件名称

代码语言:txt复制
        messageHelper.addAttachment(MimeUtility.encodeWord("drools.pdf","utf-8","B"),new File("/Users/zhaozhen/Desktop/office/规则引擎drools讲义.pdf"));

实际效果

image.pngimage.png

是不是很酷,简单几步操作就可以实现邮件发送的全套功能。

0 人点赞