1. Spring提供了一个实用的发送电子邮件库, 它为使用者屏蔽了邮件系统的底层细节和客户端的底层资源处理。

2. 依赖库: 使用Spring框架的邮件功能需要将JavaMail的Jar包添加到依赖中。

3. Spring邮件相关功能在spring-context-support-4.2.4.RELEASE.jar下的org.springframework.mail包中

4. 其中MailSender是发送邮件的核心接口, JavaMailSenderImpl是核心接口的重要实现类

5. 其中MailMessage是邮件的核心接口, SimpleMailMessage类是对邮件属性(发件人、收件人以等)进行简单的封装。

6. 例子

6.1. 创建一个名为SpringJavaMail的Java项目, 添加相关jar包

6.2. 添加几个文件

6.3. 在src目录下创建mail.properties

6.4. 在src目录下创建applicationContext.xml

6.5. 编辑SimpleMail.java

package com.zr.mail;import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;/*** 发送纯文本邮件*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SimpleMail {@Resource(name="javaMailSenderImpl")private JavaMailSenderImpl javaMailSenderImpl;@Testpublic void sendMail() {SimpleMailMessage templateMessage = new SimpleMailMessage();templateMessage.setFrom("xxxxxxxxxx@qq.com");templateMessage.setTo("ooooooooo@qq.com");templateMessage.setSubject("测试Spring中电子邮件");templateMessage.setText("SimpleMailMessage只能发送纯文字");javaMailSenderImpl.send(templateMessage);}}

7. 使用MimeMessageHelper

7.1. org.springframework.mail.javamail.MimeMessageHelper是一个处理JavaMail消息的好工具, 它屏蔽了很多JavaMail API的细节, 所以使用MimeMessageHelper可以很简便的创建一个MimeMessage。

JavaMailSenderImpl javaMailSenderImpl = new JavaMailSenderImpl();
MimeMessage message = javaMailSenderImpl.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
javaMailSenderImpl.send(message);

7.2. 邮件允许添加附件和内联资源。嵌入资源是你嵌入到邮件中的图片或样式,但又不希望显示为附件。

7.3. 嵌入资源需要使用contentId添加到MIME消息中。文本和嵌入资源添加是有顺序的, 需要按照先添加文本, 再添加嵌入资源的顺序。否则, 它将不会工作。邮件内容内嵌的图片addInline中的contentId要和邮件内容中的cid相对应。

MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setText("<html><body><img src='cid:ani_08' /><br />邮件包含文字、图片和文件</body></html>", true);
FileSystemResource res = new FileSystemResource(new File("config/ani_08.png"));
helper.addInline("ani_08", res);

7.4. 添加附件

MimeMessageHelper helper = new MimeMessageHelper(message, true);
MimeBodyPart file = new MimeBodyPart();
file.attachFile("config/ActiveMQ中文教程参考手册.pdf");
helper.getRootMimeMultipart().addBodyPart(file);

7.5. 编辑MailHelper.java

package com.zr.mail;import java.io.File;
import java.io.IOException;
import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;/*** 发送带图片和文件的邮件*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class MailHelper {@Resource(name="javaMailSenderImpl")private JavaMailSenderImpl javaMailSenderImpl;@Testpublic void sendMail() {try {MimeMessage message = javaMailSenderImpl.createMimeMessage();// 发送带附件和内联元素的邮件需要将第二个参数设置为trueMimeMessageHelper helper = new MimeMessageHelper(message, true);// 发送方邮箱和配置文件中的mail.username要一致helper.setFrom("xxxxxxxxxxx@qq.com");// 接收方helper.setTo("oooooooooooo@qq.com");// 主题helper.setSubject("测试Spring中电子邮件");// 邮件内容helper.setText("<html><body><img src='cid:ani_08' /><br />发送文本、图片和文件</body></html>", true);// 邮件内容内嵌的图片addInline中的contentId要和邮件内容中的cid相对应FileSystemResource res = new FileSystemResource(new File("config/ani_08.png"));helper.addInline("ani_08", res);// 邮件附件, JavaMail 1.6,2版本使用MimeBodyPart的attachFile方法才不会有中文乱码MimeBodyPart file = new MimeBodyPart();file.attachFile("config/ActiveMQ中文教程参考手册.pdf");helper.getRootMimeMultipart().addBodyPart(file);javaMailSenderImpl.send(message);} catch (MailException | MessagingException | IOException e) {e.printStackTrace();}}
}

8. 使用模板库创建电子邮件内容

8.1. 在简单的情况下, 像前面例子那样使用API就可以满足我们的需要了。

8.2. 在典型的企业应用程序中, 下面的原因让你不定会使用上面的方法创建你的邮件内容。

8.2.1. 在Java代码中创建HTML的电子邮件内容冗长, 且容易出错。

8.2.2. 呈现逻辑和业务逻辑混杂。

8.2.3. 更改电子邮件内容的展示结构需要编写Java代码, 重新编译, 重新部署。

8.3. 通常解决方法是使用模板框架定义电子邮件的呈现逻辑, 如FreeMarker。分离呈现逻辑和业务逻辑使得你的代码更清晰。当你的邮件的内容变的复杂时, 这绝对是一个最佳实践, 而且Spring框架对FreeMarker有很好的支持。

016_Spring中电子邮件相关推荐

  1. mysql 邮箱长度_数据库中电子邮件地址的最佳长度是多less?

    数据库中电子邮件地址的最佳长度是多less? 这里是我查询的一部分,反映了EMAIL_ADDRESS列的数据types和属性: EMAIL_ADDRESS CHARACTER VARYING(20) ...

  2. html中电子邮件怎么写,谈html mailto(电子邮件)实际应用

    大家知道,mailto是网页设计制作中的一个非常实用的html标签,许多拥有个人网页的朋友都喜欢在网站的醒目位置处写上自己的电子邮件地址,这样网页浏览者一旦用鼠标单击一下由mailto组成的超级连接后 ...

  3. html中电子邮件地址怎么写,什么是Email地址?怎么写

    什么是email地址 EMAIL地址中文名为电子邮件地址,电子邮件地址如真实生活中人们常用的信件一样,有收信人姓名,收信人地址等等.其结构是:用户名@邮件服务器,用户名就是你在主机上使用的登录名.而@ ...

  4. java验证电子邮件_Java字符串中电子邮件的简单易懂的验证

    我正在尝试找到一种简单的方法来检查用户输入的内容是否符合电子邮件地址的几个条件.我已经阅读了有关此主题的许多主题,并且大多数人似乎也希望验证电子邮件地址.我不是要建立一些超级骗子的电子邮件地址验证器/ ...

  5. 在html中电子邮件链接,关于电子邮件:与HTML正文的mailto链接

    我在HTML文档中有几个mailto链接. 我可以在href的mailto:部分插入HTML格式的正文吗? Mail me 注意,(2016)在iOS中,添加和标签可以非常好地实现简单的斜体.粗体格式 ...

  6. 如何在JavaScript中验证电子邮件地址

    如何在JavaScript中验证电子邮件地址? #1楼 与squirtle相比 ,这是一个复杂的解决方案,但是在正确验证电子邮件方面做得非常出色: function isEmail(email) { ...

  7. python如何读取weboutlook内容_用Python通过MAPI读取Outlook中的电子邮件

    我正在尝试编写一个简短的程序,该程序将读取exchange/Outlook配置文件中某个文件夹中电子邮件的内容,以便可以操作数据.但是,我在查找有关python和exchange/Outlook集成的 ...

  8. outlook电子邮件解析_如何在Outlook中的电子邮件中添加背景色或图像

    outlook电子邮件解析 Microsoft Outlook and other modern email clients have a lot of plain, white background ...

  9. sendmail发送html邮件,尝试使用sendmail发送/发送html电子邮件,但显示电子邮件的源代码...

    我试图在PHP中发送HTML电子邮件,但它始终显示电子邮件程序中电子邮件的源代码.但它应该将html电子邮件呈现为html,而不是将源代码显示为电子邮件内容.尝试使用sendmail发送/发送html ...

最新文章

  1. 小程序自定义分享事件及回调函数
  2. Chrome将于2016年4月终止对Windows XP的支持
  3. 冲向大牛之安卓---2014.11月面试经常碰到的一些问题
  4. 如何丢弃Git中未进行的变更?
  5. 入职阿里啦!极客时间kotlin
  6. C. Kefa and Park【树的遍历】
  7. Spring RESTful Web服务中的异常处理
  8. linux中输入ls出现蓝色的点,linux上ls的蓝色太深,怎么处理
  9. 网络聊天室的技术与发展
  10. c++ opencv 识别车牌_小强学Python+OpenCV之-1.0开篇
  11. LeetCode 303. 区域和检索 - 数组不可变(动态规划)
  12. How do I filtered TextBox with an Integer Data Type
  13. tomcat 启动报错 解决办法 A child container failed duringnbsp
  14. 学习记录:UI自动化断言那些内容
  15. pascal行人voc_Pascal Voc数据集详细分析
  16. Premiere Pro 中的键盘快捷键
  17. Ionic3.x 创建项目中的问题-IonIC start myApp tabs
  18. Win10如何启用Administrator账户
  19. ChatGPT讲故事,DALLE-2负责画出来!两大AI合作出绘本!
  20. 上了学这么久,我才知道他们为什么可以这么爽

热门文章

  1. jvm系列(十):如何优化Java GC「译」
  2. Laravel 5.1 artisan 的使用
  3. eclipse color theme 主题颜色
  4. RabbitMQ接触(二)
  5. MySQL学习笔记02-数据库概述及MySQL简介 .
  6. 置顶 | 2019学习单/读书单(dream a little dream)
  7. Windows远程桌面
  8. GEO数据下载及处理详细过程
  9. java:数据结构(二)栈的应用(进制转换全收集)
  10. 树结构(三)----线索二叉树