`

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  请解答

相关推荐

    使用Spring的JAVA Mail支持简化邮件发送功能

    Spring为开发者提供了便捷的方式来发送电子邮件,包括简单的文本邮件、带有附件的邮件以及使用模板引擎如Velocity或Freemarker来定制邮件内容。 首先,确保你的项目包含了Spring的相关库以及Java Mail API的JAR包。...

    COMSOL与MATLAB联合仿真调试及GUI界面设计:提升科研仿真效率的技术指南

    内容概要:本文详细介绍了COMSOL与MATLAB联合仿真的具体实现方法及其应用。首先讲解了如何通过LiveLink进行基本操作,如加载模型、设置参数并运行仿真。接着探讨了利用MATLAB的强大功能扩展COMSOL的功能,包括参数扫描、优化算法、批量处理等高级操作。随后,文章深入讨论了基于MATLAB App Designer设计友好的GUI界面的方法,使用户能够更加便捷地控制和展示仿真结果。此外,文中还分享了许多实用的调试技巧,如实时监控参数、异常处理以及内存管理等,确保仿真过程顺利进行。最后,强调了联合仿真在提高科研工作效率方面的巨大潜力。 适合人群:对数值模拟和科学计算感兴趣的科研工作者、工程师和技术爱好者,尤其是那些希望将COMSOL与MATLAB结合起来以增强仿真能力的人群。 使用场景及目标:适用于需要高效执行复杂仿真任务的研究项目,旨在帮助用户掌握COMSOL与MATLAB联合使用的最佳实践,从而显著减少仿真时间并获得更精确的结果。 其他说明:文章不仅提供了详细的代码示例,还分享了很多实践经验,有助于读者快速上手并解决实际问题。同时提醒读者关注不同版本间的兼容性和性能优化问题。

    等速万向节周期寿命试验台垂直运动模块及PLC控制设计 毕业设计说明书.doc

    等速万向节周期寿命试验台垂直运动模块及PLC控制设计 毕业设计说明书.doc

    钢筋混凝土肋梁楼盖设计课程设计说明书.doc

    钢筋混凝土肋梁楼盖设计课程设计说明书.doc

    是时候跟Mac系统自带的播放器说拜拜了!这个项目提供了简洁、高效的媒体播放体验,支持多种格式和平台,是你娱乐生活的绝佳伴侣

    特征 基于mpv,在macOS上提供最佳解码能力 设计时考虑了macOS(10.15+)的现代版本 视频和音乐所需的所有功能:字幕、播放列表、章节……以及更多! Force Touch、画中画和高级Touch Bar支持 可定制的用户界面,包括多种配色方案和屏幕控制器(OSC)布局定位 专为音频文件设计的独立音乐模式 视频缩略图 在线字幕搜索与智能本地字幕匹配 无限播放历史记录 方便的交互式视频/音频过滤器设置 完全可定制的键盘、鼠标、触控板和手势控制 面向高级用户的mpv配置文件和脚本系统 提供命令行工具和浏览器扩展

    基于Bagging集成模型的时间序列预测Matlab实现及其优化技巧

    内容概要:本文详细介绍了如何利用Bagging集成学习方法进行时间序列预测,并提供了完整的Matlab代码实现。首先解释了Bagging的基本原理,强调了在时间序列预测中保持序列连续性和防止信息泄露的重要性。然后展示了如何通过滑动窗口法生成样本矩阵,并使用ARIMA与XGBoost的混合模型作为基模型,实现了Bagging集成。文中还讨论了预测阶段的聚合策略,如指数衰减加权,以及并行加速技巧。此外,作者分享了一些实践经验,如避免使用复杂的深度学习模型作为基模型,以及如何处理异常值和特征工程的具体方法。 适合人群:具有一定编程基础和技术背景的研究人员、数据科学家和工程师,特别是对时间序列预测感兴趣的读者。 使用场景及目标:适用于需要提高时间序列预测精度的实际应用场景,如电力负荷预测、销售预测等。目标是通过集成学习方法减少预测误差,提高模型稳定性。 其他说明:文中提供的代码可以直接运行,同时附带了许多实用技巧和注意事项,帮助读者更好地理解和应用Bagging集成模型。

    苯 正丁醇化工原理课程设计说明书.pdf

    苯 正丁醇化工原理课程设计说明书.pdf

    4.0吨商用车膜片弹簧离合器设计说明书.doc

    4.0吨商用车膜片弹簧离合器设计说明书.doc

    常村煤矿22采区2203综采放顶煤工作面开采设计说明书.docx

    常村煤矿22采区2203综采放顶煤工作面开采设计说明书.docx

    基于多目标黏菌优化算法(MOSMA)的SVM参数优化及其在回归预测中的应用

    内容概要:本文介绍了一种创新的方法,利用多目标黏菌优化算法(MOSMA)来优化支持向量机(SVM)的参数C和gamma,从而提高回归预测的效果。首先详细解释了MOSMA的工作原理,包括黏菌权重更新、快速非支配排序以及自适应参数调整等关键技术点。接着展示了具体的Python代码实现,涵盖数据预处理、适应度函数定义、参数更新规则等方面。实验结果显示,在风电功率预测等多个应用场景中,相较于传统的网格搜索方法,MOSMA能够更快更有效地找到最优参数组合,显著提升了预测性能。 适合人群:从事机器学习研究或应用开发的技术人员,尤其是关注SVM参数优化及回归预测领域的从业者。 使用场景及目标:适用于需要进行高效参数寻优的回归预测任务,如风电功率预测、设备负载预测等。主要目标是通过改进SVM参数配置,获得更高的预测精度和更好的泛化能力。 其他说明:文中提供了完整的代码示例和详细的实施步骤指导,帮助读者快速理解和应用这一先进的优化技术。此外,还讨论了一些常见的注意事项和技术细节,如数据标准化、参数范围设定、并行化改造等。

    项目管理知识体系.ppt

    项目管理知识体系.ppt

    盾构机姿态与隧道中线自动化计算的Python实现及优化

    内容概要:本文详细介绍了如何利用Python进行盾构机姿态计算和隧道中线设计计算的自动化。首先,针对盾构机刀盘中心坐标的计算,提出了基于前后参考点距离的方法,并加入了异常值检测机制。其次,对于隧道中线的设计,采用三次样条曲线拟合,解决了控制点间距过大导致的“甩尾”现象。此外,文章还讨论了高程计算中的竖曲线处理方法,以及如何通过Pandas和Matplotlib实现自动报表生成和偏差分析。最后,强调了将工程经验转化为算法的重要性,旨在提高工作效率并减少人为错误。 适用人群:从事地铁隧道建设的技术人员、测量员、程序员及相关领域的研究人员。 使用场景及目标:适用于需要频繁进行盾构机姿态和隧道中线计算的工程项目,目标是提升计算效率和准确性,减轻工作人员负担,确保施工进度不受影响。 其他说明:文中提供了多个具体的Python代码片段,涵盖了从数据读取、处理到可视化的完整流程,为读者提供了一个完整的解决方案。同时,作者分享了许多实际应用中的经验和教训,帮助读者更好地理解和应用这些算法。

    计算机二级Word精选二十套(标红).jpg

    计算机二级Word精选二十套(标红)

    项目管理体系样本.doc

    项目管理体系样本.doc

    蓝桥杯单片机开发板测试视频.zip

    蓝桥杯

    一个本地DNS服务器,获取最快的网站IP,获得最佳上网体验,支持DoH,DoT

    SmartDNS 是一个运行在本地的 DNS 服务器,它接受来自本地客户端的 DNS 查询请求,然后从多个上游 DNS 服务器获取 DNS 查询结果,并将访问速度最快的结果返回给客户端,以此提高网络访问速度。 SmartDNS 同时支持指定特定域名 IP 地址,并高性匹配,可达到过滤广告的效果; 支持DOT,DOH,DOQ,DOH3,更好的保护隐私。 与 DNSmasq 的 all-servers 不同,SmartDNS 返回的是访问速度最快的解析结果。 支持树莓派、OpenWrt、华硕路由器原生固件和 Windows 系统等。

    基于S7-200 PLC和组态王的喷泉控制系统设计与实现

    内容概要:本文详细介绍了基于S7-200 PLC和组态王软件构建喷泉控制系统的全过程。首先明确了系统的IO分配,包括启动按钮、停止按钮以及喷泉水泵的连接方式。接着展示了梯形图程序的设计,涵盖了基本的启停控制逻辑、定时循环和模式切换机制。随后提供了详细的接线图原理图,解释了输入输出部分的具体接线方法。最后讲述了组态王的画面设计,包括创建工程、定义变量和绘制监控界面等步骤。此外还分享了一些调试过程中遇到的问题及解决方案。 适合人群:对自动化控制感兴趣的初学者和技术人员,尤其是那些希望深入了解PLC编程和人机界面设计的人群。 使用场景及目标:适用于小型喷泉项目的实际控制系统开发,旨在帮助读者掌握PLC编程技巧、熟悉组态软件的应用,并能够独立完成类似的自动化控制系统设计。 其他说明:文中不仅包含了理论知识讲解,还附带了许多实践经验分享,如硬件配置建议、常见错误规避措施等,有助于提高实际操作能力。

    DSP28335在线升级关键技术与实战经验分享:涵盖API使用、扇区划分、上位机开发及异常处理

    内容概要:本文详细介绍了DSP28335在线升级的关键技术和实践经验。首先,文章讲解了最小系统的构建以及MemCopy函数的作用,强调了Flash操作API的使用方法,包括初始化、扇区解锁与锁定、擦除和写入等步骤。接着,讨论了参数存储管理和CMD文件的编写要点,提出了双备份升级方案和增量升级的方法。同时,阐述了上位机通信协议的设计,包括帧结构、校验方式和数据传输的具体实现。此外,还探讨了常见的升级策略,如跳转式升级、镜像式升级和差分升级,并提供了详细的代码示例。最后,强调了异常处理的重要性,特别是针对断电情况的解决方案,如硬件看门狗和状态标记的使用。 适合人群:具有一定嵌入式开发基础的技术人员,尤其是熟悉DSP架构和C/C++编程的工程师。 使用场景及目标:适用于需要进行DSP28335在线升级的项目,帮助开发者避免常见错误,提高升级的成功率和可靠性。 其他说明:文中提供了大量实际操作中的注意事项和技巧,有助于读者更好地理解和应用相关技术。

    CDMA2000网络优化的研究毕业设计说明书.doc

    CDMA2000网络优化的研究毕业设计说明书.doc

    毕业设计说明书基于移动平台的外卖小助手设计与实现.doc

    毕业设计说明书基于移动平台的外卖小助手设计与实现.doc

Global site tag (gtag.js) - Google Analytics