让代码成为你的邮差:邮件服务整合指南

技术派项目源码地址 :


邮箱服务整合

引入依赖
<!-- 邮件发送的核心依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- 适用于html模板形式的邮件发送,借助freemaker来实现html模板渲染 -->
<!-- 虽然技术派主要是基于thymeleaf进行模板渲染,为了给大家多加点知识点,这里改用freemaker进行邮箱的模板渲染 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
    <version>3.3.0</version>
</dependency>

开启邮箱服务
  • 这里使用的是网易邮箱, 其他的进行对应的配置

image.png

修改配置文件
#邮箱配置
spring:
  mail:
    host: smtp.163.com
    from: XXXXXXXXXXX@163.com
    # 使用自己的发送方用户名 + 授权码填充
    username: XXXXXXXXXXX@163.com
    password: JEHDIXXXXXXXXXXX
    default-encoding: UTF-8
    port: 465
    properties:
      mail:
        smtp:
          socketFactory:
            port: 465
            class: javax.net.ssl.SSLSocketFactory
            fallback: false
          auth: true
          starttls:
            enable: true
            required: true

邮件发送

简单文本邮件发送
/**
 * 简单文本邮件发送
 */
@PostMapping("/send")
public void basicSend() {
	SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
	//邮件发送人
	simpleMailMessage.setFrom(from);
	//邮件接收人,可以是多个,参数为可变参数
	simpleMailMessage.setTo("bangzewu@126.com");
	//邮件主题,也就是标题
	simpleMailMessage.setSubject("莜莜简单文本邮箱发送测试");
	//邮件内容
	simpleMailMessage.setText("简单的邮件正文");
	javaMailSender.send(simpleMailMessage);
}

  • 测试结果

image.png


JavaMailSender: 直接作为一个Spring 的bean对象使用
SimpleMailMessage:简单的邮件对象,里面有一些邮件发送时,关联的基础信息

  • from: 发送方
  • replyTo: 邮件回复的收件人
  • to: 收件人
  • cc: 抄送
  • bcc: 密送
  • subject: 主题,也就是邮件标题
  • text: 邮件正文,文本格式
  • date: 邮件发送时间

HTML发送

区别于上面的SimpleMailMessage, 这里使用的是MimeMessage,来实现html内容发送
使用姿势与上面相比差不多,无非就是正文变成了html文本罢了

/**
 * HTML邮件发送
 */
@PostMapping("/sendHtml")
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("莜莜HTML邮箱发送测试");
	//邮件内容
	mimeMessageHelper.setText("<h1>莜莜HTML邮箱发送测试</h1> <br/> " +
			"<div> 欢迎点击 <a href=\"https://blog.csdn.net/apple_74262176\">莜莜的博客</a><br/>" +
			" <img width=\"200px\" height=\"200px\" src=\"https://sky-ovo.oss-cn-beijing.aliyuncs.com/5acb9688-4f25-4f39-89fb-edfc7d1e81bc.jpeg\"/>" +
			"</div>", true);
	javaMailSender.send(mimeMailMessage);
}
  • 注意上面的setText方法的第二个参数,必须有,且为true,否则会当成文本内容发送

  • 测试结果

image.png


添加附件发送
/**
 * 发送附件
 */
@PostMapping("/sendFile")
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("莜莜附件邮箱发送测试");
	//邮件内容
	mimeMessageHelper.setText("<h1>莜莜HTML邮箱发送测试</h1> <br/> " +
			"<div> 欢迎点击 <a href=\"https://blog.csdn.net/apple_74262176\">莜莜的博客</a><br/>" +
			" <img width=\"200px\" height=\"200px\" src=\"https://sky-ovo.oss-cn-beijing.aliyuncs.com/5acb9688-4f25-4f39-89fb-edfc7d1e81bc.jpeg\"/>" +
			"</div>", true);
	String url = "https://sky-ovo.oss-cn-beijing.aliyuncs.com/5acb9688-4f25-4f39-89fb-edfc7d1e81bc.jpeg";
	URL imgUrl = new URL(url);
	mimeMessageHelper.addAttachment("img.jpg", imgUrl::openStream);
	javaMailSender.send(mimeMailMessage);
}

注意上面的实现,与前面差别不大,关键点在于attachment附件,上面的实现是在附件中添加一个图片,为了简单起见,图片是直接从网络下载的,然后将Stream作为传参

  • 测试结果

image.png

Freemaker模板发送
  • 上面的html发送,会发现需要我们自己来组装html正文,这个操作可能就不是很美好了,

  • 借助页面渲染引擎来实现邮件模板支持,可以说是一个比较常见的方案了,

  • 这里简单介绍下Freemaker的实现姿势,至于themlaf, beef或者jsp啥的,都没有太大的区别

  • **首先写一个邮件模板 ****resources/templates/mail.ftl**

  • **注意模板存放的位置, 尽量复制这个 ****templates**

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="SpringBoot Thymeleaf ovo!"/>
    <meta name="author" content="Yaeovo"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>SpringBoot Thymeleaf ovo!</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>
  • 代码测试 Freemarker 模板
  • 关键点就利用FreeMarkerTemplateUtils来实现模板的渲染,输出html正文
import freemarker.template.Configuration;

@Autowired
private Configuration configuration;

/**
 * Freemarker 模板
 */
@PostMapping("/sendTemplate")
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("莜莜Freemarker邮箱发送测试");
	Map<String, Object> map = new HashMap<>();
	map.put("title", "邮件标题 ovo!");
	map.put("content", "邮件正文 ovo!");
	String text = FreeMarkerTemplateUtils.processTemplateIntoString(configuration.getTemplate("mail.ftl"), map);
	mimeMessageHelper.setText(text, true);
	String url = "https://sky-ovo.oss-cn-beijing.aliyuncs.com/5acb9688-4f25-4f39-89fb-edfc7d1e81bc.jpeg";
	URL imgUrl = new URL(url);
	mimeMessageHelper.addAttachment("img.jpg", imgUrl::openStream);
	javaMailSender.send(mimeMailMessage);
}
  • 测试结果

image.png

小结

这篇教程主要介绍了如何整合邮箱服务,如何发送邮件,并针对简单的文本邮件,html正文,附件等不同的给出了实例;整体看下来使用姿势不难,不过邮件的几个术语可以了解一下

  • to: 接收人,就是邮件发送的目标群众
  • cc: 抄送,一般来讲抄送的名单,只是让他感知到有这封邮件,属于周知对象
  • bcc: 密送,与上面两个不一样,接收人和抄送人不知道密送给谁了,这就是最大的区别
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值