58 lines
2.1 KiB
Java
58 lines
2.1 KiB
Java
package com.example.demo.common;
|
|
|
|
import jakarta.mail.internet.MimeMessage;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.mail.javamail.JavaMailSender;
|
|
import org.springframework.mail.javamail.MimeMessageHelper;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
@Service
|
|
public class EmailSenderService {
|
|
private final JavaMailSender mailSender;
|
|
private final EmailProperties props;
|
|
|
|
@Value("${spring.mail.username:}")
|
|
private String mailUsername;
|
|
|
|
public EmailSenderService(JavaMailSender mailSender, EmailProperties props) {
|
|
this.mailSender = mailSender;
|
|
this.props = props;
|
|
}
|
|
|
|
public void sendPlainText(String to, String subject, String content) {
|
|
if (to == null || to.isBlank()) throw new IllegalArgumentException("收件人邮箱不能为空");
|
|
if (subject == null) subject = "";
|
|
if (content == null) content = "";
|
|
try {
|
|
MimeMessage message = mailSender.createMimeMessage();
|
|
MimeMessageHelper helper = new MimeMessageHelper(message, false, "UTF-8");
|
|
helper.setFrom(resolveFromAddress());
|
|
helper.setTo(to.trim());
|
|
helper.setSubject(composeSubject(subject));
|
|
helper.setText(content, false);
|
|
mailSender.send(message);
|
|
} catch (IllegalStateException | IllegalArgumentException e) {
|
|
throw e;
|
|
} catch (Exception e) {
|
|
throw new RuntimeException("发送邮件失败: " + e.getMessage(), e);
|
|
}
|
|
}
|
|
|
|
private String composeSubject(String subject) {
|
|
String prefix = props.getSubjectPrefix();
|
|
if (prefix == null || prefix.isBlank()) return subject;
|
|
return prefix + " " + subject;
|
|
}
|
|
|
|
private String resolveFromAddress() {
|
|
String from = props.getFrom();
|
|
if (from == null || from.isBlank()) from = mailUsername;
|
|
if (from == null || from.isBlank()) {
|
|
throw new IllegalStateException("邮件服务未配置,请设置 MAIL_USERNAME/MAIL_PASSWORD 以及 MAIL_FROM 或 spring.mail.username");
|
|
}
|
|
return from.trim();
|
|
}
|
|
}
|
|
|
|
|