`

java 利用spring JavaMailSenderImpl发送邮件,支持普通文本、附件、html、velocity模板

 
阅读更多

本文主要介绍利用JavaMailSenderImpl发送邮件。首先介绍了发送一般邮件,然后介绍了发送富文本(html)邮件以velocity为模板发送邮件。

 

邮件发送分为为三步:创建邮件发送器编写邮件发送邮件

 

Spring的JavaMailSenderImpl提供了强大的邮件发送功能,可发送普通文本邮件、带附件邮件、html格式邮件、带图片邮件、设置发送内容编码格式、设置发送人的显示名称。

 

下面就进行介绍,示例代码中很多都是字符串硬编码,实际使用时推荐使用spring的配置文件进行配置。

 

1、创建邮件发送器

首先定义JavaMailSenderImpl对象,并对其进行smtp相关信息设置,相当于我们自己的邮箱,如下:

JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("smtp.qq.com");
mailSender.setUsername("mosaic@qq.com");
mailSender.setPassword("asterisks");

当然更好的方法是使用配置文件进行配置,这里只是进行介绍,忽略硬编码先。

以上主机为邮箱服务商的smtp地址,用户名、密码为用户自己的邮箱。除以上外还可以设置

setPort(int port) 、setProtocol(String protocol) 等,可暂时不考虑。

这样我们便类似创建好了一个邮件发送器

 

2、 开始写邮件,编写邮件内容

JavaMailSenderImpl支持MimeMessagesSimpleMailMessages

MimeMessages为复杂邮件模板,支持文本、附件、html、图片等。

SimpleMailMessages实现了MimeMessageHelper,为普通邮件模板,支持文本。

下面先以SimpleMailMessages为例进行介绍

SimpleMailMessage smm = new SimpleMailMessage();
// 设定邮件参数
smm.setFrom(mailSender.getUsername());
smm.setTo("mosaic@126.com");
smm.setSubject("Hello world");
smm.setText("Hello world via spring mail sender");
// 发送邮件
mailSender.send(smm);

如此,我们便完成了一个简单邮件的编写,对于复杂邮件,编写及发送如下

//使用JavaMail的MimeMessage,支付更加复杂的邮件格式和内容
MimeMessage msg = mailSender.createMimeMessage();
//创建MimeMessageHelper对象,处理MimeMessage的辅助类
MimeMessageHelper helper = new MimeMessageHelper(msg, true);
//使用辅助类MimeMessage设定参数
helper.setFrom(mailSender.getUsername());
helper.setTo("mosaic@126.com");
helper.setSubject("Hello Attachment");
helper.setText("This is a mail with attachment");
//加载文件资源,作为附件
ClassPathResource file = new ClassPathResource("Chrysanthemum.jpg");
//加入附件
helper.addAttachment("attachment.jpg", file);
// 发送邮件
mailSender.send(smm);

其中MimeMessageHelper为的辅助类MimeMessages。以上包含了以资源文件为附件进行发送。对于普通文件发送方式如下:

FileSystemResource file = new FileSystemResource("C:\\Users\\image1.jpg");
helper.addInline("file", file);

 

3、发送邮件

2中已经包含了发送的代码,只需使用JavaMailSenderImpl的send接口即可。支持类型为

 void	send(MimeMessage mimeMessage) 
          Send the given JavaMail MIME message.
 void	send(MimeMessage[] mimeMessages) 
          Send the given array of JavaMail MIME messages in batch.
 void	send(MimeMessagePreparator mimeMessagePreparator) 
          Send the JavaMail MIME message prepared by the given MimeMessagePreparator.
 void	send(MimeMessagePreparator[] mimeMessagePreparators) 
          Send the JavaMail MIME messages prepared by the given MimeMessagePreparators.
 void	send(SimpleMailMessage simpleMessage) 
          Send the given simple mail message.
 void	send(SimpleMailMessage[] simpleMessages) 
          Send the given array of simple mail messages in batch.

 

下面介绍下怎么发送富文本文件以及以velocity为模板发送邮件。

4、发送html文件

只需要在MimeMessageHelper setText时将是否是html设为true即可。setText介绍如下:

setText(String text, boolean html) 
          Set the given text directly as content in non-multipart mode or as default body part in multipart mode.

示例代码(包括附件)如下:

//第二个参数true,表示text的内容为html
//注意<img/>标签,src='cid:file','cid'是contentId的缩写,'file'是一个标记,需要在后面的代码中调用MimeMessageHelper的addInline方法替代成文件
helper.setText("<body><p>Hello Html Email</p><img src='cid:file'/></body>", true);
FileSystemResource file = new FileSystemResource("C:\\Users\\image1.jpg");
helper.addInline("file", file);

 

5、以velocity为模板发送邮件

使用Velocity模板,需要Velocity的jar包,可以在官方网站下载,并加入ClassPath。

以velocity为模板发送邮件的原理如下:

a 类似web编程,将velocity作为前端,在java中设置vm中需要显示的变量值

b 使用VelocityEngineUtilsmergeTemplateIntoString函数将vm内容转换为文本

c 同4的发送html邮件一样发送邮件

所以最重要的过程将是将vm的内容转换为string,即设置邮件内容,其他同上面并无差异

 

5.1 新建vm文件,命名为index.vm

<html>
	<head>
	</head>
	<body>
		<div>${user} </div>
		<div>${content}</div>
	</body>
</html> 

为了方便省略了html头定义。
其中${user} 为Velocity的语法,相当于一个变量,在java程序中可以设置这个变量的值在前端显示。

 

5.2 创建VelocityEngineFactoryBean对象,并设置属性

// Velocity的参数,通过VelocityEngineFactoryBean创建VelocityEngine,也是推荐在配置文件中配置的
Properties properties = System.getProperties();
properties.put("resource.loader", "class");
properties.put("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
VelocityEngineFactoryBean v = new VelocityEngineFactoryBean();
v.setVelocityProperties(properties);

 

5.3 转换vm内容为普通String

// 声明Map对象,并填入用来填充模板文件的键值对
Map<String, String> model = new HashMap<String, String>();
model.put("user", "ooo");
model.put("content", "nihao");
// Spring提供的VelocityEngineUtils将模板进行数据填充,并转换成普通的String对象
String emailText = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "index.vm", model);

这样我们便将vm中的变量值填充好,并且将内容转换为了string

 

5.4 设置邮件内容,同4

helper.setText(emailText, true);

其他内容同上面的1、2、3过程。

 

注意:vm文件格式需要与邮件编码一致否则会出现乱码

 

参考:

http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/mail/javamail/JavaMailSenderImpl.html

http://www.cnblogs.com/codeplus/archive/2011/11/03/2232893.html

http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/mail/javamail/

http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/ui/velocity/VelocityEngineUtils.html

 

 

分享到:
评论
1 楼 zcs_84 2012-11-08  
问下 index.vm 这个文件 放到什么路径 可以让程序找到!
String emailText = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "index.vm", model);  我掉这个 程序报找不到  index.vm  请解答

相关推荐

    Velocity模板邮件发送例子(Spring框架)(可通用,支持多扩展)

    本示例将详细介绍如何利用Velocity模板和Spring框架来发送邮件,以及如何实现通用性和多扩展性。 首先,我们需要在项目中引入Velocity和Spring的相关依赖。对于Spring框架,通常我们会使用Spring Framework的MVC...

    spring+velocity发送邮件

    根据提供的信息,我们可以详细探讨如何使用Spring框架结合Velocity模板引擎来实现邮件的自动化发送功能。这一过程涉及到Spring框架的基本配置、Velocity模板引擎的使用以及JavaMail API的应用。 ### Spring框架与...

    Java通过内容模板发送邮件,支持附件

    本文将深入探讨如何使用Java通过内容模板发送邮件,并支持附件功能。我们将基于给定的“Java通过内容模板发送邮件,支持附件”的项目进行讲解。 首先,这个项目可能使用了某种模板引擎,如FreeMarker或Velocity,来...

    基于Java的邮件发送模板

    本篇文章将详细讲解如何利用Java实现邮件发送,并结合Apache的相关库来创建邮件发送模板,以提升效率和用户体验。 首先,JavaMail API是Java中用于处理电子邮件的主要库。它提供了丰富的API,可以用来创建、发送和...

    java发送HTML模版邮件

    在实际应用中,你可能还需要考虑错误处理、邮件附件、多语言支持等问题,以及更复杂的模板引擎如FreeMarker或Velocity来动态生成HTML内容。希望这个概述能帮助你理解并实现自己的Java邮件发送功能。

    Java发送带模版的邮件示例

    在Java编程中,发送带有模板的邮件是一项常见的任务,尤其对于企业级应用来说,通过电子邮件进行通知、报告或客户服务是必不可少的。JavaMail API提供了一种标准的方式来处理邮件的发送,而结合模板技术,我们可以...

    spring velocity 发邮件(单发,群发,图片,附件)

    标题 "spring velocity 发邮件(单发,群发,图片,附件)" 涉及到的是在Java开发中使用Spring框架集成Velocity模板引擎来发送电子邮件的功能。这个话题涵盖了多个知识点,包括Spring的邮件服务、Velocity模板引擎的应用...

    Spring进阶—如何用Java代码实现邮件发送

    总结来说,Spring框架为Java应用程序提供了强大且灵活的邮件发送功能,无论是简单的文本邮件还是复杂的HTML邮件,甚至是包含附件和内嵌资源的邮件,都能通过其高级抽象层轻松实现。同时,配合模板引擎,可以有效地...

    struts2+spring3.0+mybatis3.0.4集成的邮件发送实例(可上传附件)

    本实例将详细讲解如何在这三个框架基础上实现一个邮件发送功能,同时支持附件上传。对于Java开发者来说,理解和掌握这个集成过程将有助于提升在实际项目中的应用能力。 首先,Struts2作为MVC框架,主要负责控制层的...

    简单学习使用Spring+Velocity发送邮件

    本教程将围绕如何使用Spring框架与Velocity模板引擎来实现邮件发送功能进行详细讲解。 首先,让我们理解Spring框架的邮件发送服务。Spring提供了`JavaMailSender`接口,该接口提供了发送邮件的基本方法,如`send...

    java实现模板邮件发送

    Java 实现模板邮件发送是一项常见的任务,特别是在企业级应用中,用于批量发送通知、报告或者验证码等。在本文中,我们将深入探讨如何使用Java来创建和发送带有模板的电子邮件。 首先,我们需要理解Java中用于邮件...

    velocity实现邮件模板定制

    在IT行业中,Velocity是一个强大的模板引擎,常用于生成动态内容,比如HTML页面、电子邮件模板定制等。本篇文章将深入探讨如何使用Velocity实现邮件模板的定制,以及与之相关的源码和工具。 首先,Velocity的基本...

    Velocity--java的模板引擎

    在Velocity中,View就是模板文件(.vm),它包含静态文本和Velocity指令,Model则是Java对象,Controller的工作由Velocity Engine完成,它解析模板,将Java对象的数据嵌入到模板中,生成最终的HTML或其他格式的输出...

    Velocity模板入门DEMO

    在“Apache-Velocity-java”这个压缩包中,很可能包含了示例代码和一个简单的 Velocity 模板文件,展示如何在Java应用程序中使用Velocity来生成动态HTML。你可以通过以下步骤运行DEMO: 1. 解压压缩包。 2. 查看...

    Velocity模板使用指南中文版

    例如,Spring MVC 中的视图解析器可以配置为使用 Velocity,从而利用其强大的模板能力。 ### 9. 最佳实践 - 保持模板简洁,避免过多的逻辑处理。 - 使用适当的注释和文档,便于维护。 - 遵循一致的命名规范和代码...

    Spring中使用FreeMaker或Vilocity模板发送邮件

    通过以上步骤,我们可以利用Spring集成FreeMarker或Velocity,实现根据模板动态生成邮件内容并发送。这种方式使得邮件内容更具灵活性,能够适应不同的场景需求,比如发送订单确认邮件、活动通知等。同时,由于Spring...

    SpringBoot集成Mybatis,velocity模板

    在IT行业中,SpringBoot是一个备受推崇的轻量级框架,它极大地简化了Spring应用的初始搭建以及...这种方式既保留了SpringBoot的简洁性,又利用了Mybatis的灵活SQL和Velocity的模板能力,提高了开发效率和代码可读性。

    spring mvc与velocity整合

    总的来说,Spring MVC与Velocity的整合使得开发者可以利用Spring MVC的强大功能来处理业务逻辑,同时利用Velocity的简洁模板语法来设计前端页面,两者结合提供了高效且易于维护的Web应用解决方案。

Global site tag (gtag.js) - Google Analytics