1.核心代码
我们使用spring的mail,最主要是调用JavaMailSender mailSender和Template template;对象,创建message对象和cc、to、from等
MimeMailService类
private JavaMailSender mailSender; private Template template; /** * Spring的MailSender. */ public void setMailSender(JavaMailSender mailSender) { this.mailSender = mailSender; } /** * 注入Freemarker引擎配置,构造Freemarker 邮件内容模板. */ public void setFreemarkerConfiguration(Configuration freemarkerConfiguration) throws IOException { // 根据freemarkerConfiguration的templateLoaderPath载入文件. template = freemarkerConfiguration.getTemplate("mailTemplate.ftl", DEFAULT_ENCODING); } /** * 发送MIME格式的用户修改通知邮件. * @param title 邮件名 * @param fileList 附件地址 * @return true/发送成功 false/发送失败 */ public Boolean sendNotificationMail(String title, List<String> fileList) { try { // 创建message对象 MimeMessage msg = mailSender.createMimeMessage(); // 生成spring的helper类,赋值收件人、发件人、抄送、主题等 MimeMessageHelper helper = new MimeMessageHelper(msg, true, DEFAULT_ENCODING); // 收件人 helper.setTo(C.MAIL_TO); // helper.setCc("[email protected]"); // 发件人 helper.setFrom(C.MAIL_FROM); // 主题 helper.setSubject(title + "日接客送客生成通知"); // 使用Freemarker生成html格式内容,即mailTemplate.ftl的内容 String content = generateContent(title); helper.setText(content, true); // 附件对象,添加进邮件helper内 for (String fileUrl : fileList) { logger.info("接客送客生成:" + fileUrl); File file = new File(fileUrl); String fileNm = file.getName(); helper.addAttachment(fileNm, file); } mailSender.send(msg); logger.info("HTML版邮件已发送至" + C.MAIL_TO); return true; } catch (MessagingException e) { logger.error("构造邮件失败", e); return false; } catch (Exception e) { logger.error("发送邮件失败", e); return false; } } /** * 使用Freemarker生成html格式内容. */ @SuppressWarnings("unchecked") private String generateContent(String userName) throws MessagingException { try { Map context = Collections.singletonMap("userName", userName); return FreeMarkerTemplateUtils.processTemplateIntoString(template, context); } catch (IOException e) { logger.error("生成邮件内容失败, FreeMarker模板不存在", e); throw new MessagingException("FreeMarker模板不存在", e); } catch (TemplateException e) { logger.error("生成邮件内容失败, FreeMarker处理失败", e); throw new MessagingException("FreeMarker处理失败", e); } }
applicationContext-email.xml
<!-- 邮件发送器 --> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="smtp.163.com" /> <property name="username" value="[email protected]" /> <property name="password" value="???" /> <property name="javaMailProperties"> <props> <prop key="mail.smtp.auth">true</prop> <prop key="mail.debug">true</prop> <!-- <prop key="mail.smtp.starttls.enable">true</prop> --> </props> </property> </bean> <!-- 文本邮件服务类 --> <!-- <bean id="simpleMailService" class="com.zy.email.SimpleMailService"> <property name="mailSender" ref="mailSender" /> <property name="textTemplate"> <value><![CDATA[ 用戶%1$s在%2$tF被修改. System Administrator. ]]></value> </property> </bean> --> <!-- MIME邮件服务类 --> <bean id="mimeMailService" class="com.zy.service.MimeMailService"> <property name="mailSender" ref="mailSender" /> <property name="freemarkerConfiguration" ref="freemarkerConfiguration"></property> </bean> <!-- 用于生成HTML邮件内容的Freemarker配置 --> <bean id="freemarkerConfiguration" class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean"> <property name="templateLoaderPath" value="classpath:/" /> </bean>
<html> <head>对账单生成通知</head> <body> <h1>对账单${userName}已经生成,请查看附件!</h1> </body> </html>
3.程序入口
@Autowired public MimeMailService mimeMailService; public void execute(){ List<String> list = new ArrayList<String>(); list.add("d:/002.jpg"); mimeMailService.sendNotificationMail("这是测试的title",list); }
类似的文章,请戳我