package com.doumee.service.common; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.FileSystemResource; 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.internet.MimeMessage; import java.io.File; import java.util.List; import java.util.Map; @Slf4j @Service public class EmailService { @Autowired private JavaMailSender javaMailSender; @Value("${spring.mail.username}") private String fromEmail; /** * 发送纯文本邮件 */ public boolean sendText(String toEmail, String subject, String text) { try { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(toEmail); message.setFrom(fromEmail); message.setSubject(subject); message.setText(text); javaMailSender.send(message); log.info("纯文本邮件发送成功: to={}", toEmail); return true; } catch (Exception e) { log.error("纯文本邮件发送失败: to={}, error={}", toEmail, e.getMessage()); return false; } } /** * 发送HTML邮件 */ public boolean sendHtml(String toEmail, String subject, String html) { try { MimeMessage message = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setTo(toEmail); helper.setFrom(fromEmail); helper.setSubject(subject); helper.setText(html, true); javaMailSender.send(message); log.info("HTML邮件发送成功: to={}", toEmail); return true; } catch (Exception e) { log.error("HTML邮件发送失败: to={}, error={}", toEmail, e.getMessage()); return false; } } /** * 发送带附件邮件 * @param fileList 附件列表,每个Map包含 name(文件名) 和 file(File对象) */ public boolean sendWithAttachment(String toEmail, String subject, String text, List> fileList) { try { MimeMessage message = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setTo(toEmail); helper.setFrom(fromEmail); helper.setSubject(subject); helper.setText(text); if (fileList != null) { for (Map f : fileList) { helper.addAttachment((String) f.get("name"), new FileSystemResource((File) f.get("file"))); } } javaMailSender.send(message); log.info("附件邮件发送成功: to={}", toEmail); return true; } catch (Exception e) { log.error("附件邮件发送失败: to={}, error={}", toEmail, e.getMessage()); return false; } } /** * 发送带内嵌图片的HTML邮件 * @param contentForm 表单内容键值对 * @param imgList 图片URL列表 */ public boolean sendWithInlineImage(String toEmail, String subject, Map contentForm, List imgList) { try { MimeMessage message = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setTo(toEmail); helper.setFrom(fromEmail); helper.setSubject(subject); StringBuilder content = new StringBuilder(""); if (contentForm != null) { for (Map.Entry entry : contentForm.entrySet()) { content.append("
").append(entry.getKey()).append(":").append(entry.getValue()).append("
"); } } if (imgList != null) { content.append("
"); for (String img : imgList) { content.append(""); } content.append("
"); } content.append(""); helper.setText(content.toString(), true); javaMailSender.send(message); log.info("图片邮件发送成功: to={}", toEmail); return true; } catch (Exception e) { log.error("图片邮件发送失败: to={}, error={}", toEmail, e.getMessage()); return false; } } }