本文主要介绍利用JavaMailSenderImpl发送邮件。首先介绍了发送一般邮件,然后介绍了发送富文本(html)邮件及以velocity为模板发送邮件。
邮件发送分为为三步:创建邮件发送器、编写邮件、发送邮件。
Spring的JavaMailSenderImpl提供了强大的邮件发送功能,可发送普通文本邮件、带附件邮件、html格式邮件、带图片邮件、设置发送内容编码格式、设置发送人的显示名称。
下面就进行介绍,示例代码中很多都是字符串硬编码,实际使用时推荐使用spring的配置文件进行配置。
1、创建邮件发送器
首先定义JavaMailSenderImpl对象,并对其进行smtp相关信息设置,相当于我们自己的邮箱,如下:
1 JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); 2 mailSender.setHost("smtp.qq.com"); 3 mailSender.setUsername("[email protected]"); 4 mailSender.setPassword("asterisks");
当然更好的方法是使用配置文件进行配置,这里只是进行介绍,忽略硬编码先。
以上主机为邮箱服务商的smtp地址,用户名、密码为用户自己的邮箱。除以上外还可以设置
setPort(int port) 、setProtocol(String protocol) 等,可暂时不考虑。
这样我们便类似创建好了一个邮件发送器
2、 开始写邮件,编写邮件内容
JavaMailSenderImpl支持MimeMessages和
SimpleMailMessages。
MimeMessages为复杂邮件模板,支持文本、附件、html、图片等。
SimpleMailMessages实现了MimeMessageHelper,为普通邮件模板,支持文本。
下面先以SimpleMailMessages为例进行介绍
如此,我们便完成了一个简单邮件的编写,对于复杂邮件,编写及发送如下
其中MimeMessageHelper为的辅助类MimeMessages。以上包含了以资源文件为附件进行发送。对于普通文件发送方式如下:
3、发送邮件
2中已经包含了发送的代码,只需使用JavaMailSenderImpl的send接口即可。支持类型为
下面介绍下怎么发送富文本文件以及以velocity为模板发送邮件。
4、发送html文件
只需要在MimeMessageHelper setText时将是否是html设为true即可。setText介绍如下:
示例代码(包括附件)如下:
1 //第二个参数true,表示text的内容为html 2 //注意<img/>标签,src='cid:file','cid'是contentId的缩写,'file'是一个标记,需要在后面的代码中调用MimeMessageHelper的addInline方法替代成文件 3 helper.setText("<body><p>Hello Html Email</p><img src='cid:file'/></body>", true); 4 FileSystemResource file = new FileSystemResource("C:\\Users\\image1.jpg"); 5 helper.addInline("file", file);
5、以velocity为模板发送邮件
使用Velocity模板,需要Velocity的jar包,可以在官方网站下载,并加入ClassPath。
以velocity为模板发送邮件的原理如下:
a 类似web编程,将velocity作为前端,在java中设置vm中需要显示的变量值
b 使用VelocityEngineUtils的mergeTemplateIntoString函数将vm内容转换为文本
c 同4的发送html邮件一样发送邮件
所以最重要的过程将是将vm的内容转换为string,即设置邮件内容,其他同上面并无差异
5.1 新建vm文件,命名为index.vm
为了方便省略了html头定义。
其中${user} 为Velocity的语法,相当于一个变量,在java程序中可以设置这个变量的值在前端显示。
5.2 创建VelocityEngineFactoryBean对象,并设置属性
1 // Velocity的参数,通过VelocityEngineFactoryBean创建VelocityEngine,也是推荐在配置文件中配置的 2 Properties properties = System.getProperties(); 3 properties.put("resource.loader", "class"); 4 properties.put("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); 5 VelocityEngineFactoryBean v = new VelocityEngineFactoryBean(); 6 v.setVelocityProperties(properties);
5.3 转换vm内容为普通String
这样我们便将vm中的变量值填充好,并且将内容转换为了string
5.4 设置邮件内容,同4
其他内容同上面的1、2、3过程。
注意:vm文件格式需要与邮件编码一致否则会出现乱码