zoukankan      html  css  js  c++  java
  • 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 架构层次图:

    JavaMail03

    2、JavaMail 的类层次图:

    JavaMail04

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

    JavaMail01

    4、MimeMessage 类的具体类图:

    JavaMail02

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

    纯文本格式的邮件:

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

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

    TextMail

     image 

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

    image

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

    image

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

     HTML 格式的邮件:

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

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

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

    image

    image

    image

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

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

    小结:

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

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

    我的相关文章:

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

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

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

  • 相关阅读:
    2. Add Two Numbers
    1. Two Sum
    22. Generate Parentheses (backTracking)
    21. Merge Two Sorted Lists
    20. Valid Parentheses (Stack)
    19. Remove Nth Node From End of List
    18. 4Sum (通用算法 nSum)
    17. Letter Combinations of a Phone Number (backtracking)
    LeetCode SQL: Combine Two Tables
    LeetCode SQL:Employees Earning More Than Their Managers
  • 原文地址:https://www.cnblogs.com/x_wukong/p/4432420.html
Copyright © 2011-2022 走看看