JavaMail入门:创建纯文本、HTML格式的邮件
2016-06-23 22:49
591 查看
在 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 开发文档,下面用代码实现创建一个纯文本格式的邮件:
纯文本格式的邮件:
import java.io.FileOutputStream;
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* 创建纯文本格式的邮件,保存为Outlook 的 ".eml" 邮件格式
* @author haolloyin
*/
public class TextMessage {
public static void main(String[] args) throws Exception{
String from = "test_hao@sina.cn";
String to = "test_hao@163.com";
String subject = "创建一个纯文本邮件!";
String body = "纯文本邮件测试!!!";
// 创建该邮件应用程序所需的环境信息以及会话信息
Session session = Session.getDefaultInstance(new Properties());
// 根据上面的 Session 实例创建 MimeMessage 实例,即一封邮件
MimeMessage msg = new MimeMessage(session);
// 设置发件人地址
msg.setFrom(new InternetAddress(from));
// 设置收件人地址
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
// 设置 E-mail 主题
msg.setSubject(subject);
// 设置发送时间
msg.setSentDate(new Date());
// 设置 E-mail 正文部分
msg.setText(body);
// 必须保存对该 MimeMessage 实例的更改
msg.saveChanges();
// 将 msg 对象中内容写入当前文件的textMail.eml文件中
msg.writeTo(new FileOutputStream("textMail.eml"));
}
}
编译运行,得到 textMail.eml 文件,双击自动用 Outlook 打开,如下图:
单击 Outlook 中的“文件”—> “属性”—> “详细信息”可看到该邮件的邮件头,再点击“邮件来源”可看到该邮件的源文件内容,如下图:
注意上面被选择的内容,Content-Transfer-Encoding: base64 说明是被用 BASE64 编码转换过的了,因此邮件的正文部分如下图:
因为邮件中的 subject 和 body 都用到了中文,所以字符集编码时 charset=GBK 。
HTML 格式的邮件:
再用同样的方式创建一封 HTML 格式的邮件,对上面的代码稍作修改即可,代码如下:
import java.io.FileOutputStream;
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* 创建 HTML 格式的邮件,保存为 Outlook 的 ".eml" 文件
* @author haolloyin
*/
public class HtmlMessage {
public static void main(String[] args) throws Exception{
String from = "test_hao@sina.cn";
String to = "test_hao@163.com";
String subject = "创建一个 HTML 格式邮件!";
String body = "<h4>HTML 格式的邮件测试!!!</h4> " +
"<a href = http://haolloyin.blog.51cto.com/> 蚂蚁</a>";
// 创建该邮件应用程序所需的环境信息以及会话信息
Session session = Session.getDefaultInstance(new Properties());
// 根据上面的 Session 实例创建 MimeMessage 实例,即一封邮件
MimeMessage msg = new MimeMessage(session);
// 设置发件人地址
msg.setFrom(new InternetAddress(from));
// 设置收件人地址
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
// 设置 E-mail 主题
msg.setSubject(subject);
// 设置发送时间
msg.setSentDate(new Date());
// 设置 E-mail 正文部分
// msg.setText(body);
msg.setContent(body, "text/html;charset = gbk");
// 保存对该 MimeMessage 实例的更改
msg.saveChanges();
// 将 msg 对象中内容写入文件
msg.writeTo(new FileOutputStream("htmlMail.eml"));
}
}
注意上面代码中的 msg.setContent(body, "text/html;charset = gbk"); 语句,双击生成的文件自动用 Outlook 打开,如下图:
我们注意到编码方式变成了 quoted-printable ,它与 BASE64 编码类似,都是将纯粹的二进制数据转换成可以打印的 ASCII 字符,具体的区别和用途请查阅资料。
目前的还不可以给指定的邮箱发送邮件,只是创建一封邮件而已。
小结:
1、了解 MIME 协议以及 MIME 邮件的组织结构对理解上面给出的类图很有帮助;
2、如果邮件的 subject 和 body 都不涉及中文,那么整封邮件都不会被转码,而是用最原始的 7bit 编码格式,可以试一试看一下效果。
我的相关文章:
图解使用Telnet程序手工发送邮件
简单的E-mail发送端程序的Java实现
图解使用telnet程序手工接收邮件及其过程
本文出自 “蚂蚁” 博客,请务必保留此出处http://haolloyin.blog.51cto.com/1177454/353849
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 开发文档,下面用代码实现创建一个纯文本格式的邮件:
纯文本格式的邮件:
import java.io.FileOutputStream;
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* 创建纯文本格式的邮件,保存为Outlook 的 ".eml" 邮件格式
* @author haolloyin
*/
public class TextMessage {
public static void main(String[] args) throws Exception{
String from = "test_hao@sina.cn";
String to = "test_hao@163.com";
String subject = "创建一个纯文本邮件!";
String body = "纯文本邮件测试!!!";
// 创建该邮件应用程序所需的环境信息以及会话信息
Session session = Session.getDefaultInstance(new Properties());
// 根据上面的 Session 实例创建 MimeMessage 实例,即一封邮件
MimeMessage msg = new MimeMessage(session);
// 设置发件人地址
msg.setFrom(new InternetAddress(from));
// 设置收件人地址
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
// 设置 E-mail 主题
msg.setSubject(subject);
// 设置发送时间
msg.setSentDate(new Date());
// 设置 E-mail 正文部分
msg.setText(body);
// 必须保存对该 MimeMessage 实例的更改
msg.saveChanges();
// 将 msg 对象中内容写入当前文件的textMail.eml文件中
msg.writeTo(new FileOutputStream("textMail.eml"));
}
}
编译运行,得到 textMail.eml 文件,双击自动用 Outlook 打开,如下图:
单击 Outlook 中的“文件”—> “属性”—> “详细信息”可看到该邮件的邮件头,再点击“邮件来源”可看到该邮件的源文件内容,如下图:
注意上面被选择的内容,Content-Transfer-Encoding: base64 说明是被用 BASE64 编码转换过的了,因此邮件的正文部分如下图:
因为邮件中的 subject 和 body 都用到了中文,所以字符集编码时 charset=GBK 。
HTML 格式的邮件:
再用同样的方式创建一封 HTML 格式的邮件,对上面的代码稍作修改即可,代码如下:
import java.io.FileOutputStream;
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* 创建 HTML 格式的邮件,保存为 Outlook 的 ".eml" 文件
* @author haolloyin
*/
public class HtmlMessage {
public static void main(String[] args) throws Exception{
String from = "test_hao@sina.cn";
String to = "test_hao@163.com";
String subject = "创建一个 HTML 格式邮件!";
String body = "<h4>HTML 格式的邮件测试!!!</h4> " +
"<a href = http://haolloyin.blog.51cto.com/> 蚂蚁</a>";
// 创建该邮件应用程序所需的环境信息以及会话信息
Session session = Session.getDefaultInstance(new Properties());
// 根据上面的 Session 实例创建 MimeMessage 实例,即一封邮件
MimeMessage msg = new MimeMessage(session);
// 设置发件人地址
msg.setFrom(new InternetAddress(from));
// 设置收件人地址
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
// 设置 E-mail 主题
msg.setSubject(subject);
// 设置发送时间
msg.setSentDate(new Date());
// 设置 E-mail 正文部分
// msg.setText(body);
msg.setContent(body, "text/html;charset = gbk");
// 保存对该 MimeMessage 实例的更改
msg.saveChanges();
// 将 msg 对象中内容写入文件
msg.writeTo(new FileOutputStream("htmlMail.eml"));
}
}
注意上面代码中的 msg.setContent(body, "text/html;charset = gbk"); 语句,双击生成的文件自动用 Outlook 打开,如下图:
我们注意到编码方式变成了 quoted-printable ,它与 BASE64 编码类似,都是将纯粹的二进制数据转换成可以打印的 ASCII 字符,具体的区别和用途请查阅资料。
目前的还不可以给指定的邮箱发送邮件,只是创建一封邮件而已。
小结:
1、了解 MIME 协议以及 MIME 邮件的组织结构对理解上面给出的类图很有帮助;
2、如果邮件的 subject 和 body 都不涉及中文,那么整封邮件都不会被转码,而是用最原始的 7bit 编码格式,可以试一试看一下效果。
我的相关文章:
图解使用Telnet程序手工发送邮件
简单的E-mail发送端程序的Java实现
图解使用telnet程序手工接收邮件及其过程
本文出自 “蚂蚁” 博客,请务必保留此出处http://haolloyin.blog.51cto.com/1177454/353849
相关文章推荐
- JavaMaill:使用MIME协议创建内含图片的复杂邮件
- 答疑java初学者常见问题
- JavaMail:创建内含附件、图文并茂的邮件
- Ubuntu下无法安装sun-java6-jdk的解决办法
- java调用exe并且获取返回值的例子
- 开源公司黄页 关于/ 阿里巴巴的50款开源软件[大部分为Java语言]
- 精选30道Java笔试题解答
- Java Swing简单控件实例(JButton,JLabel,JMenuBar,JComboBo)
- JavaMail:邮件发送以及sina、163、QQ服务器不同的解析结果
- Java线程池--ThreadPoolExecutor
- Eclipse上安装springsource-tool-suite
- Eclipse Neon发布!
- java mail使用qq邮箱发邮件的配置方法
- Eclipse java swing 开发环境
- 04.Java 集合 - Stack
- 《Java小游戏实现》:坦克大战(最后一点附加功能的实现)
- 03.Java 集合 - Vector
- spring的IOC原理
- Eclipse字体设置方式总结
- Spring AOP原理解析