Spring boot 发送文本邮件 和 html模板邮件

Spring boot 发送文本邮件 和 html模板邮件

提示:这里使用 spring-boot-starter-mail 发送文本邮件 和 html模板邮件


文章目录


提示:以下是本篇文章正文内容,下面案例可供参考

一、开启QQ邮箱里的POP3/SMTP服务

①:开启步骤

1.邮箱设置 -->账号

2.开启服务(并复制 授权码

二、简单配置

①:引入依赖

xml 复制代码
  <!--        邮件发送-->
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-mail</artifactId>
  </dependency>

②:yml配置

yaml 复制代码
  mail:
    username: xxxx@foxmail.com
    # QQ邮箱应该使用授权码
    password: *****ek***
    ## 邮箱服务器地址 smtp.qq.com
    host: smtp.qq.com
    #使用SMTPS协议465端口
    port: 465
    # ssl 配置
    properties:
      mail.smtp.starttls.required: true
      encoding: UTF-8
      mail.smtp.ssl.enable: true
      mail.smtp.auth: true
      mail.smtp.socketFactory.port: 465
      mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory
      mail.smtp.socketFactory.fallback: false

三、发送纯文本文件

①:写个工具类

java 复制代码
@Component
@Slf4j
public class UtilsSendCode {
    @Value("${spring.mail.username}")
    private String sender;

    @Resource
    private JavaMailSenderImpl mailSender;

    /**
     * 发送纯文字邮件
     * @param to 收件人
     * @param subject 主题
     * @param content 内容
     */
    public void sendSimpleMail(String to, String subject, String content) {
        //创建SimpleMailMessage对象
        SimpleMailMessage message = new SimpleMailMessage();
        //邮件发送人
        message.setFrom(sender);
        //邮件接收人
        message.setTo(to);
        //邮件主题
        message.setSubject(subject);
        //邮件内容
        message.setText(content);
        //发送邮件
        try {
            mailSender.send(message);
            log.info("邮件接收人"+to+"主题"+subject+"内容"+content+"邮件发送成功");
        }catch (Exception e){
            log.error("邮件接收人"+to+"主题"+subject+"内容"+content+"邮件发送出现异常");
            log.error("异常信息为"+e.getMessage());
        }
    }
}

②:在业务层调用方法发送即可

java 复制代码
  // 开始发送邮件
  utilsSendCode.sendSimpleMail("xxxxxx@gmail.com", "验证码", "123456");

③:发送成功

1.发送测试

2.收到验证码

四、发送Html模板邮件

①:定义一个Html模板

1.template/mailTemplate.ftl

html 复制代码
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="description" content="email code">
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<!--邮箱验证码模板-->
<body>
<div style="background-color:#ECECEC; padding: 35px;">
    <table cellpadding="0" align="center"
           style="width: 800px;height: 100%; margin: 0px auto; text-align: left; position: relative; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; font-size: 14px; font-family:微软雅黑, 黑体; line-height: 1.5; box-shadow: rgb(153, 153, 153) 0px 0px 5px; border-collapse: collapse; background-position: initial initial; background-repeat: initial initial;background:#fff;">
        <tbody>
        <tr>
            <th valign="middle"
                style="height: 25px; line-height: 25px; padding: 15px 35px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: RGB(148,0,211); background-color: RGB(148,0,211); border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px;">
                <font face="微软雅黑" size="5" style="color: rgb(255, 255, 255); ">这里输入name</font>
            </th>
        </tr>
        <tr>
            <td style="word-break:break-all">
                <div style="padding:25px 35px 40px; background-color:#fff;opacity:0.8;">

                    <h2 style="margin: 5px 0px; ">
                        <font color="#333333" style="line-height: 20px; ">
                            <font style="line-height: 22px; " size="4">
                                尊敬的用户:</font>
                        </font>
                    </h2>
                    <!-- 中文 -->
                    <p>您好!感谢您使用****,您的账号正在进行邮箱验证,验证码为:<font color="#ff8c00">{0}</font>,有效期30分钟,请尽快填写验证码完成验证!</p><br>
                    <!-- 英文 -->
                    <h2 style="margin: 5px 0px; ">
                        <font color="#333333" style="line-height: 20px; ">
                            <font style="line-height: 22px; " size="4">
                                Dear user:</font>
                        </font>
                    </h2>
                    <p>Hello! Thanks for using *****, your account is being authenticated by email, the
                        verification code is:<font color="#ff8c00">{0}</font>, valid for 30 minutes. Please fill in the verification code as soon as
                        possible!</p>
                    <div style="width:100%;margin:0 auto;">
                        <div style="padding:10px 10px 0;border-top:1px solid #ccc;color:#747474;margin-bottom:20px;line-height:1.3em;font-size:12px;">
                            <p>****团队</p>
                            <p>联系我们:********</p>
                            <br>
                            <p>此为系统邮件,请勿回复<br>
                                Please do not reply to this system email
                            </p>
                            <!--<p>©***</p>-->
                        </div>
                    </div>
                </div>
            </td>
        </tr>
        </tbody>
    </table>
</div>
</body>
</html>

②:在工具类中新增两个方法

  • 根据模板生成邮件内容
java 复制代码
    /**
     * 根据模板生成邮件内容
     * @param code 验证码
     * @return
     */
    public String buildContent(String code) {
        //加载邮件html模板
        ClassPathResource resource = new ClassPathResource("template/mailTemplate.ftl");
        InputStream inputStream = null;
        BufferedReader fileReader = null;
        StringBuffer buffer = new StringBuffer();
        String line = "";
        try {
            inputStream = resource.getInputStream();
            fileReader = new BufferedReader(new InputStreamReader(inputStream));
            while ((line = fileReader.readLine()) != null) {
                buffer.append(line);
            }
        } catch (Exception e) {
            log.error("发送邮件读取模板失败{}", e.toString());
        } finally {
            if (fileReader != null) {
                try {
                    fileReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        //替换html模板中的参数
        return MessageFormat.format(buffer.toString(), code);
    }
  • 发送HTML邮件
java 复制代码
    /**
     * 发送HTML邮件
     * @param to 收件人
     * @param subject 主题
     * @param code 内容(验证码)
     */
    public void sendEmailByHtml(String to, String subject, String code) {
        //获取MimeMessage对象
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper messageHelper;
        try {
            messageHelper = new MimeMessageHelper(message, true);
            //邮件发送人
            messageHelper.setFrom(sender);
            //邮件接收人
            messageHelper.setTo(to);
            //邮件主题
            message.setSubject(subject);
            //邮件内容,html格式
            messageHelper.setText(buildContent(code), true);
            //发送
            mailSender.send(message);
            //日志信息
            log.info("邮件已经发送。");
        } catch (MessagingException e) {
            log.error("发送邮件时发生异常!", e);
        }
    }

③:发送成功

1.业务层调用方法直接发送即可

java 复制代码
 // 开始发送邮件
 utilsSendCode.sendEmailByHtml("xxxx9@gmail.com", "验证码", "559955");

2.测试请求

3.发送成功

相关推荐
一只特立独行的猪6112 小时前
Java面试——集合篇
java·开发语言·面试
讓丄帝愛伱3 小时前
spring boot启动报错:so that it conforms to the canonical names requirements
java·spring boot·后端
weixin_586062023 小时前
Spring Boot 入门指南
java·spring boot·后端
雷袭月启3 小时前
SpringBoot实现OAuth客户端
spring boot·oauth客户端
Dola_Pan6 小时前
Linux文件IO(二)-文件操作使用详解
java·linux·服务器
wang_book6 小时前
Gitlab学习(007 gitlab项目操作)
java·运维·git·学习·spring·gitlab
蜗牛^^O^7 小时前
Docker和K8S
java·docker·kubernetes
从心归零7 小时前
sshj使用代理连接服务器
java·服务器·sshj
IT毕设梦工厂8 小时前
计算机毕业设计选题推荐-在线拍卖系统-Java/Python项目实战
java·spring boot·python·django·毕业设计·源码·课程设计
Ylucius9 小时前
动态语言? 静态语言? ------区别何在?java,js,c,c++,python分给是静态or动态语言?
java·c语言·javascript·c++·python·学习