feat(email): 添加HTML格式邮件发送功能

- 在EmailService接口中新增sendHtmlMail方法定义
- 实现SMTP邮件服务中的HTML邮件发送逻辑
- 添加HTML邮件内容的MIME消息构建处理
- 集成UTF-8字符编码支持HTML邮件内容
- 添加HTML邮件发送异常日志记录机制
This commit is contained in:
Theo
2026-09-11 23:21:03 +08:00
parent 32f8b9c195
commit a42172ac52
2 changed files with 42 additions and 0 deletions

View File

@@ -19,6 +19,15 @@ public interface EmailService {
*/
void send(String to, String subject, String text);
/**
* 发送HTML格式的邮件。
*
* @param to 收件人邮箱
* @param subject 邮件主题
* @param html 邮件正文(HTML 格式)
*/
void sendHtmlMail(String to, String subject, String html);
/**
* 发送带附件的邮件。
*

View File

@@ -3,7 +3,9 @@ package com.youlai.boot.support.mail.service.impl;
import com.youlai.boot.support.mail.MailProperties;
import com.youlai.boot.support.mail.service.EmailService;
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeBodyPart;
import jakarta.mail.internet.MimeMessage;
import jakarta.mail.internet.MimeMultipart;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -14,6 +16,7 @@ import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import java.io.File;
import java.nio.charset.StandardCharsets;
/**
* SMTP 邮件服务。
@@ -50,6 +53,36 @@ public class SmtpEmailServiceImpl implements EmailService {
}
}
/**
* 发送HTML格式的邮件
*
* @param to 收件人地址
* @param subject 邮件主题
* @param html html格式的内容
* @return 是否发送成功
*/
@Override
public void sendHtmlMail(String to, String subject, String html) {
try {
MimeMessage message = mailSender.createMimeMessage();
// 设置发件人、收件人和主题
message.setFrom(mailProperties.getFrom());
message.setRecipients(jakarta.mail.Message.RecipientType.TO, to);
message.setSubject(subject, StandardCharsets.UTF_8.name());
// 创建 MimeMultipart 容器
MimeMultipart multipart = new MimeMultipart("related");
// 创建 HTML 内容部分
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(html, "text/html; charset=UTF-8");
multipart.addBodyPart(htmlPart);
// 设置消息内容
message.setContent(multipart);
mailSender.send(message);
} catch (Exception e) {
log.error("发送Html邮件失败{}", e.getMessage());
}
}
/**
* 发送带附件的 HTML 邮件。
*/