package com.hongqiang.shop.website.service; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeUtility; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.task.TaskExecutor; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; import org.springframework.ui.freemarker.FreeMarkerTemplateUtils; import org.springframework.util.Assert; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; import com.hongqiang.shop.common.utils.Setting; import com.hongqiang.shop.common.utils.SettingUtils; import com.hongqiang.shop.common.utils.SpringContextHolder; import com.hongqiang.shop.modules.entity.ProductNotify; import com.hongqiang.shop.modules.entity.SafeKey; import com.hongqiang.shop.modules.util.service.TemplateService; import freemarker.template.Configuration; import freemarker.template.TemplateException; @Service("mailServiceImpl") public class MailServiceImpl implements MailService { class SendAsynchronous implements Runnable { private JavaMailSenderImpl javaMailSender; private MimeMessage mimeMessage; public SendAsynchronous(JavaMailSenderImpl javaMailSender, MimeMessage mimeMessage){ this.javaMailSender = javaMailSender; this.mimeMessage = mimeMessage; } public void run() { this.javaMailSender.send(this.mimeMessage); } } @Autowired private FreeMarkerConfigurer freeMarkerConfigurer; @Autowired private JavaMailSenderImpl javaMailSender; @Autowired private TaskExecutor taskExecutor; @Autowired private TemplateService templateService; private void sendAsync(MimeMessage paramMimeMessage) { try { this.taskExecutor.execute(new SendAsynchronous(this.javaMailSender, paramMimeMessage)); } catch (Exception localException) { localException.printStackTrace(); } } public void send(String smtpFromMail, String smtpHost, Integer smtpPort, String smtpUsername, String smtpPassword, String toMail, String subject, String templatePath, Map<String, Object> model, boolean async) { Assert.hasText(smtpFromMail); Assert.hasText(smtpHost); Assert.notNull(smtpPort); Assert.hasText(smtpUsername); Assert.hasText(smtpPassword); Assert.hasText(toMail); Assert.hasText(subject); Assert.hasText(templatePath); try { Setting localSetting = SettingUtils.get(); Configuration localConfiguration = this.freeMarkerConfigurer .getConfiguration(); freemarker.template.Template localTemplate = localConfiguration .getTemplate(templatePath); String str = FreeMarkerTemplateUtils.processTemplateIntoString( localTemplate, model); this.javaMailSender.setHost(smtpHost); this.javaMailSender.setPort(smtpPort.intValue()); this.javaMailSender.setUsername(smtpUsername); this.javaMailSender.setPassword(smtpPassword); MimeMessage localMimeMessage = this.javaMailSender .createMimeMessage(); MimeMessageHelper localMimeMessageHelper = new MimeMessageHelper( localMimeMessage, false, "utf-8"); localMimeMessageHelper.setFrom(MimeUtility.encodeWord(localSetting .getSiteName()) + " <" + smtpFromMail + ">"); localMimeMessageHelper.setSubject(subject); localMimeMessageHelper.setTo(toMail); localMimeMessageHelper.setText(str, true); if (async) sendAsync(localMimeMessage); else this.javaMailSender.send(localMimeMessage); } catch (TemplateException localTemplateException1) { localTemplateException1.printStackTrace(); } catch (IOException localIOException1) { localIOException1.printStackTrace(); } catch (MessagingException localMessagingException1) { localMessagingException1.printStackTrace(); } } public void send(String toMail, String subject, String templatePath, Map<String, Object> model, boolean async) { Setting localSetting = SettingUtils.get(); send(localSetting.getSmtpFromMail(), localSetting.getSmtpHost(), localSetting.getSmtpPort(), localSetting.getSmtpUsername(), localSetting.getSmtpPassword(), toMail, subject, templatePath, model, async); } public void send(String toMail, String subject, String templatePath, Map<String, Object> model) { Setting localSetting = SettingUtils.get(); send(localSetting.getSmtpFromMail(), localSetting.getSmtpHost(), localSetting.getSmtpPort(), localSetting.getSmtpUsername(), localSetting.getSmtpPassword(), toMail, subject, templatePath, model, true); } public void send(String toMail, String subject, String templatePath) { Setting localSetting = SettingUtils.get(); send(localSetting.getSmtpFromMail(), localSetting.getSmtpHost(), localSetting.getSmtpPort(), localSetting.getSmtpUsername(), localSetting.getSmtpPassword(), toMail, subject, templatePath, null, true); } public void sendTestMail(String smtpFromMail, String smtpHost, Integer smtpPort, String smtpUsername, String smtpPassword, String toMail) { Setting localSetting = SettingUtils.get(); String str = SpringContextHolder.getMessage( "admin.setting.testMailSubject", new Object[] { localSetting.getSiteName() }); com.hongqiang.shop.modules.utils.Template localTemplate = this.templateService .get("testMail"); send(smtpFromMail, smtpHost, smtpPort, smtpUsername, smtpPassword, toMail, str, localTemplate.getTemplatePath(), null, false); } public void sendFindPasswordMail(String toMail, String username, SafeKey safeKey) { Setting localSetting = SettingUtils.get(); HashMap<String, Object> localHashMap = new HashMap<String, Object>(); localHashMap.put("username", username); localHashMap.put("safeKey", safeKey); String str = SpringContextHolder.getMessage( "shop.password.mailSubject", new Object[] { localSetting.getSiteName() }); com.hongqiang.shop.modules.utils.Template localTemplate = this.templateService .get("findPasswordMail"); send(toMail, str, localTemplate.getTemplatePath(), localHashMap); } public void sendProductNotifyMail(ProductNotify productNotify) { Setting localSetting = SettingUtils.get(); HashMap<String, Object> localHashMap = new HashMap<String, Object>(); localHashMap.put("productNotify", productNotify); String str = SpringContextHolder.getMessage( "admin.productNotify.mailSubject", new Object[] { localSetting.getSiteName() }); com.hongqiang.shop.modules.utils.Template localTemplate = this.templateService .get("productNotifyMail"); send(productNotify.getEmail(), str, localTemplate.getTemplatePath(), localHashMap); } }