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( "
" + "验证码:%s
" + "验证码有效期为10分钟,请勿泄露给他人。
" + "", 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( "" + "验证码:%s
" + "验证码有效期为10分钟,请勿泄露给他人。
" + "", 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; } }