springboot自定义文本/附件/html模板邮件发送
Posted 好大的月亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot自定义文本/附件/html模板邮件发送相关的知识,希望对你有一定的参考价值。
概述
有时候会遇到需要后台服务发送邮件的需求。
一般客户端发送邮件需要三个要素:
- 发件人
- 邮件服务器(可以理解为邮局)
- 收件人
发件人发送邮件到邮局,然后邮局转发给收件人。
发送访问一般有三种,分别是:
- 文本邮件
- 含附件邮件
- 模板邮件
上代码Demo
maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
yaml配置
demo中我用的是腾讯企业邮箱
查询自己邮箱的邮件服务器,然后配置对应的端口,端口有加密和不加密的,配置加密端口时需要对应开启ssl加密配置
spring:
mail:
default-encoding: UTF-8
#需要找到自己邮箱的附件服务器,一般各大邮箱都有自己的邮件服务器
host: smtp.exmail.qq.com
#配置对应的端口
port: 465
#采用协议
protocol: smtp
#发件邮箱
username: xxx@xxx.com
#注意这里不是密码,是授权码
password: xxxx
properties:
mail:
smtp:
#连接邮件服务器超时时间,默认无限制
connectiontimeout: 5000
#读取邮件超时时间,默认无限制
timeout: 5000
#发送内容写入超时时间,默认无限制
writetimeout: 5000
ssl:
#开启加密传输
enable: true
发送文本/附件邮件
package com.fchan.business.utils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
@Component
public class SendMailUtil
@Resource
private JavaMailSender javaMailSender;
@Value("$spring.mail.username")
private String from;
/**
* 发送纯文本邮件.
*
* @param to 目标email 地址
* @param subject 邮件主题
* @param text 纯文本内容
*/
public void sendMail(String to, String subject, String text)
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
message.setText(text);
javaMailSender.send(message);
/**
* 发送邮件并携带附件.
* 请注意 from 、 to 邮件服务器是否限制邮件大小
*
* @param to 目标email 地址
* @param subject 邮件主题
* @param text 纯文本内容
* @param filePath 附件的路径 当然你可以改写传入文件
*/
public void sendMailWithAttachment(String to, String subject, String text, String filePath) throws MessagingException
File attachment = new File(filePath);
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper=new MimeMessageHelper(mimeMessage,true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(text);
helper.addAttachment(attachment.getName(),attachment);
javaMailSender.send(mimeMessage);
发送模板动态邮件
我这里使用了html模板
引入thymeleaf maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
/**
* 发送html模板邮件.
*
* @param to 目标email 地址
* @param subject 邮件主题
*/
public void sendRichMail(String to, String subject) throws MessagingException
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
//发件人
helper.setFrom(from);
//收件人,支持多个
helper.setTo(to);
//主题
helper.setSubject(subject);
org.thymeleaf.context.Context context = new Context();
//给html中变量设置value,这里填充变量使用 thymeleaf 语法
context.setVariable("imgUrl", "https://img1.imgtp.com/2023/02/15/litS8lUF.jpg");
//填充变量后获取html文本
//模板路径 resource/templates/modeMail.html
String content = templateEngine.process("modeMail", context);
helper.setText(content, true);
javaMailSender.send(mimeMessage);
html模板
<!DOCTYPE html>
<html lang="en">
<head>
<!-- 如果使用占位符则必须指定 <meta http-equiv="content-type" content="text/html" charset="UTF-8"> 否则图片无法显示-->
<meta http-equiv="content-type" content="text/html" charset="UTF-8">
<title></title>
</head>
<body>
<h2>Hello World</h2>
<div>
<p>
动态图片
<!-- 使用thymeleaf占位符语法-->
<img th:src="$imgUrl" alt="">
</p>
</div>
</body>
</html>
以上是关于springboot自定义文本/附件/html模板邮件发送的主要内容,如果未能解决你的问题,请参考以下文章