JavaMail的体系结构及发送复杂邮件

转载地址 : http://blog.csdn.net/t12x3456/article/details/7636701

一 . 电子邮件传输的全过程:

  

二 . JavaMail 的体系结构与API分类

JavaMail API按其功能划分通常可分为如下三大类:
创建和解析邮件内容的API :Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。 
发送邮件的API:Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议。 
接收邮件的API:Store类是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。
Session类 
Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。

三.JavaMail文件包组成讲解


以上是官网对几个jar包的说明,翻译如下:

javax.mail.jar  这个包里面包含了下面三种协议的提供者 就是如果想在程序使用到所有的协议 只需要导入这一个包

javax.mail-api.jar  这个包只包含了一些基本的类 只适合编译 编译的时候不会不错 没有包含任何一种协议 使用时根据程序使用到的协议按需导入相应的以下三种协议报

mailapi.jar  这个包和上面那个包一样 也是没有包含任何协议,但是和以下三种协议的其中一种合用

smtp.jar  这个是SMTP协议具体的实现者 

imap.jar  这个是IMAP协议具体的实现者

pop3.jar  这个是POP3协议具体的实现者

gimap.jar  这个是IMAP协议具体的实现者 同时主要是面向Gmail邮箱 实现Gmail邮箱中一些特殊特性

dsn.jar  这个是对含有推送状态消息的邮件的支持

四. 邮件发送的过程:

四.使用JavaMail发送一封带图片和附件的复杂邮件:

 

邮件组织结构相关的API:

 

MimeMessage类表示整封邮件。
MimeBodyPart类表示邮件的一个MIME消息。
MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。

 

复杂邮件的结构图:

 

 

 

发送邮件步骤;

  1. 搭建开发环境:准备发送邮件相关jar包:

 mail.jar
 activation.jar(JAF):(可选的,如果JDK6.0+,则不需要此包)

 2. 编写代码实现,如下:

  

[java]  view plain copy
  1. package com.itheima;  
  2.   
  3. import java.io.FileOutputStream;  
  4. import java.util.Properties;  
  5.   
  6. import javax.activation.DataHandler;  
  7. import javax.activation.FileDataSource;  
  8. import javax.mail.Authenticator;  
  9. import javax.mail.Message;  
  10. import javax.mail.PasswordAuthentication;  
  11. import javax.mail.Session;  
  12. import javax.mail.Transport;  
  13. import javax.mail.internet.InternetAddress;  
  14. import javax.mail.internet.MimeBodyPart;  
  15. import javax.mail.internet.MimeMessage;  
  16. import javax.mail.internet.MimeMultipart;  
  17. //实现自己向自己发送一封复杂邮件  
  18. public class SendMessage {  
  19.   
  20.     public static void main(String[] args) throws Exception{  
  21.         Properties props = new Properties();//环境变量  
  22.         props.setProperty("mail.host""smtp.163.com");  
  23.         props.setProperty("mail.transport.protocol""smtp");  
  24.         props.setProperty("mail.smtp.auth""true");  
  25.         Session session = Session.getInstance(props,new Authenticator() {  
  26.             @Override  
  27.             public PasswordAuthentication getPasswordAuthentication() {  
  28.                 return new PasswordAuthentication("laotian""123");  
  29.             }  
  30.         });  
  31.         session.setDebug(true);//开始调试:监控smtp协议  
  32.         Transport ts = session.getTransport();  
  33.         ts.connect("smtp.163.com""laotian""123");//连接邮件发送服务器  
  34.         //创建代表邮件的对象MimeMessage  
  35.         MimeMessage message = new MimeMessage(session);  
  36.         message.setSubject("tttttttt");  
  37.         message.setFrom(new InternetAddress("laotian@163.com"));  
  38.         message.setRecipient(Message.RecipientType.TO, new InternetAddress("laotian@163.com"));  
  39.         //分别创建邮件的每部分内容,设置类型,有id的设置id。MimeBodyPart  
  40.         MimeBodyPart part1 = new MimeBodyPart();  
  41.         part1.setContent("aaa<img src='cid:mm'/>aaa""text/html");  
  42.           
  43.         MimeBodyPart part2 = new MimeBodyPart();  
  44.         //jaf:DataHandler能自动感知文件的类型 images/jpeg  
  45.         DataHandler dh = new DataHandler(new FileDataSource("d:/2.jpg"));  
  46.         part2.setDataHandler(dh);  
  47.         part2.setContentID("mm");  
  48.         //描述各部分之间的关系MimeMultiPart  
  49.         MimeMultipart multi = new MimeMultipart();  
  50.         multi.addBodyPart(part1);  
  51.         multi.addBodyPart(part2);  
  52.         multi.setSubType("related");//描述关系  
  53.         //加到MimeMessage中  
  54.         message.setContent(multi);  
  55.         message.saveChanges();  
  56.           
  57.         ts.send(message,message.getAllRecipients());  
  58.     }  
  59.   
  60. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值