java mail讲解

邮件服务器按照提供的服务类型,可以分为发送协议类型和接受服务器类型。发送邮件服务器使用邮件发送协议,
现在常用的是SMTP,所以通常发送邮件的服务器也常叫做SMTO服务器。接受服务器使用邮件接受协议,常用的有
POP3和IMAP协议,所以通常称为POP3服务器或IMAP服务器。

   SMTP (Simple Mail Transfer Protocol),即简单邮件传输协议,是Internet传送E-mail的基本协议,也是TCP/IP
协议组的成员。SMTP协议解决邮件系统如何通过一条链路,把邮件从一台及其传送到另一台机器上的额问题。SMTP服务
器的特点是具有良好的可伸缩性,即适用于局域网,也适用于广域网。下面是它的简单过程:
     客户邮件首先到达邮件发送服务器,再由发送服务器负责传送到接受方的服务器。。发送邮件前,发送服务器会于接
收方服务器联系,以确认接收方服务器是否己准备好接收邮件。如果已经准备好,则传送邮件;如果没有准备好,发送
服务器会等待,并在一段时间后继续于接收方服务器进行联系。若在规定的事件联系不上,发送服务器会发送一个消息到
客户的邮箱说明这个情况。

   POP3 (Post Office Protocol 3)邮局协议第三版,是Internet接收邮件的基本而协议,也是TCP/IP协议组的成员。
POP3既允许接收服务器向邮件用户发送邮件,也可以接收来自SMTP邮件服务器的邮件。特点是快速,经济和方便。
下面是发送过程:
     用户通过自己所熟悉的邮件客户端软件,如Foxmail,Outlook Express和the Bat等,经过相应的参数设置(主要是
设置POP3邮件服务器的IP地址或者域名,用户名及口令)后,只要选择接收邮件操作,就能够ioujiang远程邮件服务器
的所有邮件下载到用户的本地硬盘上。下载了邮件后,用户就可以阅读本地有就爱你,并且可以删除服务器上的邮件。

    IMAP (Internet Message Access Protocol),互联网消息访问协议,是一种功能比POP3更强大的新的接收邮件协议。
除了与POP3一样的功能,它还有一下功能:
     1.摘要浏览邮件的功能。允许用户先阅读邮件的该要信息,瑞邮件的而到达事件,主题,发件人和大小然后再决定是否
下载邮件
     2.选择性下载附件的功能,如果一封邮件有5个附件,其中只有连个是用户需要的,那么用户接可以只下载那两个附件,
节省了下载其余三个附件的时间。
     3.鼓励用户把邮件一直存储在邮件服务器上。用户可以在服务器上建立任意层次结构的油价夹,并且可以灵活的邮件
夹之间移动邮件。
     4.允许用户把远程邮件服务器上的邮箱作为信息存储工具。
   
     MIME(Multipurpose Internet Mail Extensions,多用途Internet邮件扩充标准)不是邮件传输协议,而是对邮件格式
所做的格式规范。MIME可以将发信人电子邮件中的文本以及各种附件都打包后发送,传送时即时编码,收信人的软件收到
邮件后也是即时解码还原。

    JavaMail API主要位于javax.mail和javax.mail.internet中
  
    1.javax.mail.Session类
  
    Session类表示邮件会话,是JavaMail API的最高层入口类。Session对象从java.util.Properties对象中获取配置
信息,如邮件发送服务器的主机名或IP地址,接受邮件的协议,发送邮件的协议,用户名,口令以及整个应用程序中共享
的其他信息。

    2.javax.mail.Store类
  
    Store类表示接受邮件服务器上注册用户的存储空间,通过Store类的getFolder()方法,可以访问用户的特定邮件夹。
  
    3.javax.mail.Folder类
  
    Folder类代表邮件夹,邮件都放在邮件夹中,Folder类提供了管理邮件夹以及邮件的各种方法。
  
    4.javax.mail.Message类
  
    Message类代表电子邮件。Message类提供了读取和设置邮件内容的方法。邮件主要包含如下内容:
       地址信息,包括发件人地址,收件人地址列表,抄送地址列表和广播地址列表;
       邮件标题;
       邮件发送和接受日期;
       邮件正文(包括纯文本和附件);
     
       Message是一个抽象类,常用的具体类是Javax.mail.internet.MimeMessage。MimeMessage是符合MIME规范的
       电子邮件。
     
   5.javax.mail.Address类
  
    Address了哦代表邮件地址,和Message类一样,Address类也是一个抽象类。常用的具体之类为
    javax.mail.internet.InternetAddress类。
  
  
   6.javax.mail.Transport类
  
    Transport类根据指定的邮件发送协议(通常是SMTP),通常指定的邮件发送服务器来发送邮件。Transport类是抽象类
它的静态方法send(Message)负责发送邮件。

    需要从 http://java.sun.com/products/javamail/downloads/index.html 下载最新的JavaMail API的类库文件,
需要里面的mail.jar文件另外还要从 http://java.sun.com/products/javabeans/glasgow/jaf.html 下载JavaBeans
Activation Framework(JavaBean激活框架)的类库文件。JavaMail API的实现依赖于JavaBean激活框架,需要里面
activation.jar文件。如果我们使用J2EE的话,那么我们并无需单独下载JavaMail,因为它存在于J2EE.jar中,只需
将J2EE.jar加入到CLASSPATH即可。


JavaMail应用程序在初始化过程中需要设置JavaMail属性:
      Properties props = new Properties();
      props.put("mail.transport.protocol", "smtp");    //指定邮件发送协议
      props.put("mail.store.protocol", "imap");        //指定邮件接收协议
    
      //指定支持SMTP协议的Transport具体类,允许第三方提供
      props.put("mail.smtp.class", "com.sun.mail.smtp.SMTPTransport");
    
      //指定支持IMAP协议的Store具体类,允许第三方提供
      props.put("mail.imap.class", "com.sun.mail.imap.IMAPStore");
    
      //指定采用SMTP协议的邮件发送服务器的IP地址或主机名
      props.put("mail.smtp.host", smtphost);
    
如果程序采用SUN提供的JavaMail API的某人参考实现,那么前面四个属性可以不用设置,只需设置mail.smtp.host

      //表示SMTP服务器需要身份验证。
      props.put("mail.smtp.auth","true");
    1.调用javax.mail.Session类的静态方法Session.getDefaultInstance()获得Session实例。
              Session mailsession=Session.getDefaultInstance(props);
              mailsession.setDebug(true);//设置输出日志,默认不输出
            
    2.调用Session的getStore(String protocol)方法来获得Store对象,protocol指定接收邮件协议
              Store store=mailsession.getStore("imap");
            
    3.调用Stroe对象的connect()方法连接到接收邮件服务器,指定主机或IP地址,用户名和口令。
              store.connect(hostname,username,password);
            
    4.打开inbox邮件夹收取邮件,inbox邮件夹是IMAP中保留邮件夹,用户不允许删除该邮件夹,邮件服务器把所有接收到
的新邮件都存放到该邮件夹中。
               Folder folder=store.getFolder("inbox");
               folder.open(Folder.READ_ONLY);
               folder.getMessageCount();//邮件数目
               folder.getUnreadMessageCount();//未读邮件数目
             
    5.从邮件夹中读取邮件
               //获取第一封邮件
               Message msg=folder.getMessage(1);
               //获得发送者
               msg.getForm()[0];
               //获得主题
               msg.getSubject();
               //获得正文
               msg.getText();

使用中发现出现javax.mail.AuthenticationFailedException,原来是因为我 使用的是网易的邮箱,网易的现在新注册的邮箱已经不提供smtp服务了,所以不管你是jMail还是用outlook都无法验证。好像sina的也是这样 的。我自己配了一个james服务器,可以参看 java mail例子

网上的资料也很多

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值