首  页
站长信箱
868搜索
网站登录
免费计数器
免费留言本
IP来源查询
网站技术教程
网站流量统计
文章探索:   分类:    关键字:  
    什么?你还在找兼职?上兼客吧,现在兼客吧平台太火了,知名度和诚信度也很高,注册就送0.5元现金,满3元就能提现,马上到账了!最低3元就能提现,大家可以注册下试试!注册地址:http://www.jiankeba.com/computeryc1688
  + 栏目导航
  + 相关文章
如何在JBOSS(免费的EJB server)..
利用javamail收取Hotmail的退信
Java桌面端程序开发
Java程序设计基础入门
Java代码编写30条建议
Java教程_线程入门

技术教程 -> JAVA教程 ->  
利用javamail收取Hotmail的退信
来源:转载   人气:3140   录入时间:2006/3/2


      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邮箱》。
   



| 网站转让 | 站长信箱 | 网站登录 | 技术教程 | 免费计数器 | 免费留言本 | 868流量统计 | 好帮手网站营销 |
地址:广东省阳江市  联系电话:13725641179 杨先生
Copyright 2004-2019 868资源网- 版权所有    粤ICP备05007330号