springboot自定义文本/附件/html模板邮件发送

Posted 好大的月亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot自定义文本/附件/html模板邮件发送相关的知识,希望对你有一定的参考价值。

概述

有时候会遇到需要后台服务发送邮件的需求。
一般客户端发送邮件需要三个要素:

  1. 发件人
  2. 邮件服务器(可以理解为邮局)
  3. 收件人

发件人发送邮件到邮局,然后邮局转发给收件人。
发送访问一般有三种,分别是:

  • 文本邮件
  • 含附件邮件
  • 模板邮件

上代码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模板邮件发送的主要内容,如果未能解决你的问题,请参考以下文章

VUE使用富文本自定义打印模板

重学Springboot系列之邮件发送的整合与使用

4SpringBoot------邮件发送

SpringBoot实战一:发送邮件

自定义输入附件视图通知

SpringBoot中Thymeleaf自定义配置项