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

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

效果:
springboot使用163发送自定义html格式的邮件_第1张图片

下面直接开始教学

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

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

然后添加到application.yml中:
springboot使用163发送自定义html格式的邮件_第2张图片
添加到application.yml

#邮箱基本配置
  mail:
    protocol: smtp
    #配置smtp服务主机地址
    host: smtp.163.com
    #发送者邮箱
    username: [email protected]
    #配置密码,注意不是真正的密码,而是刚刚申请到的授权码
    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.bootgroupId>
            <artifactId>spring-boot-starter-mailartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-thymeleafartifactId>
        dependency>

Controller:

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

        // 构建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>

然后调用测试接口就会收到邮件,撒花!!
springboot使用163发送自定义html格式的邮件_第3张图片

你可能感兴趣的:(spring,boot,html,java)