JavaMail入门:创建纯文本、HTML格式的邮件

转自:http://haolloyin.blog.51cto.com/1177454/353849/

在 http://java.sun.com/products/javamail/ 下载了 JavaMail 1.4.3 版本,如果所用 JDK 是 6.0 则不用再下载 activation 。下载得到的是 javamail-1.4.3.zip 的压缩包,解压得到 mail.jar 包,配置环境变量之后就可以使用了。从解压后的文件夹中有 JavaMail-1.4.pdf 这个 JavaMail 的设计规范文档。虽然是英文,但是稍微看一看我就从中截了 4 张比较有用的图片,觉得有必要了解一下,如下:

1、JavaMail 架构层次图:

2、JavaMail 的类层次图:

3、JavaMail 中几个最重要类的类图:

4、MimeMessage 类的具体类图:

JavaMail 文档有时间慢慢理解,使用 JavaMail 开发邮件应用程序可以参考解压之后的 JavaMail 开发文档,下面用代码实现创建一个纯文本格式的邮件:

纯文本格式的邮件:

  1. import java.io.FileOutputStream;
  2. import java.util.Date;
  3. import java.util.Properties;
  4. import javax.mail.Message;
  5. import javax.mail.Session;
  6. import javax.mail.internet.InternetAddress;
  7. import javax.mail.internet.MimeMessage;
  8. /**
  9. * 创建纯文本格式的邮件,保存为Outlook 的 ".eml" 邮件格式
  10. * @author haolloyin
  11. */
  12. public class TextMessage {
  13. public static void main(String[] args) throws Exception{
  14. String from = "[email protected]";
  15. String to = "[email protected]";
  16. String subject = "创建一个纯文本邮件!";
  17. String body = "纯文本邮件测试!!!";
  18. // 创建该邮件应用程序所需的环境信息以及会话信息
  19. Session session = Session.getDefaultInstance(new Properties());
  20. // 根据上面的 Session 实例创建 MimeMessage 实例,即一封邮件
  21. MimeMessage msg = new MimeMessage(session);
  22. // 设置发件人地址
  23. msg.setFrom(new InternetAddress(from));
  24. // 设置收件人地址
  25. msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
  26. // 设置 E-mail 主题
  27. msg.setSubject(subject);
  28. // 设置发送时间
  29. msg.setSentDate(new Date());
  30. // 设置 E-mail 正文部分
  31. msg.setText(body);
  32. // 必须保存对该 MimeMessage 实例的更改
  33. msg.saveChanges();
  34. // 将 msg 对象中内容写入当前文件的textMail.eml文件中
  35. msg.writeTo(new FileOutputStream("textMail.eml"));
  36. }
  37. }

编译运行,得到 textMail.eml 文件,双击自动用 Outlook 打开,如下图:

单击 Outlook 中的“文件”—> “属性”—> “详细信息”可看到该邮件的邮件头,再点击“邮件来源”可看到该邮件的源文件内容,如下图:

注意上面被选择的内容,Content-Transfer-Encoding: base64 说明是被用 BASE64 编码转换过的了,因此邮件的正文部分如下图:

因为邮件中的 subject 和 body 都用到了中文,所以字符集编码时 charset=GBK 。

 HTML 格式的邮件:

再用同样的方式创建一封 HTML 格式的邮件,对上面的代码稍作修改即可,代码如下:

  1. import java.io.FileOutputStream;
  2. import java.util.Date;
  3. import java.util.Properties;
  4. import javax.mail.Message;
  5. import javax.mail.Session;
  6. import javax.mail.internet.InternetAddress;
  7. import javax.mail.internet.MimeMessage;
  8. /**
  9. * 创建 HTML 格式的邮件,保存为 Outlook 的 ".eml" 文件
  10. * @author haolloyin
  11. */
  12. public class HtmlMessage {
  13. public static void main(String[] args) throws Exception{
  14. String from = "[email protected]";
  15. String to = "[email protected]";
  16. String subject = "创建一个 HTML 格式邮件!";
  17. String body = "<h4>HTML 格式的邮件测试!!!</h4> " +
  18. "<a href = http://haolloyin.blog.51cto.com/> 蚂蚁</a>";
  19. // 创建该邮件应用程序所需的环境信息以及会话信息
  20. Session session = Session.getDefaultInstance(new Properties());
  21. // 根据上面的 Session 实例创建 MimeMessage 实例,即一封邮件
  22. MimeMessage msg = new MimeMessage(session);
  23. // 设置发件人地址
  24. msg.setFrom(new InternetAddress(from));
  25. // 设置收件人地址
  26. msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
  27. // 设置 E-mail 主题
  28. msg.setSubject(subject);
  29. // 设置发送时间
  30. msg.setSentDate(new Date());
  31. // 设置 E-mail 正文部分
  32. //      msg.setText(body);
  33. msg.setContent(body, "text/html;charset = gbk");
  34. // 保存对该 MimeMessage 实例的更改
  35. msg.saveChanges();
  36. // 将 msg 对象中内容写入文件
  37. msg.writeTo(new FileOutputStream("htmlMail.eml"));
  38. }
  39. }

注意上面代码中的 msg.setContent(body, "text/html;charset = gbk");  语句,双击生成的文件自动用 Outlook 打开,如下图:

我们注意到编码方式变成了 quoted-printable ,它与 BASE64 编码类似,都是将纯粹的二进制数据转换成可以打印的 ASCII 字符,具体的区别和用途请查阅资料。

目前的还不可以给指定的邮箱发送邮件,只是创建一封邮件而已。

小结:

1、了解 MIME 协议以及 MIME 邮件的组织结构对理解上面给出的类图很有帮助;

2、如果邮件的 subject 和 body 都不涉及中文,那么整封邮件都不会被转码,而是用最原始的 7bit 编码格式,可以试一试看一下效果。

我的相关文章:

图解使用Telnet程序手工发送邮件

简单的E-mail发送端程序的Java实现

图解使用telnet程序手工接收邮件及其过程

时间: 2024-08-28 16:38:53

JavaMail入门:创建纯文本、HTML格式的邮件的相关文章

[Java] JavaMail 发送带图片的 html 格式的邮件

JavaMail 发送的邮件正文和附件是相互独立的,但是内置图片需要定位图片在正文中的位置,所以内置图片和邮件正文是互相依赖的. 发送带附件的邮件可参考JavaMail 发送 html 格式.带附件的邮件. 发送纯文本的邮件可参照 JavaMail 简单案例. 具体例子 EmailHelper, Email 的帮助类,向帮助类提供 SMTP 服务器域名.用户名.密码.发送人邮箱.收件人邮箱.邮件主题.html 格式的内容.图片的路径,便可发送一份内置图片的邮件.在创建 MimeMultipart

使用mina当服务器进行纯文本消息或多媒体消息加密会话

首先,对于mina的基本使用这里就不多说了,之前已经转载了一篇很详细的说明.这次想分享的是使用mina框架自定义编解码器,实现发送纯文本和非纯文本消息,带PBE加密. 首先定义要发送的信息包,之前一直想用mina进行图片语音,短视频的传送,把多媒体信息封装成一个类,纯文本文件封装成一个类.然后使用多路分离解码器,虽然这种方法可行,但是发送和接收都直接跳过了handler这层.到最后处理业务逻辑很不方便. 然后尝试值使用一种格式的信息类,消息类型只有是纯文本或非纯文本的标识.一个String类型,

JavaMail入门第二篇 创建邮件

JavaMail API使用javax.mail.Message类来表示一封邮件,Message类是一个抽象类,所以我们需要使用其子类javax.mail.internet.MimeMessage类来创建Message类的实例对象,如果我们创建的是一个简单文本邮件,那么MimeMessage类就可以满足我们的需求了,但是如果需要创建一封包含内嵌资源或者是带附件的复杂邮件,则需要使用到JavaMail API中的MimeMessage.javax.mail.internet.MimeBodyPar

Excle只允许用户输入纯文本,禁止用户修改单元格样式、格式等

背景:自己的模板给别人,让他填完信息上传到系统里,但别人经常不按模板的格式来填写,导致无法程序自动化.能不能在模板上把格式锁住,只允许输入纯文本,但不能改格式? 方法: 步骤一,创建你要的模板 其中,总票房 单元格格式为"千分位数值"型,平均票价,场均人次 为小数位数为0的"数值"型,上映日期 为"日期"型: 步骤二.设置Ctrl+V粘贴动作默认只粘贴纯文本 另存工作簿为 xlsm格式(启用宏的工作簿): Alt+F11打开宏编辑器,插入->

js文件在IDEA中没有了格式,显示的是纯文本的解决办法

添加个Patterns就行了,名字为*.js js文件在IDEA中没有了格式,显示的是纯文本的解决办法

james+javamail入门

James+Javamail构建邮件服务(一) 本文描述如何使用James搭建具备一定邮件过滤.邮件操作功能的邮件服务器,以及使用Javamail实现对James服务器邮件的收发功能. 1关于James与Javamail Apache James(Java Apache Mail Enterprise Server)是Apache组织的子项目之一,完全采用纯Java技术开发,实现了SMTP.POP3与NNTP等多种邮件相关协议.James是一个 邮件应用平台,可以通过Mailet扩充其功能,如M

纯文本抽出程序库DMC TEXT FILTER

因需而生,红樱枫为文本转换市场领航 --纯文本抽出程序库DMC TEXT FILTER,从需求中把握平衡 在高度数字化的今天,数字图书馆已经成为很多人查询资料的有效途径.然而即使在畅通的宽带搜寻中一样会出现堵塞,可恨的是这种堵塞可能并不是网络造成的,而是出于个人电脑的软件配置.就读国际关系学院的研究生韩小姐颇有感触:"在查找资料时,面对繁多的数据格式,由于手头的工具太少,大量的文件无法打开,只好望而兴叹."据了解,有韩小姐这种想法的用户不在少数. 广泛需求,催熟应用市场 对症下药,红樱

【ASP.NET Core】从向 Web API 提交纯文本内容谈起

前些时日,老周在升级“华南闲肾回收登记平台”时,为了扩展业务,尤其是允许其他开发人员在其他平台向本系统提交有关肾的介绍资料,于是就为该系统增加了几个 Web API. 其中,有关肾的介绍采用纯文本方式提交,大概的代码是这样的. [Route("api/[controller]/[action]")] public class PigController : Controller { [HttpPost] public string KidneyRemarks([FromBody]str

TaskPaper for Mac(纯文本待办事项列表)

TaskPaper for Mac特别版是一款非常实用的纯文本待办事项列表,软件类似系统自带的文本编辑器,具有快速的添加任务,大纲的功能.TaskPaper Mac可以帮助您创建项目列表及其任务,以便您始终了解需要执行的操作,重新组织列表,创建新项目,将项目标记为已完成以及删除已完成的项目非常简单. 彻底现代化.TaskPaper 3是全新的,同时保留了自2006年以来一直有效的原始纯文本基础. 主要特征 纯文本文件; 随处编辑类型和您的列表是自动格式化的组织项目:, - 任务,备注和@tags