@Component
public static class MailSenderAgent {
private static final Logger logger = LoggerFactory.getLogger(MailSenderAgent.class);
@Inject
private JavaMailSender mailSender;
@Value("${spring.mail.username}")
private String sender;
public void sendSimpleMail(String receiver, String subject, String content) {
checkReceiver(receiver);
checkSubject(subject);
checkContent(content);
XxlJobLogger.log("send mail, receiver->{}, subject->{}, content-> {}", receiver, subject, content);
SimpleMailMessage simple = buildSimpleMailMessage(receiver, subject, content);
mailSender.send(simple);
}
public void sendMimeMail(String receiver, String subject, String content, File file) {
checkReceiver(receiver);
checkSubject(subject);
checkContent(content);
XxlJobLogger.log("send mail, receiver->{}, subject->{}, content-> {}", receiver, subject, content);
try {
MimeMessage simple = buildMimeMessage(receiver, subject, content, file);
mailSender.send(simple);
} catch (Exception e) {
XxlJobLogger.log("send fail", e);
}
}
private SimpleMailMessage buildSimpleMailMessage(String receiver, String subject, String content) {
SimpleMailMessage simple = new SimpleMailMessage();
simple.setFrom(getSender());
simple.setTo(receiver.split(","));
simple.setSubject(subject);
simple.setText(content);
return simple;
}
public MimeMessage buildMimeMessage(String receiver, String subject, String content, File file) throws Exception {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(getSender());
helper.setTo(receiver.split(","));
helper.setSubject(subject);
helper.setText(content);
if (null != file) {
FileSystemResource attachment = new FileSystemResource(file);
helper.addAttachment(attachment.getFilename(), file);
}
return mimeMessage;
}
public void sendMail(Workbook workbook, String sender, String receiver, String cc, String subject, String content, String fileName) throws IOException {
String newFileName = MimeUtility.encodeText(fileName);
//临时缓冲区
ByteArrayOutputStream os = new ByteArrayOutputStream();
InputStreamSource iss = null;
workbook.write(os);
// workbook.close();
iss = new ByteArrayResource(os.toByteArray());
os.close();
sendFileMail(receiver, cc, subject, content, iss, newFileName, sender);
}
public void sendFileMail(String receiver, String cc, String subject, String content, InputStreamSource file, String fileName, String sender) {
checkReceiver(receiver);
checkSubject(subject);
checkContent(content);
XxlJobLogger.log("send mail start, receiver->{}, subject->{}, content-> {}", receiver, subject, content);
try {
MimeMessage simple = buildSendFileMail(sender, cc, subject, content, file, fileName, receiver);
mailSender.send(simple);
XxlJobLogger.log("send mail end, receiver->{}, subject->{}, content-> {}", receiver, subject, content);
} catch (Exception e) {
XxlJobLogger.log("send fail:{}", com.borui.health.insurance.utils.StringUtils.stackTraceToString(e));
}
}
public MimeMessage buildSendFileMail(String sender, String cc, String subject, String content, InputStreamSource file, String fileName, String receiver) throws Exception {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(sender);
helper.setTo(receiver.split(","));
helper.setSubject(subject);
helper.setText(content);
if (!StringUtils.isEmpty(cc)) {
helper.setCc(cc);
}
if (null != file) {
helper.addAttachment(fileName, file);
}
return message;
}
private void checkContent(String content) {
if (StringUtils.isEmpty(content)) {
throw new RuntimeException("content is empty");
}
}
private void checkSubject(String subject) {
if (StringUtils.isEmpty(subject)) {
throw new RuntimeException("subject is empty");
}
}
private void checkReceiver(String receiver) {
if (StringUtils.isEmpty(receiver)) {
throw new RuntimeException("receiver is empty");
}
}
public String getSender() {
return sender;
}
发送邮件用户配置
#邮件配置
spring.mail.host=
spring.mail.port=
spring.mail.username=
spring.mail.password=
spring.mail.sender=
spring.mail.receiver=多个接收者以,隔开
示例:
//邮件发送者
@Value("${spring.mail.username}")
private String MAIL_SENDER;
//邮件接收者
@Value("${spring.mail.receiver}")
private String receiver;
public static void main(String[] args) {
String fileName = "fileName"+ ".xlsx";;
String subject = "邮件标题";
String content = "邮件内容";
Workbook workBook = null;
try {
String filePath = "Excel文件路径";
FileInputStream instream = new FileInputStream(new File(filePath));
//读取工作簿
workBook = new XSSFWorkbook(instream);
mailSenderAgent.sendMail(workBook, MAIL_SENDER, receiver, null, subject, content, fileName);
} catch (Exception e) {
XxlJobLogger.log("rcb sendMail error:{}", StringUtils.stackTraceToString(e));
}
}