Files
dating/src/main/java/com/bao/dating/util/EmailUtil.java
2025-12-24 23:13:50 +08:00

179 lines
6.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.bao.dating.util;
import lombok.extern.slf4j.Slf4j;
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.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
/**
* 邮箱工具类
* 提供邮件发送功能支持普通文本邮件和HTML邮件
* @author KilLze
*/
@Slf4j
@Component
public class EmailUtil {
/**
* 邮件发送器由Spring自动注入
*/
private final JavaMailSender mailSender;
/**
* 发件人邮箱地址(从配置中读取)
*/
private final String from;
/**
* 构造函数用于注入JavaMailSender和配置
* @param mailSender 邮件发送器
* @param from 发件人邮箱地址
*/
public EmailUtil(JavaMailSender mailSender, @Value("${spring.mail.username}") String from) {
this.mailSender = mailSender;
this.from = from;
}
/**
* 发送简单文本邮件
* @param to 收件人邮箱地址
* @param subject 邮件主题
* @param text 邮件内容
* @return 是否发送成功
*/
public boolean sendSimpleMail(String to, String subject, String text) {
try {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
message.setText(text);
mailSender.send(message);
log.info("简单邮件发送成功,收件人:{},主题:{}", to, subject);
return true;
} catch (Exception e) {
log.error("简单邮件发送失败,收件人:{},异常信息:{}", to, e.getMessage(), e);
return false;
}
}
/**
* 发送HTML格式邮件
* @param to 收件人邮箱地址
* @param subject 邮件主题
* @param htmlContent HTML内容
* @return 是否发送成功
*/
public boolean sendHtmlMail(String to, String subject, String htmlContent) {
try {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(htmlContent, true);
mailSender.send(message);
log.info("HTML邮件发送成功收件人{},主题:{}", to, subject);
return true;
} catch (MessagingException e) {
log.error("HTML邮件发送失败收件人{},异常信息:{}", to, e.getMessage(), e);
return false;
}
}
/**
* 发送带附件的邮件
* @param to 收件人邮箱地址
* @param subject 邮件主题
* @param text 邮件内容
* @param attachmentPath 附件文件路径
* @param attachmentName 附件显示名称
* @return 是否发送成功
*/
public boolean sendMailWithAttachment(String to, String subject, String text,
String attachmentPath, String attachmentName) {
try {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(text);
File file = new File(attachmentPath);
if (file.exists()) {
helper.addAttachment(attachmentName, file);
} else {
log.warn("附件文件不存在:{}", attachmentPath);
return false;
}
mailSender.send(message);
log.info("带附件邮件发送成功,收件人:{},主题:{},附件:{}", to, subject, attachmentName);
return true;
} catch (MessagingException e) {
log.error("带附件邮件发送失败,收件人:{},异常信息:{}", to, e.getMessage(), e);
return false;
}
}
/**
* 发送验证码邮件
* @param to 收件人邮箱地址
* @param code 验证码
* @return 是否发送成功
*/
public boolean sendVerificationCode(String to, String code) {
String subject = "验证码";
String htmlContent = String.format(
"<html><body>" +
"<h2>您的验证码</h2>" +
"<p>验证码:<strong style='color: #1890ff; font-size: 24px;'>%s</strong></p>" +
"<p>验证码有效期为10分钟请勿泄露给他人。</p>" +
"</body></html>", code);
return sendHtmlMail(to, subject, htmlContent);
}
/**
* 发送验证码邮件(自定义主题)
* @param to 收件人邮箱地址
* @param code 验证码
* @param subject 邮件主题
* @return 是否发送成功
*/
public boolean sendVerificationCode(String to, String code, String subject) {
String htmlContent = String.format(
"<html><body>" +
"<h2>您的验证码</h2>" +
"<p>验证码:<strong style='color: #1890ff; font-size: 24px;'>%s</strong></p>" +
"<p>验证码有效期为10分钟请勿泄露给他人。</p>" +
"</body></html>", code);
return sendHtmlMail(to, subject, htmlContent);
}
/**
* 批量发送邮件
* @param toList 收件人邮箱地址数组
* @param subject 邮件主题
* @param text 邮件内容
* @return 成功发送的数量
*/
public int sendBatchMail(String[] toList, String subject, String text) {
int successCount = 0;
for (String to : toList) {
if (sendSimpleMail(to, subject, text)) {
successCount++;
}
}
log.info("批量邮件发送完成,总数:{},成功:{}", toList.length, successCount);
return successCount;
}
}