当前位置: 首页 > news >正文

springboot使用163发送自定义html格式的邮件

springboot使用163发送html格式的邮件

效果:
在这里插入图片描述

下面直接开始教学

注册邮箱,生成授权码
获取163邮箱的授权码,可以按照以下步骤操作:

  1. 登录163邮箱
    打开浏览器,访问 163邮箱登录页面。
    使用你的邮箱账号和密码登录。
  2. 进入邮箱设置
    登录后,点击页面右上角的“设置”图标(通常是一个齿轮图标)。
    在菜单中选择“POP3/SMTP/IMAP”选项。
  3. 开启SMTP服务
    在“POP3/SMTP/IMAP”设置页面中,找到“SMTP服务”选项。
    点击“开启”按钮,启用SMTP服务。
  4. 获取授权码
    开启SMTP服务后,系统会提示你设置授权码。
    按照页面提示,使用绑定的手机号发送短信验证。
    验证成功后,系统会生成一个授权码(通常是一串字母和数字的组合)。
  5. 保存授权码
    将生成的授权码记录下来,并妥善保存。
    在配置文件中,将password字段的值替换为这个授权码。

然后添加到application.yml中:
在这里插入图片描述
添加到application.yml

#邮箱基本配置
  mail:
    protocol: smtp
    #配置smtp服务主机地址
    host: smtp.163.com
    #发送者邮箱
    username: killer5482021@163.com
    #配置密码,注意不是真正的密码,而是刚刚申请到的授权码
    password: ZFBFPLNWJIUKJUWS
    #端口号465或587
    port: 465
    #默认的邮件编码为UTF-8
    default-encoding: UTF-8
    #其他参数
    properties:
      mail:
        smtp:
          auth: true
          ssl:
            #本地测试,先放开ssl
            enable: true
            required: true
            #开启debug模式,这样邮件发送过程的日志会在控制台打印出来,方便排查错误
        debug: true

pom.xml中添加用到的依赖

		<!-- 邮件 -->
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <!-- Java模板引擎 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

Controller:

@ApiOperation(value = "测试邮件发送")
    @GetMapping("/test-mail")
    public boolean mail(){
        MailRequest request = new MailRequest();
        request.setSubject("【信飞科技】,你好!测试邮件。");
        request.setSendFrom("xxxxxxxx82021@163.com");
        request.setSendTo("858399075@qq.com");

        // 构建HTML内容,包含超链接
        String link = "http://***.***.1.52/mrrraadmin";
        String htmlContent = mailService.buildHtmlContent(link);
        request.setText(htmlContent);
        return mailService.sendHtmlMail(request);
    }

MaiService:

package com.geofly.mrrra.lottery.service;

import com.geofly.mrrra.lottery.entity.MailRequest;

/**
 * @Description: 邮件发送接口
 *
 * @Author yanghaoxing
 * @Date 2025/3/19 16:44
 */

public interface MailService {

    /**
     * @Description: 发送html邮件
     *
     * @Param:  [mailRequest]
     * @Return: boolean
     * @Author yanghaoxing
     * @Date 2025/3/19 18:29
     */
    boolean sendHtmlMail(MailRequest mailRequest);

    /**
     * @Description: 获取邮件模板
     *
     * @Param:  [link]
     * @Return: java.lang.String
     * @Author yanghaoxing
     * @Date 2025/3/19 18:40
     */
    String buildHtmlContent(String link);
}

MailServiceImpl:

package com.geofly.mrrra.lottery.service.impl;

import cn.hutool.core.lang.Assert;
import com.geofly.mrrra.lottery.entity.MailRequest;
import com.geofly.mrrra.lottery.service.MailService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

/**
 * 邮件接口实现类
 *
 * @Auther: yanghaoxing
 * @Date: 2025/3/19
 */
@Service("mailServiceImpl")
public class MailServiceImpl implements MailService {
    private static final Logger log = LoggerFactory.getLogger(MailServiceImpl.class);

    @Autowired
    private JavaMailSender javaMailSender;

    @Autowired
    private TemplateEngine templateEngine;

    public void checkMail(MailRequest mailRequest) {
        Assert.notNull(mailRequest,"邮件请求不能为空");
        Assert.notNull(mailRequest.getSendTo(), "邮件收件人不能为空");
        Assert.notNull(mailRequest.getSubject(), "邮件主题不能为空");
        Assert.notNull(mailRequest.getText(), "邮件收件人不能为空");
    }

    @Override
    public boolean sendHtmlMail(MailRequest mailRequest) {
        checkMail(mailRequest); // 检查邮件参数是否合法
        MimeMessage message = javaMailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
            helper.setTo(mailRequest.getSendTo());
            helper.setFrom(mailRequest.getSendFrom());
            helper.setSubject(mailRequest.getSubject());

            // 设置邮件内容为HTML格式
            helper.setText(mailRequest.getText(), true); // 第二个参数为true,表示内容为HTML

            javaMailSender.send(message);
            return true;
        } catch (MessagingException e) {
            log.error("邮件发送失败", e);
            e.printStackTrace();
        }
        return false;
    }

    @Override
    public String buildHtmlContent(String link) {
        Context context = new Context();
        context.setVariable("link", link);
        return templateEngine.process("email-template", context); // email-template是模板文件名
    }
}

创建Thymeleaf模板
在src/main/resources/templates目录下创建一个Thymeleaf模板文件,例如email-template.html:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>【信飞科技】重要通知!</title>
</head>
<body>
    <h1>这是一封测试邮件</h1>
    <p>点击以下链接访问示例网站:</p>
    <a th:href="${link}">点击进行确认</a>
</body>
</html>

然后调用测试接口就会收到邮件,撒花!!
在这里插入图片描述

相关文章:

  • 为什么TCP需要三次握手?一次不行吗?
  • 【Servlet 容器和 Spring 容器的关系】
  • 人工智能之数学基础:线性方程组
  • mysql-innodb存储引擎主键索引叶子结点数据结构(非单纯的双向链表)
  • PyCharm安装redis,python安装redis,PyCharm使用失败问题
  • WPF 布局舍入(WPF 边框模糊 或 像素错位 的问题)
  • Datawhale coze-ai-assistant 笔记4
  • 16 预编译指令
  • 再学:ERC20-Permit2、SafeERC20方法 详解ERC721,如何铸造一个NFT以及IPFS的作用
  • 进程控制~
  • 【宇宙回响】从Canvas到MySQL:飞机大战的全栈交响曲【附演示视频与源码】
  • 普通鼠标的500连击的工具来了!!!
  • 【MySQL】MySQL登录,访问,退出操作
  • 微软Data Formulator:用AI重塑数据可视化的未来
  • 突破时空边界:Java实时流处理中窗口操作与时间语义的深度重构
  • 图解AUTOSAR_CP_DIODriver
  • 从头开始学C语言第二十八天——字符指针和字符串
  • 工具层handle_replace
  • Sensodrive机器人力控关节模组SensoJoint在海洋垃圾清理机器人中的拓展应用
  • vector容器以及deque
  • 北京公园使用指南
  • 南阳市委原书记朱是西被“双开”:搞劳民伤财的“政绩工程”
  • 大漠孤烟为何“直”?物理学家在唐诗中读出“不一样的美”
  • 永辉超市一季度净利降近八成,未来12个月至18个月是改革成果集中释放期
  • 经济日报金观平:充分发挥增量政策的经济牵引力
  • 政治局会议:优化存量商品房收购政策,持续巩固房地产市场稳定态势