六、使用邮件模板来创建邮件
FreeMarker是一个被广泛使用的模板框架,Spring可以很好的支持该框架。Spring为FreeMarker提供了一个FreeMarkerConfigurer类,通过此类可方便地创建FreeMarker的基础环境,Spring提供FreeMarkerTemplateUtils工具类来完成解析模板的任务。
下面以用户注册成功后发送的模板文件registerUser.ftl,将该文件放在src/mailTemplate下:
6.1 模板文件
- <html>
-
<head>
-
<meta http-equiv="content-type" content="text/html;charset=utf8">
-
</head>
-
<body>
-
恭喜您成功注册!您的用户名为:<font color='red' size='30'>${username}</font>
-
</body>
-
</html>
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf8"> </head> <body> 恭喜您成功注册!您的用户名为:<font color='red' size='30'>${username}</font> </body> </html>
上面的${username}标签代表一个可被替换的动态属性。FreeMarker模板的标签支持级联属性,如${user.Id}则表示user对象的Id属性。
6.2 使用FreeMarker模板技术构造邮件内容
- package com.bb.spring.email;
-
import org.springframework.ui.freemarker.*;
-
import org.springframework.web.servlet.view.freemarker.*;
-
import freemarker.template.*;
-
import ......
-
public class TemplateEmailService {
-
private JavaMailSender sender;
-
private FreeMarkerConfigurer freeMarkerConfigurer=null;
-
-
public void setFreeMarkerConfigurer(FreeMarkerConfigurer freeMarkerConfigurer) {
-
this.freeMarkerConfigurer = freeMarkerConfigurer;
- }
-
-
public void setSender(JavaMailSender sender) {
-
this.sender = sender;
- }
-
-
-
private String getMailText(String username){
-
String htmlText="";
-
try {
-
-
Template tpl=freeMarkerConfigurer.getConfiguration().getTemplate("registerUser.ftl");
-
-
Map map=new HashMap();
-
map.put("username",username);
-
- htmlText=FreeMarkerTemplateUtils.processTemplateIntoString(tpl,map);
-
} catch (Exception e) {
-
- e.printStackTrace();
- }
-
return htmlText;
- }
-
-
-
public void sendTemplateMail(String username) throws MessagingException{
- MimeMessage msg=sender.createMimeMessage();
-
MimeMessageHelper helper=new MimeMessageHelper(msg,false,"utf8");
-
helper.setFrom("dongsanbo@sina.com");
-
helper.setTo("dongsanbo@sina.com");
-
helper.setSubject("注册成功-模板邮件");
-
String htmlText=getMailText(username);
-
helper.setText(htmlText, true);
-
- sender.send(msg);
-
System.out.println("成功发送模板邮件");
- }
-
public static void main(String[] args) throws MessagingException {
-
-
ApplicationContext ctx = new FileSystemXmlApplicationContext(
-
"src/applicationContext.xml");
-
TemplateEmailService ms=(TemplateEmailService) ctx.getBean("templateEmail");
-
-
-
ms.sendTemplateMail("yefriend");
-
}
- }
package com.bb.spring.email; import org.springframework.ui.freemarker.*; import org.springframework.web.servlet.view.freemarker.*; import freemarker.template.*; import ...... public class TemplateEmailService { private JavaMailSender sender; private FreeMarkerConfigurer freeMarkerConfigurer=null;//FreeMarker的技术类 public void setFreeMarkerConfigurer(FreeMarkerConfigurer freeMarkerConfigurer) { this.freeMarkerConfigurer = freeMarkerConfigurer; } public void setSender(JavaMailSender sender) { this.sender = sender; } //通过模板构造邮件内容,参数username将替换模板文件中的${username}标签。 private String getMailText(String username){ String htmlText=""; try { //通过指定模板名获取FreeMarker模板实例 Template tpl=freeMarkerConfigurer.getConfiguration().getTemplate("registerUser.ftl"); //FreeMarker通过Map传递动态数据 Map map=new HashMap(); map.put("username",username); //注意动态数据的key和模板标签中指定的属性相匹配 //解析模板并替换动态数据,最终username将替换模板文件中的${username}标签。 htmlText=FreeMarkerTemplateUtils.processTemplateIntoString(tpl,map); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return htmlText; } //发送模板邮件 public void sendTemplateMail(String username) throws MessagingException{ MimeMessage msg=sender.createMimeMessage(); MimeMessageHelper helper=new MimeMessageHelper(msg,false,"utf8");//由于是html邮件,不是mulitpart类型 helper.setFrom("dongsanbo@sina.com"); helper.setTo("dongsanbo@sina.com"); helper.setSubject("注册成功-模板邮件"); String htmlText=getMailText(username);//使用模板生成html邮件内容 helper.setText(htmlText, true); sender.send(msg); System.out.println("成功发送模板邮件"); } public static void main(String[] args) throws MessagingException { // TODO Auto-generated method stub ApplicationContext ctx = new FileSystemXmlApplicationContext( "src/applicationContext.xml"); TemplateEmailService ms=(TemplateEmailService) ctx.getBean("templateEmail"); //发送模板邮件 ms.sendTemplateMail("yefriend"); }//end method }
6.3 applicationContext.xml配置文件
- <bean id="freeMarker" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
-
<property name="templateLoaderPath" value="classpath:mailTemplate"/>
-
<property name="freemarkerSettings">
-
<props>
-
<prop key="template_update_delay">1800</prop>
-
<prop key="default_encoding">UTF-8</prop>
-
<prop key="locale">zh_CN</prop>
-
</props>
-
</property>
-
</bean>
-
<bean id="templateEmail" class="com.bb.spring.email.TemplateEmailService">
-
<property name="sender" ref="mailsender"></property>
-
<property name="freeMarkerConfigurer" ref="freeMarker"></property>
-
</bean>
<bean id="freeMarker" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value="classpath:mailTemplate"/><!--指定模板文件目录--> <property name="freemarkerSettings"><!-- 设置FreeMarker环境属性--> <props> <prop key="template_update_delay">1800</prop><!--刷新模板的周期,单位为秒--> <prop key="default_encoding">UTF-8</prop><!--模板的编码格式 --> <prop key="locale">zh_CN</prop><!-- 本地化设置--> </props> </property> </bean> <bean id="templateEmail" class="com.bb.spring.email.TemplateEmailService"> <property name="sender" ref="mailsender"></property> <property name="freeMarkerConfigurer" ref="freeMarker"></property> </bean>
在配置文件中已设置好模板目录,所以可在类中直接用模板文件名来定位模板文件。模板文件用UTF-8编码格式,避免中文乱码。通过设置template_update_delay属性,可让FreeMarker定期刷新模板,从而使应用程序在不重启下更新模板。
至此,可以运行TemplateEmailService类发送邮件,实验表明"yefriend"将替换${username}。
源地址:http://yefriendly.iteye.com/blog/404358
分享到:
相关推荐
Spring提供了`JavaMailSender`接口,用于发送邮件。它提供了基本的邮件发送功能,如设置发件人、收件人、主题、正文等。但是,如果邮件正文需要动态生成,比如包含变量或者复杂的HTML结构,这就需要模板引擎的介入。...
总的来说,通过Spring集成Freemarker发送邮件,开发者可以灵活地根据业务需求构造邮件模板,提高代码的可维护性和邮件内容的定制化程度。这是一个在实际项目中常见的应用场景,对于提升用户体验和增强服务互动性具有...
首先,创建邮件模板文件(如`templates/email.html`),然后在服务类中使用`TemplateEngine`处理模板: ```java @Service public class MailService { @Autowired private JavaMailSender javaMailSender; @...
这个源码应该包含了一个实现了MailSender接口的类,可能使用了线程池进行异步发送,以及如何构建邮件模板和处理邮件列表的逻辑。通过阅读和分析源码,你可以学习到如何在Spring中实现批量邮件发送,并从中获取灵感...
2. **创建邮件**:使用`SimpleMailMessage`或`MimeMessage`对象来创建邮件。`SimpleMailMessage`适用于简单的文本邮件,而`MimeMessage`则可以处理复杂的HTML邮件、附件等。 3. **发送邮件**:通过`JavaMailSender...
在Spring Boot应用中,你可以创建一个`MailService`接口和其实现类,使用`JavaMailSender`接口来发送邮件。以下是一个简单的示例: ```java @Service public class MailServiceImpl implements MailService { @...
使用Spring发送邮件的基本步骤如下: 1. 添加Spring核心库和相关的邮件发送库(如JavaMail API)到项目依赖中。 2. 在Spring配置文件(如`email-163.xml`)中配置邮件服务器的相关信息,如用户名、密码、SMTP服务器...
其次,邮件模板的创建可以借助各种工具,如代码编辑器(如Visual Studio Code)、专门的邮件模板构建器(如MailChimp或Campaign Monitor)或者CMS(内容管理系统)中的内置功能。在创建过程中,需要确保模板内容简洁...
通过以上步骤,你可以在Spring MVC应用中实现完整的邮件发送功能,包括使用FreeMarker创建动态邮件模板。确保所有配置都正确无误,并根据实际需求调整模板和邮件发送逻辑。这将使你的应用程序能够高效、灵活地发送...
根据提供的信息,我们可以详细探讨如何使用Spring框架结合Velocity模板引擎来实现邮件的自动化发送功能。这一过程涉及到Spring框架的基本配置、Velocity模板引擎的使用以及JavaMail API的应用。 ### Spring框架与...
本文将深入探讨"spring线程发送邮件"这一主题,结合标签"源码"和"工具",我们将从源码层面理解Spring如何实现线程异步发送邮件,并探讨相关工具的使用。 在Spring框架中,邮件服务的实现主要依赖于`javaMailSender`...
`SendService`会利用这些API创建`Session`,然后通过`Transport`对象发送邮件。 在生成HTML表格方面,`CreateHtmlTable`可能是用于生成邮件正文的HTML代码的工具类。这通常涉及字符串拼接或使用模板引擎,如...
它被广泛应用于Java Web开发,尤其是在Spring框架中,可以结合使用来实现高效的邮件发送功能。本示例将详细介绍如何利用Velocity模板和Spring框架来发送邮件,以及如何实现通用性和多扩展性。 首先,我们需要在项目...
配置完成后,Spring Boot会自动创建JavaMailSender实例,我们可以通过`@Autowired`注解注入到需要发送邮件的类中。例如,通过单元测试发送一封简单的邮件: ```java @RunWith(SpringJUnit4ClassRunner.class) @...
本教程将聚焦于Spring的一个实用特性——定时任务,特别是如何利用Spring集成JavaMailSender来实现定时发送邮件。我们将探讨以下知识点: 1. **Spring定时任务(Scheduled Tasks)** Spring通过`@Scheduled`注解和`...
9. **服务实现**:创建一个服务类,注入 `JavaMailSender` 和 `FreemarkerConfigured`,编写方法来组装邮件内容、创建 `MimeMessage` 对象并调用 `JavaMailSender` 的 `send` 方法发送邮件。 通过以上步骤,我们...
这样,当发送邮件时,Spring会使用这些模板并替换变量,生成最终的邮件内容。 为了在Spring中集成Velocity,我们需要添加以下依赖: 1. `velocity-engine-core`:Velocity的核心库。 2. `velocity-tools-view`:...
在Spring Boot应用中,发送邮件是一项常见的功能,用于与用户通信、发送通知或者提供服务。本教程将详细讲解如何利用Spring Boot实现四种类型的邮件服务:发送普通文本邮件、HTML邮件、附件邮件以及嵌入图片的邮件。...