Spring+Freemarker模板邮件发送

Spring+Freemarker模板邮件发送

  1. 在eclipse中新建一个Java Project, 名称为spring-freemarker-mail

2. 在项目下新建一个lib目录,导入下面需要的jar包

commons-logging-1.2.jar

freemarker.jar

mail.jar

servlet-api.jar

spring-beans-3.2.2.jar

spring-context-3.2.2.jar

spring-context-support-3.2.2.jar

spring-core-3.2.2.jar

spring-expression-3.2.2.jar

spring-web-3.2.2.jar

spring-webmvc-3.2.2.jar

3. 新建发送邮件抽象类SendMailBase.java, 内容如下:

packagecn.com.csii.mail;

importjava.util.Date;

importjava.util.Map;

importjavax.mail.internet.MimeMessage;

import org.springframework.mail.javamail.JavaMailSenderImpl;

importorg.springframework.mail.javamail.MimeMessageHelper;

/**

* 邮件发送抽象类,该类的主要功能是封装发送邮件的一系列属性,和发送邮件的固定内容,还有一个抽象的生成邮件正文的方法,需要子类去覆盖

* @author liujianguo

*

*/

publicabstractclassSendMailBase {

/**

* 发送邮件主机

*/

privateString host = "localhost";

/**

* 连接到邮件发送服务器端口

*/

privateintport =25;

/**

* 邮件发送协议

*/

privateString protocol = "smtp";

/**

* 账户

*/

privateString username = "aaa";

/**

* 密码

*/

privateString password = "123";

/**

* 发件人邮箱地址

*/

privateString addresser = "[email protected]";

/**

* 收件人邮箱地址

*/

privateString recipient;

/**

* 邮件主题

*/

privateString subject;

/**

* 邮件模板位置

*/

privateString templateLocation;

//此处省略setter、getter方法

/**

* 发送邮件, 在这方法内部会创建一封邮件,然后根据Velocity模板和传入Map模型,合并出邮件内容,并发送出去

* @parammodel

* @throwsException

*/

@SuppressWarnings("rawtypes")

publicvoidsendMail(Map model) throws Exception{

JavaMailSenderImpl sender = newJavaMailSenderImpl();

sender.setHost(host);

sender.setUsername(username);

sender.setPassword(password);

MimeMessage message = sender.createMimeMessage();

MimeMessageHelper helper = newMimeMessageHelper(message, "UTF-8"); //为了解决中文乱码问题

//设置发件人

helper.setFrom(addresser);

//设置收件人

String recipientInModel =(String) model.get("recipient");

if(recipientInModel != null&& !"".equals(recipientInModel.trim())){

helper.setTo(recipientInModel);

}

else{

helper.setTo(recipient);

}

//设置邮件主题

helper.setSubject(subject);

//设置邮件发送时间

helper.setSentDate(newDate());

//设置邮件正文

String text =createMailText(model);

helper.setText(text, true); //如果模板里是html代码, 那么这个一定要设置为true

//发送邮件

sender.send(message);

}

/**

* 生成邮件正文

* @parammodel

* @return

*/

protectedabstractString createMailText(Map model);

}

4.创建根据Velocity模板发送邮件的子类,继承SendMailBase.java

packagecn.com.csii.mail;

importjava.util.Map;

importorg.springframework.ui.freemarker.FreeMarkerTemplateUtils;

importorg.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;

importfreemarker.template.Template;

/**

* 使用Freemarker模板发送电子邮件

* @authorAdministrator

*

*/

publicclassSendMailByFreemarkerTemplate extends BaseSendMail {

privateFreeMarkerConfigurer freeMarkerConfigurer;

publicFreeMarkerConfigurer getFreeMarkerConfigurer() {

returnfreeMarkerConfigurer;

}

publicvoidsetFreeMarkerConfigurer(FreeMarkerConfigurer freeMarkerConfigurer) {

this.freeMarkerConfigurer = freeMarkerConfigurer;

}

@Override

protectedString createMailText(Map model) {

try {

Template template = freeMarkerConfigurer.getConfiguration().getTemplate(getTemplateLocation());

String text =FreeMarkerTemplateUtils.processTemplateIntoString(template, model);

returntext;

} catch(Exception e) {

e.printStackTrace();

}

return"";

}

}

5.新建一个邮件模板(regist-template.ftl)放在src目录下,内容如下:

<html>

<body>

<h3>Hi, ${username}, welcome to the Email</h3>

<div>

now, you are registsuccessfully!

This is freemarker template...

</div>

</body>

</html>

6.配置beans.xml文件, 这个文件也放在src下,内容如下:

<bean id="sendMailByFreemarkerTemplate"class="cn.com.csii.mail.SendMailByFreemarkerTemplate">

<property name="addresser" value="[email protected]"/>

<property name="recipient" value="[email protected]"/>

<property name="templateLocation" value="regist-template.ftl" />

<property name="host" value="localhost"/>

<property name="username" value="aaa"/>

<property name="password" value="123"/>

<property name="subject" value="使用Freemarker模板发送邮件" />

<property name="freeMarkerConfigurer" ref="freeMarkerConfigurer" />

</bean>

<bean id="freeMarkerConfigurer"

class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">

<property name="templateLoaderPaths" value="classpath:" />

</bean>

8.创建客户端测试类

package cn.com.csii.mail.client;

import java.util.HashMap;

import java.util.Map;

import org.springframework.context.ApplicationContext;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

import cn.com.csii.mail.SendMailBase;

public class SendMailClient {

public static voidmain(String[] args) throws Exception {

ApplicationContextcontext = new ClassPathXmlApplicationContext("beans.xml");

SendMailBase mailSend =(SendMailBase) context.getBean("sendMailByFreemarkerTemplate");

Map model = newHashMap();

model.put("username","哈喽哈罗");

mailSend.sendMail(model);

}

}

9.运行客户端程序,结果能正常收到邮件

时间: 2024-10-02 03:35:55

Spring+Freemarker模板邮件发送的相关文章

使用freemarker做邮件发送模板

1.解析工具类 package com.example.springbootfreemarker.utils; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; import org.springframework.beans.factory.annotation.Autowired; import

Spring Boot入门——邮件发送

1.引入依赖 <!-- mail依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> 2.参数配置 在application.properties中配置邮件相关的参数 spring.thymeleaf.cache=false

使用Spring的JAVA Mail支持简化邮件发送(转)

闲来无事,翻看<Spring in Action>,发现Spring集成了对JAVA Mail的支持,有点小激动的看了一遍,嗯,话说真的简单了很多. Spring的邮件发送的核心是MailSender接口,在Spring3.0中提供了一个实现类JavaMailSenderImpl,这个类是发送邮件的核心类.可以通过在配置文件中配置使用,当然也可以自己硬编码到代码中(方便起见,下面的演示代码都是硬编码到代码中,省得配置麻烦). Spring提供的邮件发送不仅支持简单邮件的发送.添加附件,而且还可

spring+velocity+javamail发送模板邮件

有时候当我们注册完的时候系统会提示有一封邮件发送到了你的邮箱,如何做呢? 就要用到spring+velocity+javamail这3个玩意,其实只用了spring,因为其他2个都被spring集成了. 先看代码 package com.worthtech.app.util; import java.io.File; import java.util.Map; import javax.mail.MessagingException; import javax.mail.internet.Mim

Spring温习--邮件发送实现

Spring对邮件发送支持的很好,我们只要配置好邮件发送器,写好邮件发送具体操作类的方法,那么实现就不是很难的事,不过这个过程中经常会出现这样或那样的错误,所以待讲完本篇后我会总体总结下spring邮件发送容易发生的错误及解决办法 关于邮件发送,不外乎有这么几种情况,一种是纯文本的发送,一种是HTML形式的发送,一种就是发送时带有附件,一种就是发送时采取的事群发,针对这几个我将一一来讲下,我的代码中将第一中归为一大类,后面三种归为一代类,所以将会出现两种配置文件 第一大类邮件发送[纯文本发送]

Spring邮件发送2

前言:上一篇博文讲解了邮件发送的基础用法(数据是写死的),然而在实际开发中,大多数情况下邮件内容都是根据业务来动态生成的.所以在此篇博文中,我们将讲解邮件发送携带数据的几种方案. 一.解析自定义占位符 实现方法: 通过解析自定义占位符,将传递到邮件中的数据,转换成html内容,进行发送. 1)占位符替换函数 /** * Replaces place holder ("${}") string in template with values in Map * * @param templ

spring各种邮件发送

参考地址一 参考地址二 Spring邮件抽象层的主要包为org.springframework.mail.它包括了发送电子邮件的主要接口MailSender,和值对象SimpleMailMessage,它封装了简单邮件的属性如from, to,cc,subject,text. 包里还包含一棵以MailException为根的checked Exception继承树,它们提供了对底层邮件系统异常的高级别抽象. 要获得关于邮件异常层次的更丰富的信息,请参考Javadocs. 为了使用JavaMail

Spring MVC 学习总结(七)——FreeMarker模板引擎与动态页面静态化

模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易.一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则.强大的功能.高效的渲染效率.详尽的帮助说明与不断的更新与维护.常见的前端模板引擎有: 常用的java后台模板引擎:jsp.FreeMarker.Velocity等. 请不要迷恋速度,为了推广的测试可能是片面的,好的模板引擎经得起时间考验,建议大家选择成熟的.常用的模板引擎.另外不管前后端的模板引擎

使用Spring+观察者模式处理绩效评定流程状态变更及邮件发送

绩效评定流程在每月所有员工绩效计划打分结束后,由系统自动按评定关系表(树状结构,父结点是子结点的评定人,各部门总监为最底层评定人)发起任务,将最底层评定人下属的信息组装为表插入审批表单中,平行的最底层评定人为并行的子任务.最后一个平行最底层评定人评定结束后,系统会自动将新建子任务给平行最底层评定人的评定关系上层,并将所有平行最底层评定人的评定信息汇总作为审批表单,由此迭代直至找到平台级最终评定关系为止,流程结束.由于该流程极其特殊,既不是普通的并行或串行,也不是普通的子任务或会签,除发起结点.结