使用Spring发送基于freemarker模板的邮件

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

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

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

FreemarkerMailService.java

/**
 * 使用freemarker文件作为模板发送邮件
 * @author wdmcygah
 *
 */
@Service
public class FreemarkerMailService {

	@Autowired
	private JavaMailSender mailSender;
	
	@Autowired
	private FreeMarkerConfigurer fmConfigurer;
	
	/**
	 * 发送邮件
	 * @param templateName 模板文件名
	 * @param toEmailAddr  要发送到的邮箱地址
	 * @param subject	邮件主题名
	 * @param content	邮件内容
	 */
	public void sendMail(String templateName,String toEmailAddr, String subject, Map<String,String> content){
		MimeMessage msg = mailSender.createMimeMessage();
		try {
			MimeMessageHelper helper=new MimeMessageHelper(msg,false,"utf-8");
			//要发送到的邮箱地址
			helper.setTo(toEmailAddr);
			//从哪发送的邮箱地址,自己改成真实的
			helper.setFrom("fromEmailAddress");
			helper.setSubject(subject);
			String text = getMailContent(content,templateName);
			helper.setText(text,true);
			helper.setSentDate(new Date());
			mailSender.send(helper.getMimeMessage());
		} catch (MessagingException e) {
			e.printStackTrace();
			System.out.println("发送邮件异常");
		}
		
	}

	/**
	 * 根据模板获得解析后的内容
	 * @param content	邮件内容
	 * @param templateName	邮件模板名
	 * @return
	 */
	private String getMailContent(Map<String,String> content, String templateName) {
		String result = null;
		try {
			Template template = fmConfigurer.getConfiguration().getTemplate(templateName);
			result = FreeMarkerTemplateUtils.processTemplateIntoString(template, content);
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("获得freemarker模板出错");
		} catch (TemplateException e) {
			e.printStackTrace();
			System.out.println("模板解析出错");
		}
		return result;
	}
}

 

二、关键配置文件

spring-mail.xml

<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
		<!-- 这里选用163邮件服务器地址 -->
		<property name="host" value="smtp.163.com"></property>
		<!-- 用户名、密码改成自己真实的 -->
		<property name="username" value="real_username"></property>
		<property name="password" value="real_password"></property>
		<property name="defaultEncoding" value="UTF-8"></property>
		<property name="javaMailProperties">
			<props>
				<prop key="mail.smtp.auth">true</prop>
			</props>
		</property>
	</bean>	

	<bean id="freeMarker" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  
      <property name="templateLoaderPath" value="classpath:/freemarker"/><!--指定模板文件目录-->   
      <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> 
 

 

三、Freemarker模板文件

hello.ftl

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

 

四、主要依赖包

<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>4.0.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>javax.mail</groupId>
			<artifactId>mail</artifactId>
			<version>1.4.7</version>
		</dependency>
<dependency>
			<groupId>org.freemarker</groupId>
			<artifactId>freemarker</artifactId>
			<version>2.3.21</version>
		</dependency>

 

五、测试类

public class FreemarkerMailServiceTest extends BaseTest{

  @Autowired
  private FreemarkerMailService fmService;
	
  @Test
  public void sendMail() {
	  String templateName = "hello.ftl";
	  Map<String,String> content = new HashMap<String, String>();
	  content.put("name", "wdmcygah");
	  String addr = "ToEmailAddress";
	  String subject = "测试";
	  fmService.sendMail(templateName, addr, subject, content);
  }
}

 

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

JavaMailService.java

 

/**
 * 邮件发送处理类
 * @author wdmcygah
 *
 */
@Service
public class JavaMailService {

	@Autowired
	private JavaMailSender mailSender;
	
	/**
	 * 发送简单文本
	 */
	public void sendSimpleMail(){
		MimeMessage javaMailMessage = mailSender.createMimeMessage();
		MimeMailMessage msgWrapper = new MimeMailMessage(javaMailMessage);
		msgWrapper.setTo("toEmailAddress");
		msgWrapper.setFrom("fromEmailAddress");
		msgWrapper.setSubject("测试");
		msgWrapper.setText("测试的内容.");
		msgWrapper.setSentDate(new Date());
		mailSender.send(msgWrapper.getMimeMessage());
		System.out.println("发送成功........");
	}
	
	/**
	 * 发送更多内容邮件
	 */
	public void sendMultiMail(){
		mailSender.send(new MimeMessagePreparator() {
			public void prepare(MimeMessage mimeMessage) throws Exception {
				MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true,"UTF-8");
				helper.setTo("toEmailAddress");
				helper.setFrom("fromEmailAddress");
				helper.setSubject("测试");
				StringBuilder sb = new StringBuilder("<html><body>hello..</body></html>");
				helper.setText(sb.toString(),true);
				helper.addInline("inlinePng", new ClassPathResource("/multisource/test.jpg"));
				helper.addAttachment("test.png", new ClassPathResource("/multisource/test.png"));
			}
		});
	}
	
}

 


扩展链接:
1. JavaMail官网地址
2. JavaMail官方说明文档地址
3. Freemarker中文手册下载地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值