关于spring:SpringBoot-系列之邮件发送姿势介绍

8次阅读

共计 5652 个字符,预计需要花费 15 分钟才能阅读完成。

SpringBoot 系列之邮件发送姿态介绍

邮件发送,在理论的我的项目开发中,可能用的不是特地多,如果没有特定的需要,置信也没有多少小伙伴会特意的去关注,那么如果当初咱们心愿针对我的项目做一个异样的报警零碎,当出现异常的时候,能够向指定的小伙伴发送邮件揭示,那么让咱们来实现这个性能,能够怎么办呢?

这里介绍一下如何应用 SpringBoot 封装好的 MailSender 来实现邮件发送

<!– more –>

I. 我的项目环境

1. 我的项目依赖

本我的项目借助 SpringBoot 2.2.1.RELEASE + maven 3.5.3 + IDEA 进行开发

开一个 web 服务用于测试

<dependencies>
    <!-- 邮件发送的外围依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    <!-- 实用于 html 模板模式的邮件发送,借助 freemarker 来实现 html 模板渲染 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>
</dependencies>

2. 配置

在开始之前,咱们须要先筹备一个用于发送邮件的账号,比方我这里应用 163 的邮箱来发送邮件,须要先到邮箱提供商哪里获取受权码,具体如何获取这个货色,不同的邮箱姿态有些不同,各位小伙伴依据本人的理论状况,搜寻一下,置信很快就能 get 到

这里简略介绍下网易邮箱的获取形式

接下来设置发送邮件相干的配置信息,配置文件application.yml

spring:
  #邮箱配置
  mail:
    host: smtp.163.com
    from: xhhuiblog@163.com
    # 应用本人的发送方用户名 + 受权码填充
    username:
    password:
    default-encoding: UTF-8
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true

II. 邮件发送

接下来进入正题,咱们将从简略根底的文本邮件发送开始,逐步介绍如何增加附件,应用丑陋的 html 模板等

1. 简略文本邮件发送

咱们这里间接应用 JavaMailSender 来发送一个根底的文本邮件

@Service
public class MailDemo {
    @Autowired
    private JavaMailSender javaMailSender;

    @Value("${spring.mail.from:xhhuiblog@163.com}")
    private String from;

    private void basicSend() {SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        // 邮件发送人
        simpleMailMessage.setFrom(from);
        // 邮件接管人,能够是多个,参数为可变参数
        simpleMailMessage.setTo("bangzewu@126.com");
        // 邮件主题,也就是题目
        simpleMailMessage.setSubject("SpringBoot 测试邮件发送");
        // 邮件内容
        simpleMailMessage.setText("简略的邮件注释");

        javaMailSender.send(simpleMailMessage);
    }
}
  • JavaMailSender: 间接作为一个 Spring 的 bean 对象应用
  • SimpleMailMessage:简略的邮件对象,外面有一些邮件发送时,关联的根底信息

    • from: 发送方
    • replyTo: 邮件回复的收件人
    • to: 收件人
    • cc: 抄送
    • bcc: 密送
    • subject: 主题,也就是邮件题目
    • text: 邮件注释,文本格式
    • date: 邮件发送工夫

2. html 发送

对于简略的文本邮件发送,用下面的根本就够了,如果咱们心愿邮件的内容更好看一点的话,能够借助 HTML 来实现排版

区别于下面的 SimpleMailMessage, 这里应用的是 MimeMessage,来实现 html 内容发送

应用姿态与下面相比差不多,无非就是注释变成了 html 文本罢了

/**
 * 发送 html
 */
public void sendHtml() throws MessagingException {MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();
    MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);
    mimeMessageHelper.setFrom(from);
    mimeMessageHelper.setTo("bangzewu@126.com");
    mimeMessageHelper.setSubject("SpringBoot 测试邮件发送");

    // 邮件内容
    mimeMessageHelper.setText("<h1>Hello World</h1> <br/>" +
            "<div> 欢送点击 <a href=\"https://blog.hhui.top\"> 一灰灰博文地址 </a><br/>" +
            "<img width=\"200px\"height=\"200px\"src=\"https://blog.hhui.top/hexblog/imgs/info/wx.jpg\"/>" +
            "</div>", true);

    javaMailSender.send(mimeMailMessage);
}

重点留神

  • 留神下面的 setText 办法的第二个参数,必须有,且为 true,否则会当成文本内容发送

3. 增加附件

邮件中增加附件,咱们本人写邮件的时候能够间接抉择附件上传,那么代码的实现形式又有什么区别呢?

/**
 * 发送附件
 */
public void sendWithFile() throws MessagingException, IOException {MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();
    MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);
    mimeMessageHelper.setFrom(from);
    mimeMessageHelper.setTo("bangzewu@126.com");
    mimeMessageHelper.setSubject("SpringBoot 测试邮件发送");

    mimeMessageHelper.setText("<h1>Hello World</h1> <br/>" +
            "<div> 欢送点击 <a href=\"https://blog.hhui.top\"> 一灰灰博文地址 </a><br/>" +
            "<img width=\"200px\"height=\"200px\"src=\"https://blog.hhui.top/hexblog/imgs/info/wx.jpg\"/>" +
            "</div>");

    String url = "https://blog.hhui.top/hexblog/imgs/info/wx.jpg";
    URL imgUrl = new URL(url);
    mimeMessageHelper.addAttachment("img.jpg", imgUrl::openStream);

    javaMailSender.send(mimeMailMessage);
}

留神下面的实现,与后面差异不大,关键点在于 attachment 附件,下面的实现是在附件中增加一个图片,为了简略起见,图片是间接从网络下载的,而后将 Stream 作为传参

4. Freemaker 模板

下面的 html 发送,会发现须要咱们本人来组装 html 注释,这个操作可能就不是很美妙了,借助页面渲染引擎来实现邮件模板反对,能够说是一个比拟常见的计划了,这里简略介绍下 Freemaker 的实现姿态,至于 themlaf, beef 或者 jsp 啥的,都没有太大的区别

首先写一个邮件模板 resources/template/mail.ftl

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="SpringBoot thymeleaf"/>
    <meta name="author" content="YiHui"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title> 邮件模板 </title>
</head>
<style>
    .title {
        color: #c00;
        font-weight: normal;
        font-size: 2em;
    }

    .content {
        color: darkblue;
        font-size: 1.2em;
    }

    .sign {
        color: lightgray;
        font-size: 0.8em;
        font-style: italic;
    }
</style>
<body>

<div>
    <div class="title">${title}</div>
    <div class="content">${content}</div>
</div>
</body>
</html>

下面的模板中,定义了两个变量,一个title,一个content,这个就是咱们须要替换的值

接下来是邮件发送实例

import freemarker.template.Configuration;

@Autowired
private Configuration configuration;

/**
 * freemarker 模板
 */
public void freeMakerTemplate() throws MessagingException, IOException, TemplateException {MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();
    MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);
    mimeMessageHelper.setFrom(from);
    mimeMessageHelper.setTo("bangzewu@126.com");
    mimeMessageHelper.setSubject("SpringBoot 测试邮件发送");

    Map<String, Object> map = new HashMap<>();
    map.put("title", "邮件题目");
    map.put("content", "邮件注释");
    String text = FreeMarkerTemplateUtils.processTemplateIntoString(configuration.getTemplate("mail.ftl"), map);
    mimeMessageHelper.setText(text, true);

    String url = "https://blog.hhui.top/hexblog/imgs/info/wx.jpg";
    URL imgUrl = new URL(url);
    mimeMessageHelper.addAttachment("img.jpg", imgUrl::openStream);

    javaMailSender.send(mimeMailMessage);
}

留神下面的实现,关键点就利用 FreeMarkerTemplateUtils 来实现模板的渲染,输入 html 注释,因而如果想应用其余的模板渲染引擎,就是改这里即可

5. 测试与小结

最初简略的调用一下下面的实现,看下邮件是否能够发送胜利

本篇博文介绍了一下如何发送邮件,并针对简略的文本邮件,html 注释,附件等不同的给出了实例;整体看下来应用姿态不难,不过邮件的几个术语能够理解一下

  • to: 接管人,就是邮件发送的指标大众
  • cc: 抄送,一般来讲抄送的名单,只是让他感知到有这封邮件,属于周知对象
  • bcc: 密送,与下面两个不一样,接管人和抄送人不晓得密送给谁了,这就是最大的区别,说实话这个玩意我从没用过

接下来一篇博文,将介绍一下如何将 log 日志与邮件发送关联起来,当出现异常的时候,邮件发送给开发者

III. 不能错过的源码和相干知识点

0. 我的项目

  • 工程:https://github.com/liuyueyi/spring-boot-demo
  • 源码:https://github.com/liuyueyi/spring-boot-demo/tree/master/spring-boot/

1. 一灰灰 Blog

尽信书则不如,以上内容,纯属一家之言,因集体能力无限,不免有疏漏和谬误之处,如发现 bug 或者有更好的倡议,欢送批评指正,不吝感谢

上面一灰灰的集体博客,记录所有学习和工作中的博文,欢送大家前去逛逛

  • 一灰灰 Blog 集体博客 https://blog.hhui.top
  • 一灰灰 Blog-Spring 专题博客 http://spring.hhui.top

正文完
 0