<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
单个发送者
spring:
mail:
host: smtp.feishu.cn
username: username
password: password
port: 587
default-encodeing: UTF-8
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
@Service
public class EmailService{
@Autowired
private JavaMailSender mailSender;
@Autowired
private MailProperties mailProperties;
public void sendHtmlMail(String to, String subject, String content, String replyTo, String... cc) {
try{
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(mailProperties.getUsername());
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);
if (replyTo != null && !replyTo.trim().isEmpty()) {
helper.setReplyTo(replyTo);
}
if (!ObjectUtils.isEmpty(cc)) {
helper.setCc(cc);
}
mailSender.send(message);
log.info("send email successfully , to:{}",to);
}catch(Exception e){
log.error("send email error,reason:",e);
}
}
}
多个邮件发送者
spring:
mail:
df:
host: smtp.feishu.cn
username:
password:
port: 587
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
default-encoding: utf-8
buschange:
host: smtp.aliyun.com
username:
password:
port: 25
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
default-encoding: utf-8
@Configuration
public class MailConfigure {
@Bean
@ConfigurationProperties(prefix = "spring.mail.df")
public MailProperties defaultMailProperties() {
return new MailProperties();
}
@Bean
@ConfigurationProperties(prefix = "spring.mail.buschange")
public MailProperties busChangeMailProperties() {
return new MailProperties();
}
@Bean
@Primary
public JavaMailSenderImpl defaultSender(MailProperties defaultMailProperties) {
return createJavaMailSender(defaultMailProperties);
}
@Bean(name = "busChangeSender")
public JavaMailSenderImpl busChangeSender(MailProperties busChangeMailProperties) {
return createJavaMailSender(busChangeMailProperties);
}
private JavaMailSenderImpl createJavaMailSender(MailProperties properties) {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost(properties.getHost());
mailSender.setPort(properties.getPort());
mailSender.setUsername(properties.getUsername());
mailSender.setPassword(properties.getPassword());
mailSender.setDefaultEncoding(properties.getDefaultEncoding().name());
Properties props = mailSender.getJavaMailProperties();
props.putAll(properties.getProperties());
return mailSender;
}
}
@Component
@Slf4j
public class EmailService {
@Autowired
private JavaMailSenderImpl defaultSender;
@Autowired
@Qualifier("busChangeSender")
private JavaMailSenderImpl busChangeSender;
public void sendHtmlEmail(SendEmailVO emailVO, String... cc) {
String to = emailVO.getTo();
JavaMailSenderImpl emailSender = defaultSender;
try {
if ("bus".equalsIgnoreCase(emailVO.getSender())) {
emailSender = busChangeSender;
}
MimeMessage message = emailSender.createMimeMessage();
buildHelper(emailSender.getUsername(),emailVO, message, cc);
emailSender.send(message);
log.info("send email successfully , to:{}",to);
} catch (Exception e) {
log.error("send email error to:{}, reason:",to,e);
}
}
private void buildHelper(String from, SendEmailVO emailVO, MimeMessage message, String... cc) throws MessagingException {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(emailVO.getTo());
helper.setSubject(emailVO.getSubject());
if (StrUtil.isNotBlank(emailVO.getReplyTo())) {
helper.setReplyTo(emailVO.getReplyTo());
}
helper.setText(emailVO.getContent(), true);
if (!ObjectUtils.isEmpty(cc)) {
helper.setCc(cc);
}
Map<String, String> attachments = emailVO.getAttachments();
if (attachments != null && !attachments.isEmpty()) {
for (Map.Entry<String, String> entry : attachments.entrySet()) {
String fileName = entry.getKey();
String filePath = entry.getValue();
helper.addAttachment(fileName, new File(filePath));
}
}
}
}
@Data
@Builder
public class SendEmailVO {
private String to;
private String subject;
private String content;
private String replyTo;
private String sender;
private Map<String, String> attachments;
private String from;
}