资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 编程开发 >
Advertisement
文章正文

用javamail收取hotmail的退信 _编程

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   
  • Java与XML(三)web上的读写应用  
  • Web层改进II-用xmlhttp 无声息提交复杂表单  
  • DBUnit在应用间导出导入数据  
  • RMI、CORBA、IIOP简单实例--2. CORBA  
  • 第一个Hibernate程序  
  • 第二章 统一建模语言UML简介  
  • Tiger系列五:访问环境变量和调用子进程  
  • Struts的心酸往事  
  • 在JBOSS,TOCMAT上部署J2EE应用  
  • 如何编写不可维护的代码  
  • 页面导航:

    正文内容:
     hotmail 是我最常用的email client。虽然时下hotmail的容量是小了些,速度也常常慢得让人不禁问候盖茨的母亲。但不可否认,它功能相当丰富,也比较稳定。尤其它的页面设计更是我等web编程人员的重要参照。
     不象很多的pop3服务器,hotmail 实现了邮件传送状态通知(multipart/report)。我以前写的邮件客户端只支持收取 multipart/related、multipart/alternative和multipart/mixed 等多媒体类型的邮件,其他的因为不常见,我都忽略了。
     客户不答应了,那还有什么好说的,还有什么比让客户满意更重要的事情呢,在没买单之前。
     
     multipart/report 邮件类型的介绍参见 rfc1892,sun的中文 javamail faq  里也有相关的说明,我摘录如下:

     问. 当消息不能被传送时,就会返回一个失败消息。我如何检测这些“回弹”消息?
     答:虽然有一个 internet 标准用于报告这样的错误(multipart/report mime 类型,参阅 rfc1892),但还没有广泛实现它。rfc1211 深入讨论了这个问题,包括了大量的例子。
     在 internet 电子邮件中,特定的邮箱或用户名是否存在,只能由传送消息的最终服务器决定。消息可能通过几个中继服务器(它们不能检测错误),然后再到达最终服务器。通常,当最终服务器检测到这一错误,它会返回一个消息给原始消息的发送人,指出失败的原因。有许多 internet 标准讨论了这种传送状态通知 (delivery status notifications),但大量服务器不支持这些新标准,相反使用特别技术来返回这种错误消息。这使得将“回弹”消息与产生问题的原始消息相互关联起来非常困难(注意,这个问题与 javamail 完全无关)。
     有许多技术和试探法用于处理这一问题,但它们都不是完美的。一种技术是 variable envelope return paths,
    http://cr.yp.to/proto/verp.txt 描述了这一技术。

     
    我修改了程序,也只是作了些简单的处理,代码如下:
     private void parsemultipart(multipart multipart) throws exception {
      for (int i = 0, n = multipart.getcount(); i < n; i++) {
      bodypart part = multipart.getbodypart(i);
      string disposition = part.getdisposition();

      if (part.ismimetype("multipart/*")) {
       this.parsemultipart((multipart) part.getcontent());
      } else if (part.ismimetype("text/html")) {
      //处理文本内容
      } 
     /*******  处理附件,图片等等 ********/
      } else if (part.ismimetype("message/delivery-status")) {
       part.setfilename("details.txt");  //仿照outlook,details.txt 内容即传送状态通知的邮件头信息
       saveattachedfile(part);
      } else if (part.ismimetype("message/rfc822")) {
       mimebodypart mbp = new mimebodypart(part.getinputstream());
       part.setfilename(mbp.getheader("subject", null) + ".eml"); //仿照outlook,用退件的标题做文件名
       saveattachedfile(part);
      } 
     }
      } 
     
     如果要做得更友好,还可以做很多改进,比如根据退信找出已发送文件夹中的原件,或者激发一个通知事件等等。客户并不需要,我还是不要自作多情了。
     大家都知道,hotmail 不是用pop3协议收信,而是用webdav协议。用java收发 hotmail 的邮件 ,参见《通过javamail访问hotmail邮箱》。



     

     
    热门推荐笔记本: IBM笔记本
    相关文章:
    webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
    ©2007 popbb.net All Rights Reserved