记录 java 发送邮箱
controller
/**
* 邮件发送
*
* @param sendTo 接受人
* @param ccTo 抄送人
* @param bccTo 秘密抄送人
* @param contentStr contentMap,json化
* @param templeteType 模板类型
* @param attachemetList 附件
* @return
*/
@RequestMapping("send")
@ApiOperation(value = "发送邮件", notes = "", httpMethod = "POST", response = WebResult.class)
public WebResult sendEmail(@RequestParam(value = "fromNickName", defaultValue = "") String fromNickName,
String[] sendTo,
String[] ccTo,
String[] bccTo,
String contentStr,
Integer templeteType,
@RequestParam(value = "attachemetList",required = false) List<MultipartFile> attachemetList) throws Exception {
//处理模板数据字段
Gson gson = new Gson();
Map<String, String> contentMap = gson.fromJson(contentStr, new TypeToken<Map<String, String>>() {
}.getType());
boolean status = emailService.sendEmail(fromNickName, sendTo, ccTo, bccTo, contentMap, templeteType, attachemetList);
return status ? WebResult.success("邮件发送成功") : WebResult.failure("邮件发送失败");
}
/**
* 邮件发送
*
* @param sendTo 接受人
* @param ccTo 抄送人
* @param bccTo 秘密抄送人
* @param contentMap 填充模板数据map
* @param templeteType 模板类型
* @param files 附件
* @return
*/
public boolean sendEmailCommon(String fromNickName, String[] sendTo, String[] ccTo, String[] bccTo, Map<String, String> contentMap, Integer templeteType, List<MultipartFile> files) {
if (StringUtils.isEmpty(fromNickName)) {
fromNickName = sendFromNickName;
}
Gson gson = new Gson();
if (contentMap == null || templeteType == null) {
logger.warn("邮件发送失败:参数错误");
return false;
}
EmailTemplete emailTemplete = emailTempleteDao.findByTempleteType(templeteType);
if (emailTemplete == null) {
logger.warn("邮件发送失败:参数错误," + gson.toJson(contentMap));
return false;
}
//邮件模板内容
String content = emailTemplete.getTempleteContent();
//邮件主题
String subject = emailTemplete.getTitle();
//邮件内容变量赋值
String contentHtml = tranferContent(contentMap, content);
try {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
boolean continueProcess = handleInfo(helper, sendFrom, sendTo, ccTo, bccTo, subject, contentHtml, true, fromNickName);
//处理基本信息出现错误
if (!continueProcess) {
logger.warn(String.format("邮件基本信息出错,标题:%s", subject));
return false;
}
handleAttachment(helper, subject, files);
mailSender.send(mimeMessage);
logger.info(String.format("邮件发送成功!发件人:%s 收件人:%s 标题:%s", sendFrom, Arrays.toString(sendTo), subject));
} catch (Exception e) {
logger.warn(String.format("邮件发送失败!发件人:%s 标题:%s", sendFrom, subject));
logger.warn("邮件内容字段:" + gson.toJson(content));
logger.warn("",e);
return false;
}
return true;
}
/**
* 处理邮件正文内容信息
*
* @param contentMap
* @param content
*/
private String tranferContent(Map<String, String> contentMap, String content) {
String contentHtml = content;
for (Map.Entry<String, String> map : contentMap.entrySet()) {
String contentKey = map.getKey();
String contentVal = map.getValue();
//对邮件内容变量进行赋值
String regex = "\\$\\{" + contentKey + "\\}";
contentHtml = contentHtml.replaceAll(regex, contentVal);
}
return contentHtml;
}
/**
* 邮件基本信息处理
*
* @param helper 邮件包装类
* @param sendFrom 发送人
* @param sendPeoples 收件人
* @param ccPeoples 抄送人
* @param bccPeoples 秘密抄送人
* @param subject 主题
* @param content 邮件内容
* @param isHtml 是否是HTML文件,用于区分带附件的简单文本邮件和真正的HTML文件
* @return 是否异常
*/
private boolean handleInfo(MimeMessageHelper helper, String sendFrom, String[] sendPeoples, String[] ccPeoples,
String[] bccPeoples, String subject, String content, boolean isHtml, String fromNickName) {
try {
helper.setFrom(fromNickName + "<" + sendFrom + ">");
helper.setTo(sendPeoples);
helper.setSubject(subject);
helper.setText(content, isHtml);
if (ccPeoples != null && ccPeoples.length > 0) {
helper.setCc(ccPeoples);
}
if (bccPeoples != null && bccPeoples.length > 0) {
helper.setBcc(bccPeoples);
}
return true;
} catch (MessagingException e) {
e.printStackTrace();
logger.warn("邮件基本信息出错:" + subject,e);
}
return false;
}
/**
* 邮件添加附件
*
* @param helper 邮件包装类
* @param subject 主题
* @param multipartFiles 附件列表
*/
private void handleAttachment(MimeMessageHelper helper, String subject, List<MultipartFile> multipartFiles) throws IOException {
if (multipartFiles !=null && multipartFiles.size() > 0){
for (MultipartFile multipartFile : multipartFiles) {
try {
//添加附件
String filename = multipartFile.getOriginalFilename();
if (!StrUtil.isEmpty(filename)){
helper.addAttachment(MimeUtility.encodeWord(filename), new ByteArrayResource(IOUtils.toByteArray(multipartFile.getInputStream())));
}
} catch (MessagingException e) {
logger.warn(String.format("邮件添加附件异常!邮件主题:%s 附件名称:%s", subject, multipartFile.getName()), e);
}
}
}
}