博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 利用spring JavaMailSenderImpl发送邮件,支持普通文本、附件、html、velocity模板...
阅读量:4320 次
发布时间:2019-06-06

本文共 4680 字,大约阅读时间需要 15 分钟。

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

 

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

 

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

 

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

 

1、创建邮件发送器

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

Java代码  
1     JavaMailSenderImpl mailSender = new JavaMailSenderImpl();  2     mailSender.setHost("smtp.qq.com");  3     mailSender.setUsername("mosaic@qq.com");  4     mailSender.setPassword("asterisks");

 

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

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

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

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

 

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

JavaMailSenderImpl支持

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

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

下面先以SimpleMailMessages为例进行介绍

Java代码  
1     SimpleMailMessage smm = new SimpleMailMessage();  2     // 设定邮件参数  3     smm.setFrom(mailSender.getUsername());  4     smm.setTo("mosaic@126.com");  5     smm.setSubject("Hello world");  6     smm.setText("Hello world via spring mail sender");  7     // 发送邮件  8     mailSender.send(smm);

 

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

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

 

 

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

Java代码  
  1. FileSystemResource file = new FileSystemResource("C:\\Users\\image1.jpg");  
  2. helper.addInline("file", file);  

 

3、发送邮件

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

Java代码  
收藏代码
1     void    send(MimeMessage mimeMessage)    2              Send the given JavaMail MIME message.   3     void    send(MimeMessage[] mimeMessages)    4              Send the given array of JavaMail MIME messages in batch.   5     void    send(MimeMessagePreparator mimeMessagePreparator)    6              Send the JavaMail MIME message prepared by the given MimeMessagePreparator.   7     void    send(MimeMessagePreparator[] mimeMessagePreparators)    8              Send the JavaMail MIME messages prepared by the given MimeMessagePreparators.   9     void    send(SimpleMailMessage simpleMessage)   10              Send the given simple mail message.  11     void    send(SimpleMailMessage[] simpleMessages)   12              Send the given array of simple mail messages in batch.

 

 

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

4、发送html文件

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

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

 

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

Java代码  
1     //第二个参数true,表示text的内容为html  2     //注意标签,src='cid:file','cid'是contentId的缩写,'file'是一个标记,需要在后面的代码中调用MimeMessageHelper的addInline方法替代成文件  3     helper.setText("

Hello Html Email

", 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 使用的函数将vm内容转换为文本

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

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

 

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

Java代码  
 

为了方便省略了html头定义。

其中${user} 为Velocity的语法,相当于一个变量,在java程序中可以设置这个变量的值在前端显示。

 

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

Java代码  
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

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

 

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

 

5.4 设置邮件内容,同4

Java代码  
1     helper.setText(emailText, true);

 

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

 

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

转载于:https://www.cnblogs.com/cnjava/archive/2013/02/01/2889226.html

你可能感兴趣的文章
Hilbert先生旅馆的故事
查看>>
采访吴岳师兄有感 by 王宇飞
查看>>
LVS简略介绍
查看>>
hdu 1021 Fibonacci Again
查看>>
JVM架构_XmnXmsXmxXss有什么区别:转
查看>>
PHPExcel 使用心得
查看>>
洛谷 P3374 【模板】树状数组 1(单点加,区间和)
查看>>
verilog 代码编写小记
查看>>
PyQT的安装和配置
查看>>
从 docker 到 runC
查看>>
守护进程
查看>>
php数组
查看>>
Linux 防火墙
查看>>
互联网金融P2P主业务场景自动化测试
查看>>
My third day of OpenCV
查看>>
Android的View和ViewGroup分析
查看>>
echarts.js中的图表大小自适应
查看>>
Delphi的FIFO实现
查看>>
牛客网暑期ACM多校训练营(第一场) - J Different Integers(线段数组or莫队)
查看>>
(转)AS3 面相对象 高级话题
查看>>