Spring发送邮件(三)—使用邮件模板来创建邮件

本文介绍如何使用FreeMarker模板引擎配合Spring框架构建动态邮件内容,并实现用户注册成功后的模板邮件自动发送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

六、使用邮件模板来创建邮件

   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>

 

上面的${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;//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"><!-- 设置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}。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值