| /** | 
|  * Copyright (c) 2018 人人开源 All rights reserved. | 
|  * | 
|  * https://www.renren.io | 
|  * | 
|  * 版权所有,侵权必究! | 
|  */ | 
|   | 
| package com.zt.modules.message.channel.email; | 
|   | 
| import java.io.StringReader; | 
| import java.io.StringWriter; | 
| import java.util.Map; | 
| import java.util.Properties; | 
|   | 
| import javax.mail.internet.MimeMessage; | 
|   | 
| import org.apache.commons.io.IOUtils; | 
| import org.slf4j.Logger; | 
| import org.slf4j.LoggerFactory; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.mail.javamail.JavaMailSenderImpl; | 
| import org.springframework.mail.javamail.MimeMessageHelper; | 
| import org.springframework.stereotype.Component; | 
|   | 
| import cn.hutool.core.map.MapUtil; | 
|   | 
| import com.zt.common.constant.ExecuteStatus; | 
| import com.zt.common.exception.ErrorCode; | 
| import com.zt.common.exception.RenException; | 
| import com.zt.core.sys.service.ISysParamsService; | 
| import com.zt.modules.message.model.SysMailTemplate; | 
| import com.zt.modules.message.service.SysMailLogService; | 
| import com.zt.modules.message.service.SysMailTemplateService; | 
|   | 
| import freemarker.template.Template; | 
|   | 
| /** | 
|  * 邮件工具类 | 
|  * | 
|  * @author Mark sunlightcs@gmail.com | 
|  */ | 
| @Component | 
| public class EmailUtils { | 
|   | 
|     private Logger logger = LoggerFactory.getLogger(getClass()); | 
|     @Autowired | 
|     private ISysParamsService sysParamsService; | 
|     @Autowired | 
|     private SysMailTemplateService sysMailTemplateService; | 
|     @Autowired | 
|     private SysMailLogService sysMailLogService; | 
|   | 
|     public final static String MAIL_CONFIG_KEY = "MAIL_CONFIG_KEY";// 邮件配置KEY | 
|   | 
|     private JavaMailSenderImpl createMailSender(EmailConfig config) { | 
|         JavaMailSenderImpl sender = new JavaMailSenderImpl(); | 
|         sender.setHost(config.getSmtp()); | 
|         sender.setPort(config.getPort()); | 
|         sender.setUsername(config.getUsername()); | 
|         sender.setPassword(config.getPassword()); | 
|         sender.setDefaultEncoding("Utf-8"); | 
|         Properties p = new Properties(); | 
|         p.setProperty("mail.smtp.timeout", "10000"); | 
|         p.setProperty("mail.smtp.auth", "false"); | 
|         sender.setJavaMailProperties(p); | 
|         return sender; | 
|     } | 
|   | 
|     /** | 
|      * 发送邮件 | 
|      * | 
|      * @param templateId | 
|      *            模板ID | 
|      * @param to | 
|      *            收件人 | 
|      * @param cc | 
|      *            抄送 | 
|      * @param params | 
|      *            模板参数 | 
|      * @return true:成功 false:失败 | 
|      */ | 
|     public boolean sendMail(Long templateId, String[] to, String[] cc, Map<String, Object> params) throws Exception { | 
|         SysMailTemplate template = sysMailTemplateService.get(templateId); | 
|         if (template == null) { | 
|             throw new RenException(ErrorCode.MAIL_TEMPLATE_NOT_EXISTS.getCode()); | 
|         } | 
|   | 
|         EmailConfig config = sysParamsService.getValueObject(MAIL_CONFIG_KEY, EmailConfig.class); | 
|         JavaMailSenderImpl mailSender = createMailSender(config); | 
|         MimeMessage mimeMessage = mailSender.createMimeMessage(); | 
|   | 
|         // 设置utf-8编码 | 
|         MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8"); | 
|         messageHelper.setFrom(config.getUsername()); | 
|   | 
|         // 收件人 | 
|         messageHelper.setTo(to); | 
|         // 抄送 | 
|         if (cc != null && cc.length > 0) { | 
|             messageHelper.setCc(cc); | 
|         } | 
|         // 主题 | 
|         messageHelper.setSubject(template.getSubject()); | 
|   | 
|         // 邮件正文 | 
|         String content = getFreemarkerContent(template.getContent(), params); | 
|         messageHelper.setText(content, true); | 
|   | 
|         int status = ExecuteStatus.SUCCESS.getValue(); | 
|         // 发送邮件 | 
|         try { | 
|             mailSender.send(mimeMessage); | 
|         } catch (Exception e) { | 
|             status = ExecuteStatus.FAIL.getValue(); | 
|             logger.error("send error", e); | 
|         } | 
|   | 
|         sysMailLogService.insert(templateId, config.getUsername(), to, cc, template.getSubject(), content, status); | 
|   | 
|         return status == ExecuteStatus.SUCCESS.getValue() ? true : false; | 
|     } | 
|   | 
|     /** | 
|      * 获取Freemarker渲染后的内容 | 
|      * | 
|      * @param content | 
|      *            模板内容 | 
|      * @param params | 
|      *            参数 | 
|      */ | 
|     private String getFreemarkerContent(String content, Map<String, Object> params) throws Exception { | 
|         if (MapUtil.isEmpty(params)) { | 
|             return content; | 
|         } | 
|   | 
|         // 模板 | 
|         StringReader reader = new StringReader(content); | 
|         Template template = new Template("mail", reader, null, "utf-8"); | 
|   | 
|         // 渲染模板 | 
|         StringWriter sw = new StringWriter(); | 
|         template.process(params, sw); | 
|   | 
|         content = sw.toString(); | 
|         IOUtils.closeQuietly(sw); | 
|   | 
|         return content; | 
|     } | 
|   | 
|     /** | 
|      * 发送邮件 | 
|      * | 
|      * @param to | 
|      *            收件人 | 
|      * @param cc | 
|      *            抄送 | 
|      * @param subject | 
|      *            主题 | 
|      * @param content | 
|      *            邮件正文 | 
|      * @return true:成功 false:失败 | 
|      */ | 
|     public boolean sendMail(String[] to, String[] cc, String subject, String content) throws Exception { | 
|         EmailConfig config = sysParamsService.getValueObject(MAIL_CONFIG_KEY, EmailConfig.class); | 
|         JavaMailSenderImpl mailSender = createMailSender(config); | 
|         MimeMessage mimeMessage = mailSender.createMimeMessage(); | 
|         // 设置utf-8编码 | 
|         MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8"); | 
|         messageHelper.setFrom(config.getUsername()); | 
|   | 
|         // 收件人 | 
|         messageHelper.setTo(to); | 
|         // 抄送 | 
|         if (cc != null && cc.length > 0) { | 
|             messageHelper.setCc(cc); | 
|         } | 
|         // 主题 | 
|         messageHelper.setSubject(subject); | 
|         // 邮件正文 | 
|         messageHelper.setText(content, true); | 
|   | 
|         int status = ExecuteStatus.SUCCESS.getValue(); | 
|         // 发送邮件 | 
|         try { | 
|             mailSender.send(mimeMessage); | 
|         } catch (Exception e) { | 
|             status = ExecuteStatus.FAIL.getValue(); | 
|             logger.error("send error", e); | 
|         } | 
|   | 
|         sysMailLogService.insert(null, config.getUsername(), to, cc, subject, content, status); | 
|   | 
|         return status == ExecuteStatus.SUCCESS.getValue() ? true : false; | 
|     } | 
|   | 
| } |