随笔-86  评论-33  文章-0  trackbacks-0

                                                                       JAVAMAIL核心类介绍
JAVAMAIL(所需类包: mail.jar    activation.jar)
JavaMail API 核心类包括:Session,Address,Message,Authenticator,Transpor,Store,Folder.

1.javax.mail.Session
        Session类定义了与远程邮件系统通信的邮件会话(MailSession).JavaMail会话仅仅用于存储与服务器建立连接会话相关的逻辑Session类是JavaMail API最高层入口类。Session对象管理配置选项行和用于与邮件系统交互的用户认证信息,它使用Java.util.Properties对象配置邮件会话的属性,如邮件服务器,用户名,密码及整个应用程序中共享的其它信息。(Session本身并不处理任何授权操作,他只是存储这些授权的信息)
        Session类的构造器是私有的,他不能被继承。他有两个静态方法:getInstance 和getDefaultInstance来获取Session实例,前者创建的不能被其它JVM共享的会话实例,后者创建的可以被其它JVM共享的会话实例。
       Session实例使用的属性
    mail.transport.protocol   邮件传输的协议,getProtocol()方法时返回默认传入协议
    mail.smtp.host                  使用的默认主机
    mail.smtp.port                   主机使用的端口           25
    mail.user                            未指定用户时,传输和存储使用的默认用户           User.name
    mail.from                            发送者的邮件地址
    mail.store.protocol           存储协议,getStore()方法返回默认的存储协议
    mail.protocol.host            替代指定协议的mail.host
    mail.protocol.user            替代指定协议的mail.user
    mail.debug                        用于调试会话
    mail.smtp.auth                  true/false  邮件服务器是否要验证

Properties props  =   new  Properties();
    
// 设置邮件会话的属性
    props.put( " mail.transport.protocol " , " smtp " );
    props.put(
" mail.smtp.host " , " smtp.usish.com " );
    props.put(
" mail.smtp.port " , " 25 " );
        props.put("mail.smtp.auth","true");
    
// 获得邮件会话对象
    mailSession  =  Session.getDefaultInstance(props); // 不使用认证
    mailSession  =  Session.getDefaultInstance(props,authenticator); // 使用认证

2.javax.mail.Authenticator
              
Session.getDefaultInstance(props,authenticator) 创建会话时使用Authenticator对象以进行认证,如果传入null对象,那么和不使用认证的调用方式一致。
              Authenticator代表一个可以为网络连接获取认证信息的对象,它通常通过提示用户输入用户名和密码来收集认证信息,使连接可以访问受保护的资源。首先创建Authenticator的一个子类,并且在会话对象创建时为会话注册该Authenticator对象。

public   class  PopupAuthenticator  extends  Authenticator{
      String username
= null ;
      String password
= null ;
      
public  PopupAuthenticator(){}
      
      
public  PopupAuthenticator(String name,String pwd){
      username 
=  name;
      password 
=  pwd;
      getPasswordAuthentication();
      }
      
protected  PasswordAuthentication getPasswordAuthentication() {
        
return   new  PasswordAuthentication(username, password);
      }
      
}


使用这个验证类

    PopupAuthenticator authenticator  =   new  PopupAuthenticator( " envoydada " , " dada " );
    mailSession 
=  Session.getDefaultInstance(props,authenticator); // 使用认证

3.javax.mail.Address
 
Address类表示电子邮件地址,它是一个抽象类,当要表示多个地址时可以用逗号隔开。
       最经常使用的子类是:javax.mail.internet.InternetAddress提供具体实现,且通常可串行化。如果创建地址只包含电子邮件地址,只要传递电子邮件地址到构造器即可。
//带其它信息的地址
InternetAddress addr = new InternetAddress();
addr.setAddress(
"derek_g@usish.com");
addr.setPersonal(
"derek Guo");

//带多MAIL地址
Address[] addrs = InternetAddress.parse("derek_g@usish.com,envoydada@126.com");

4.javax.mail.Message
       获得Session对象后,可以继续创建要发送的邮件消息,这由Message类来完成。Message实现了Part接口,它表示一个邮件消息,包含一系列属性和一个消息的内容。Message是抽象类,实际使用时必须用一个子类代替以表示集体的邮件格式。如子类javax.mail.internet.MimeMessage , 实现了RFC822和MIME标准。Message子类通常通过字节流构建其实现。
      创建Message的两个构造方法:       
Message message = new MimeMessage(Session session);
MimeMessage message 
= new MimeMessage(MimeMessage message);

获得message之后,可以设置消息的各个部分
      msg.setFrom(new InternetAddress(from));//设置发件人
      msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));//设置收件人
      msg.setRecipients(Message.RecipientType.CC,InternetAddress.parse(cc));//设置抄送人
      msg.setRecipients(Message.RecipientType.BCC,InternetAddress.parse(bcc));//设置暗送人
      msg.setSentDate(d);//设置发邮件的签名时间
      msg.setSubject(subject);//设置邮件主题      
      
//msg.setText(content);//纯文本发送text/plain表示纯文本,默认
      msg.setContent("<meta http-equiv=Content-Type content=text/html; charset=utf-8>邮件测试内容","text/html;charset=utf-8");//html格式发送

5.javax.mail.Transport
         消息发送Transport类。该类使用指定协议发送消息(通常是SMTP)。Transport是抽象类(继承自Service类)提供很多通用方法,如命名传输、连接服务器和监听传输事件等。
         Transport.send(message);  发送邮件。
         还可以进一步控制消息发送:
   
    Transport transport = session.getTransport("smtp");
    transport.connect( (String) props.get(
"mail.smtp.host"), username,password);
    transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO));
    transport.close();

6.javax.mail.Store
        Store是一个抽象类,它模拟了消息存储器及其内部目录(Folder)访问协议,以存储和读取消息,其子类提供具体实现。
        Store定义的存储器包括一个分层的目录体系,消息存储在目录内,。客户程序可以通过获取一个实现了数据库访问协议的Store对象来访问消息存储器,绝大多数存储器要求用户在访问前提供认证信息,connect方法执行了该认证过程。
     Store store = session.getStore("pop3");//指定协议
     store.connect(host,usename,password);//

7.javax.mail.Folder
   Folder是一个抽象类,用于分级组织邮件,其子类提供针对具体协议的实现。
  Folder代表的目录可以容纳消息或子目录,存储在目录内的消息被顺序计数(从1开始到消息总数),该顺序被称为“邮箱顺序”,通常基于邮件消息到达目录的顺序。邮件顺序的变动将改变消息的序列号,这种情况仅发生在客户程序调用Expunge方法擦除目录内设置了Flags.Flag.DELETED标志位的消息时。执行擦除操作后,目录内消息将重新编号。
       客户程序可以通过消息序列号或直接通过相应的Message对象应用目录中的消息,由于消息序列号在会话中很可能改变,因此应尽可能保存Message对象而非序列号来反复引用对象。
       连接到Store之后,接下来可以获取一个文件夹(Folder)。该文件夹必须先使用open()方法打开,然后才能读取里面的消息:
  
Folder folder = store.getDefaultFolder();
//或 : Folder folder = store.getFolder("inbox");
folder.open(Folder.READ_WRITE);
Message message[] 
= folder.getMessage();
        open()方法指定了要打开的文件夹及打开方式(如Folder.READ_WRITE)。 inbox是POP3唯一可以使用的文件夹。如果使用IMAP,还可以用其它的文件夹。
         获得Message之后,就可以用getContent()获得其内容,或者用writeTo()将内容写入输出流。getContent()方法之能得到消息内容,而writeTo()的输出却包含消息头.
      读完邮件之后要关闭与Folder和Store的连接:
folder.close(aBoolean);
store.close();
posted on 2006-03-23 14:08 Derek.Guo 阅读(960) 评论(0)  编辑  收藏 所属分类: Java

只有注册用户登录后才能发表评论。


网站导航:
 
MSN:envoydada@hotmail.com QQ:34935442