采用freemarker模板引擎作为Java邮件模板
来源:互联网 发布:姚明国家队数据 编辑:程序博客网 时间:2024/04/29 10:09
项目需要发送邮件提醒,格式类似于下面这样,总之要换行,排版整齐
1.姓名:2.年龄:3.性别:刚开始的时候,我采用在字符串之间用“\n”来拼接,发现请求返回成功,但是没有收到邮件,换成“\r"也不行;但是换成”\t“就可以收到邮件,只不过\t不是我要的效果。再后来尝试用"<br/>"来拼接就成功了,既可以收到邮件,也换行了,说明我所调用的邮件服务mime类型是web型。
那如果我们采用freemarker引擎作为邮件模板,那我们就可以在页面上定义各种样式了,因为发送过去的是个网页,首先你得有一个模板文件,freemarker文件以ftl为后缀(velocity以vm为后缀),然后写一个组件类用来初始化和填充模板Template;然后将一个模型类model传递到模板中,模板中以EL表达式来取值
代码如下:
@Component@Lazy(false)public class MailUtil { private static final String ENCODING = "UTF-8"; private static final String TEMPLATE_NAME = "MAIL_TEMPLATE"; protected static final Logger logger = LoggerFactory.getLogger(MailUtil.class); private static Template MAIL_TEMPLATE; static { Configuration cfg = new Configuration(Configuration.VERSION_2_3_21); cfg.setDefaultEncoding(ENCODING); StringTemplateLoader stringTemplateLoader = new StringTemplateLoader(); cfg.setTemplateLoader(stringTemplateLoader); InputStreamReader isr = null; try { //这是一个springboot项目,我的模板文件放在resource文件夹下的templates文件夹下 isr = new InputStreamReader(new FileInputStream(ResourceUtils.getFile("classpath:templates/template.ftl")), ENCODING); MAIL_TEMPLATE = new Template(TEMPLATE_NAME, isr, cfg); } catch (Exception e) { MAIL_TEMPLATE = null; } finally { IOUtils.closeQuietly(isr); } } public static void sendMail(String mailFrom, String mailReceiver, String mailFrom, String mailServerIp, int port, Employee employee) { try { StringWriter out = new StringWriter(); MAIL_TEMPLATE.process(employee, out); out.flush(); String context = out.toString(); //当你无法收到邮件,请把下面这行注释打开 //context = context.replaceAll("\r\n",""); JavaMailSenderImpl senderImpl = new JavaMailSenderImpl(); senderImpl.setHost(mailServerIp); senderImpl.setPort(port); senderImpl.setUsername(mailFrom); senderImpl.setPassword(mailFrom); MimeMessage mailMessage = senderImpl.createMimeMessage(); MimeMessageHelper message = new MimeMessageHelper(mailMessage, true, "utf-8"); message.setFrom(new InternetAddress(MimeUtility.encodeText("员工信息", "utf-8", null) + " <" + mailFrom + ">")); message.setTo(mailReceiver); message.setSubject("创建员工" + people.getName() + "返回信息"); message.setText(context, true); senderImpl.send(mailMessage); } catch (Exception e) { e.printStackTrace(); } }在模板文件中用el表达式取
<tr> <th style="margin-left: 30px">1.name:</th> <td>${name}</td></tr>这里使用的主要的依赖包为<tr> <th style="margin-left: 30px">3.age:</th> <td>${age}</td></tr><tr> <th style="margin-left: 30px">3.gender:</th> <td>${gender}</td></tr>
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> <scope>compile</scope></dependency><dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> <scope>compile</scope></dependency><dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.21</version> <scope>compile</scope></dependency>有几个坑需要填一下,第一个是用了模板引擎返回调用邮件服务成功,但是收不到邮件,打印context内容后,发现有好多”\r\n“,因为模板文件中有好多换行符,windows环境下换行符就是”\r\n“,然后我把所有”\r\n“替换掉就能收到邮件了,如果你也遇到同样问题,不妨试试;第二个就是springboot读取resource文件夹下的文件在windows和linux系统上是不一样的。在这里windows环境我用下面这种方式成功
但是,我将项目打成jar,用Java -jar方式运行就报空指针错误找不到文件。我后来没用模板了,Java -jar方式获取文件有什么不一样吗,欢迎给出建议。InputStreamReader isr = new InputStreamReader(new FileInputStream(ResourceUtils.getFile("classpath:templates/template.ftl")),ENCODING);
阅读全文
0 0
- 采用freemarker模板引擎作为Java邮件模板
- java模板引擎Freemarker
- JAVA模板引擎FreeMarker
- Java模板引擎 FreeMarker
- Java模板引擎 FreeMarker
- Java模板引擎 FreeMarker
- Java模板引擎 FreeMarker
- Java模板引擎 FreeMarker
- Java模板引擎FreeMarker
- Java模板引擎 FreeMarker
- Java模板引擎 FreeMarker
- Java模板引擎Freemarker
- java模板引擎freemarker
- Java模板引擎 FreeMarker介绍
- Java 模板引擎FreeMarker实战
- Java模板引擎之Freemarker
- Java模板引擎之Freemarker
- Java模板引擎之 FreeMarker
- Cg Programming/Unity/Toon Shading卡通着色
- CSS解读之box-sizing属性
- jsp中时间的显示问题
- MATLAB Notes
- Problem H 小鑫查卫生
- 采用freemarker模板引擎作为Java邮件模板
- 图像处理-像素点分析
- lasso 回归 & 岭回归
- 蓝桥杯--基础训练---龟兔赛跑、FJ字串(Java)
- java中值传递和引用传递以及String是属于什么传递?
- 数据结构--循环队列的顺序存储基本操作
- 竞品分析
- 关于BUG的那些误解
- sql20171127进度审批代码