在项目开发过程中,我们经常会遇到需要发送邮件的场景,比如:用户验证邮箱的时候,有活动通知或者提醒通知的时候……有些时候我们可能只需要发送一些简单文本内容即可,但是大多数情况下我们更希望邮件的内容是丰富多彩,而且是“定制的”,能够灵活修改。这时候使用一个方便修改的邮件模板就显得非常必要了。

对于发送邮件,大家都知道Oracle提供了官方的JavaMail API,这个API没有包含在标准的JDK中,所以需要额外下载。JavaMail功能全而强大,但是在易用性方面还是略微差点,这方面Spring对JavaMail API的调用作了很好的封装,让开发者更多地考虑邮件的内容处理即可。至于邮件模板的生成,这里选用非常强大且好用的模板引擎Freemarker。

下面是简单的代码示例:
一、发送邮件处理类

FreemarkerMailService.java

Java代码  
  1. /**
  2. * 使用freemarker文件作为模板发送邮件
  3. * @author wdmcygah
  4. *
  5. */
  6. @Service
  7. public class FreemarkerMailService {
  8. @Autowired
  9. private JavaMailSender mailSender;
  10. @Autowired
  11. private FreeMarkerConfigurer fmConfigurer;
  12. /**
  13. * 发送邮件
  14. * @param templateName 模板文件名
  15. * @param toEmailAddr  要发送到的邮箱地址
  16. * @param subject   邮件主题名
  17. * @param content   邮件内容
  18. */
  19. public void sendMail(String templateName,String toEmailAddr, String subject, Map<String,String> content){
  20. MimeMessage msg = mailSender.createMimeMessage();
  21. try {
  22. MimeMessageHelper helper=new MimeMessageHelper(msg,false,"utf-8");
  23. //要发送到的邮箱地址
  24. helper.setTo(toEmailAddr);
  25. //从哪发送的邮箱地址,自己改成真实的
  26. helper.setFrom("fromEmailAddress");
  27. helper.setSubject(subject);
  28. String text = getMailContent(content,templateName);
  29. helper.setText(text,true);
  30. helper.setSentDate(new Date());
  31. mailSender.send(helper.getMimeMessage());
  32. } catch (MessagingException e) {
  33. e.printStackTrace();
  34. System.out.println("发送邮件异常");
  35. }
  36. }
  37. /**
  38. * 根据模板获得解析后的内容
  39. * @param content   邮件内容
  40. * @param templateName  邮件模板名
  41. * @return
  42. */
  43. private String getMailContent(Map<String,String> content, String templateName) {
  44. String result = null;
  45. try {
  46. Template template = fmConfigurer.getConfiguration().getTemplate(templateName);
  47. result = FreeMarkerTemplateUtils.processTemplateIntoString(template, content);
  48. } catch (IOException e) {
  49. e.printStackTrace();
  50. System.out.println("获得freemarker模板出错");
  51. } catch (TemplateException e) {
  52. e.printStackTrace();
  53. System.out.println("模板解析出错");
  54. }
  55. return result;
  56. }
  57. }

二、关键配置文件

spring-mail.xml

Xml代码  
  1. <bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
  2. <!-- 这里选用163邮件服务器地址 -->
  3. <property name="host" value="smtp.163.com"></property>
  4. <!-- 用户名、密码改成自己真实的 -->
  5. <property name="username" value="real_username"></property>
  6. <property name="password" value="real_password"></property>
  7. <property name="defaultEncoding" value="UTF-8"></property>
  8. <property name="javaMailProperties">
  9. <props>
  10. <prop key="mail.smtp.auth">true</prop>
  11. </props>
  12. </property>
  13. </bean>
  14. <bean id="freeMarker" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
  15. <property name="templateLoaderPath" value="classpath:/freemarker"/><!--指定模板文件目录-->
  16. <property name="freemarkerSettings"><!-- 设置FreeMarker环境属性-->
  17. <props>
  18. <prop key="template_update_delay">1800</prop><!--刷新模板的周期,单位为秒-->
  19. <prop key="default_encoding">UTF-8</prop><!--模板的编码格式 -->
  20. <prop key="locale">zh_CN</prop><!-- 本地化设置-->
  21. </props>
  22. </property>
  23. </bean>
Xml代码  

三、Freemarker模板文件

hello.ftl

Java代码  
  1. 恭喜你,${name}!你已经用spring+freemarker发送了一封模板邮件!

四、主要依赖包

Xml代码  
  1. <dependency>
  2. <groupId>org.springframework</groupId>
  3. <artifactId>spring-context-support</artifactId>
  4. <version>4.0.0.RELEASE</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>javax.mail</groupId>
  8. <artifactId>mail</artifactId>
  9. <version>1.4.7</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.freemarker</groupId>
  13. <artifactId>freemarker</artifactId>
  14. <version>2.3.21</version>
  15. </dependency>

五、测试类

Java代码  
  1. public class FreemarkerMailServiceTest extends BaseTest{
  2. @Autowired
  3. private FreemarkerMailService fmService;
  4. @Test
  5. public void sendMail() {
  6. String templateName = "hello.ftl";
  7. Map<String,String> content = new HashMap<String, String>();
  8. content.put("name", "wdmcygah");
  9. String addr = "ToEmailAddress";
  10. String subject = "测试";
  11. fmService.sendMail(templateName, addr, subject, content);
  12. }
  13. }

如果想看完整源码,可以到我的Github仓库查看:https://github.com/wdmcygah/research-spring。
另外有些时候你可能只是想发送简单文本,那就在设置邮件内容(setText)的时候设置简单文本即可,同时比如邮件里面希望附带附件之类的,只需调用MimeMessageHelper的addAttachment方法即可。类似下面的这种处理方式:

JavaMailService.java

Java代码  
  1. /**
  2. * 邮件发送处理类
  3. * @author wdmcygah
  4. *
  5. */
  6. @Service
  7. public class JavaMailService {
  8. @Autowired
  9. private JavaMailSender mailSender;
  10. /**
  11. * 发送简单文本
  12. */
  13. public void sendSimpleMail(){
  14. MimeMessage javaMailMessage = mailSender.createMimeMessage();
  15. MimeMailMessage msgWrapper = new MimeMailMessage(javaMailMessage);
  16. msgWrapper.setTo("toEmailAddress");
  17. msgWrapper.setFrom("fromEmailAddress");
  18. msgWrapper.setSubject("测试");
  19. msgWrapper.setText("测试的内容.");
  20. msgWrapper.setSentDate(new Date());
  21. mailSender.send(msgWrapper.getMimeMessage());
  22. System.out.println("发送成功........");
  23. }
  24. /**
  25. * 发送更多内容邮件
  26. */
  27. public void sendMultiMail(){
  28. mailSender.send(new MimeMessagePreparator() {
  29. public void prepare(MimeMessage mimeMessage) throws Exception {
  30. MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true,"UTF-8");
  31. helper.setTo("toEmailAddress");
  32. helper.setFrom("fromEmailAddress");
  33. helper.setSubject("测试");
  34. StringBuilder sb = new StringBuilder("<html><body>hello..</body></html>");
  35. helper.setText(sb.toString(),true);
  36. helper.addInline("inlinePng", new ClassPathResource("/multisource/test.jpg"));
  37. helper.addAttachment("test.png", new ClassPathResource("/multisource/test.png"));
  38. }
  39. });
  40. }
  41. }

转载于:https://www.cnblogs.com/cmfwm/p/7686554.html

Spring发送基于freemarker模板的邮件相关推荐

  1. Spring 4 使用Freemarker模板发送邮件添加附件

    前言 Spring对Java的邮件发送提供了很好的支持,提供了超级简单的API,大大简化了Java邮件发送功能的开发. Spring对Email的支持是基于JavaMail API开发的,所以,我们在 ...

  2. java生成word 框勾_Java 使用模板生成 Word 文件---基于 Freemarker 模板框架

    Java项目引入 Freemarker 插件自行完成. 步骤如下: 1.编写 Word 模板,并将模板中要用代码动态生成数据用 Freemarker 变量取代,即${变量名},如${username} ...

  3. spring发送qq邮件 + 模板引擎

    文章目录 学习链接 邮箱配置 开启qq邮箱服务相关 配置文件 freemarker模板引擎 引入依赖 配置freemarker 编写模板 registerTpl.ftl 发送带内嵌图片的邮件 + 附件 ...

  4. java邮件支持_使用Spring的JAVA Mail支持简化邮件发送功能

    闲来无事,翻看<Spring in Action>,发现Spring集成了对JAVA Mail的支持,有点小激动的看了一遍,嗯,话说真的简单了很多. Spring的邮件发送的核心是Mail ...

  5. Java Email 发HTML邮件工具 采用 freemarker模板引擎渲染

    Java Email 发HTML邮件工具 采用 freemarker模板引擎 1.常用方式对比 Java发送邮件有很多的实现方式 第一种:Java 原生发邮件mail.jar和activation.j ...

  6. SpringBoot中使用Freemarker邮件模板生成邮件

    SpringBoot中使用Freemarker邮件模板生成邮件 当邮件内容比较简单的时候,我们可能一行字符串就能表达所有意思了,但是大部分情况下,我们的邮件内容都比较复杂需要用HTML来组织邮件内容, ...

  7. 采用freemarker模板引擎作为Java邮件模板

    项目需要发送邮件提醒,格式类似于下面这样,总之要换行,排版整齐 1.姓名: 2.年龄: 3.性别: 刚开始的时候,我采用在字符串之间用"\n"来拼接,发现请求返回成功,但是没有收到 ...

  8. Spring Boot 系列(五)web开发-Thymeleaf、FreeMarker模板引擎

    前面几篇介绍了返回json数据提供良好的RESTful api,下面我们介绍如何把处理完的数据渲染到页面上. Spring Boot 使用模板引擎 Spring Boot 推荐使用Thymeleaf. ...

  9. freemarker ftl模板_Spring Boot2 系列教程(十)Spring Boot 整合 Freemarker

    今天来聊聊 Spring Boot 整合 Freemarker. Freemarker 简介 这是一个相当老牌的开源的免费的模版引擎.通过 Freemarker 模版,我们可以将数据渲染成 HTML ...

最新文章

  1. HTML5 - Websocket
  2. python代码块-Python中的代码块和非代码块是什么
  3. 好技术领导和差技术领导区别在哪里--转
  4. SAP CRM中间件sales status调试
  5. python生物数据分析_Python学生物统计-数据可视化-学习笔记5
  6. 中国工程院撤销李宁院士称号
  7. 标准WPS框架下的空间信息处理服务部署方法
  8. man 输出的帮助信息输出到文件中
  9. 幂指函数怎么求极限_函数的极限I
  10. Spring中AOP注解实现
  11. Ubuntu下OpenResty 搭建高性能服务端
  12. media type
  13. GAN合成语音相关论文
  14. Java实现音频格式转换 WAV—mp3,可使音频压缩
  15. java线程栅栏_java多线程 栅栏CyclicBarrier
  16. Linux学习笔记_2021-01-21
  17. Android压缩图片到100K以下并保持不失真的高效方法
  18. 基于Selenium和ChromeDriver的自动化页面性能测试
  19. iphone app 的图标上被自动添加一层半透明遮罩(玻璃效果),小米3这样的高分屏icon不生效,怎么破?
  20. 包装设计实战案例教学

热门文章

  1. 利用可分离卷积UNet进行木薯叶病分类
  2. 中科研研究生:从算法工程师转行产品经理之后
  3. 阿里音乐流行趋势预测-代码分享
  4. 安装jdk时更改java安装路径_JDK下载安装步骤
  5. flutter 打开后闪退_vscode 扩展 pubspec 依赖快速打开文档
  6. eureka自我保护时间_Eureka的自我保护机制
  7. 微软技术沙龙 思考 体验 真正的中国网络技术
  8. Eclipse用法和技巧十二:快速复制一行
  9. Android仿人人客户端(v5.7.1)——对从服务器端(网络)获取的图片进行本地双缓存处理(流程图或活动图)...
  10. rewind java_Java LongBuffer rewind()用法及代码示例