mail:
username: [email protected]
password:
host: smtp.qq.com
port: 25
# 这个配置解决 阿里云等邮件无法发送问题
properties:
mail:
smtp:
ssl:
enable: true
/**
* 邮件接口
*
* @author 贺峥
*/
public interface IMailBizService {
void sendMail(String subject, String body, String from, String[] to) throws Exception;
void sendMail(String subject, String body, String from, String[] cc, String[] to) throws Exception;
void sendMail(String subject, String body, boolean html, String from, String[] cc, String[] to) throws Exception;
void sendMail(String subject, String body, boolean html, String from, String[] cc, String[] to, List<String> attachPathList, Boolean isUrl) throws Exception;
void sendMail(String subject, String body, boolean html, String from, String[] cc, String[] to, List<File> file) throws Exception;
}
package com.gponline.service.mail;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Multipart;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;
import java.util.List;
/**
* 邮件实现
*
* @author 贺峥
*/
@Slf4j
@ConditionalOnProperty(value = "spring.mail.host")
@Service("iMailBizService")
public class MailBizService implements IMailBizService {
@Autowired
private JavaMailSender javaMailSender;
public MailBizService() {
}
/**
* 发送邮件
*
* @param subject 主题
* @param body 内容
* @param from 发件人
* @param to 收件人[多个]
*/
public void sendMail(String subject, String body, String from, String[] to) throws Exception {
sendMail(subject, body, from, null, to);
}
/**
* 发送邮件
*
* @param subject 主题
* @param body 内容
* @param from 发件人
* @param cc 抄送人[多个]
* @param to 收件人[多个]
*/
public void sendMail(String subject, String body, String from, String[] cc, String[] to) throws Exception {
sendMail(subject, body, false, from, cc, to);
}
/**
* 发送邮件
*
* @param subject 主题
* @param body 内容
* @param html 是否为html格式
* @param from 发件人
* @param cc 抄送人[多个]
* @param to 收件人[多个]
*/
public void sendMail(String subject, String body, boolean html, String from, String[] cc, String[] to) throws Exception {
sendMail(subject, body, html, from, cc, to, null, false);
}
/**
* 发送邮件
*
* @param subject 主题
* @param body 内容
* @param html 是否为html格式
* @param from 发件人
* @param cc 抄送人[多个]
* @param to 收件人[多个]
* @param attachPathList 附件路径
*/
public void sendMail(String subject, String body, boolean html, String from, String[] cc, String[] to, List<String> attachPathList,Boolean isUrl) throws Exception {
try {
MimeMessage parentMimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(parentMimeMessage, true, "utf-8");
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setFrom(new InternetAddress(from));
mimeMessageHelper.setSentDate(new Date());
// 设置收件人地址
mimeMessageHelper.setTo(to);
// 设置抄送人
if (!StringUtils.isEmpty(cc)) {
mimeMessageHelper.setCc(cc);
}
// 设置正文
mimeMessageHelper.setText(body, html);
// 设置附件
if (!CollectionUtils.isEmpty(attachPathList)) {
Multipart multipart = new MimeMultipart();
for (String attachPath : attachPathList) {
MimeBodyPart mimeBodyPart = new MimeBodyPart();
DataHandler dataHandler = new DataHandler(new FileDataSource(attachPath));
mimeBodyPart.setDataHandler(dataHandler);
mimeBodyPart.setFileName(dataHandler.getName());
multipart.addBodyPart(mimeBodyPart);
}
parentMimeMessage.setContent(multipart);
}
// 正式发送邮件
javaMailSender.send(parentMimeMessage);
} catch (Exception e) {
log.error("发送邮件失败:{}", e);
throw e;
}
}
public void sendMail(String subject, String body, boolean html, String from, String[] cc, String[] to, List<File> files) throws Exception {
try {
MimeMessage parentMimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(parentMimeMessage, true, "utf-8");
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setFrom(new InternetAddress(from));
mimeMessageHelper.setSentDate(new Date());
// 设置收件人地址
mimeMessageHelper.setTo(to);
// 设置抄送人
if (!StringUtils.isEmpty(cc)) {
mimeMessageHelper.setCc(cc);
}
// 设置正文
mimeMessageHelper.setText(body, html);
// 设置附件
if (!CollectionUtils.isEmpty(files)) {
Multipart multipart = new MimeMultipart();
for (File file : files) {
MimeBodyPart mimeBodyPart = new MimeBodyPart();
DataHandler dataHandler = new DataHandler(new FileDataSource(file));
mimeBodyPart.setDataHandler(dataHandler);
mimeBodyPart.setFileName(dataHandler.getName());
multipart.addBodyPart(mimeBodyPart);
}
parentMimeMessage.setContent(multipart);
}
// 正式发送邮件
javaMailSender.send(parentMimeMessage);
} catch (Exception e) {
log.error("发送邮件失败:{}", e);
throw e;
}
}
}