利用javamail收取Hotmail的退信

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

时间: 2024-12-04 01:17:20

利用javamail收取Hotmail的退信的相关文章

用javamail收取hotmail的退信

Hotmail 是我最常用的Email Client.虽然时下hotmail的容量是小了些,速度也常常慢得让人不禁问候盖茨的母亲.但不可否认,它功能相当丰富,也比较稳定.尤其它的页面设计更是我等web编程人员的重要参照. 不象很多的POP3服务器,hotmail 实现了邮件传送状态通知(multipart/report).我以前写的邮件客户端只支持收取 multipart/related.multipart/alternative和multipart/mixed 等多媒体类型的邮件,其他的因为不

javamail收取Hotmail的退信_JSP编程

Hotmail 是我最常用的Email Client.虽然时下hotmail的容量是小了些,速度也常常慢得让人不禁问候盖茨的母亲.但不可否认,它功能相当丰富,也比较稳定.尤其它的页面设计更是我等web编程人员的重要参照. 不象很多的POP3服务器,hotmail 实现了邮件传送状态通知(multipart/report).我以前写的邮件客户端只支持收取 multipart/related.multipart/alternative和multipart/mixed 等多媒体类型的邮件,其他的因为不

javamail收取Hotmail的退信

JavaMailHotmail Hotmail 是我最常用的Email Client.虽然时下hotmail的容量是小了些,速度也常常慢得让人不禁问候盖茨的母亲.但不可否认,它功能相当丰富,也比较稳定.尤其它的页面设计更是我等web编程人员的重要参照. 不象很多的POP3服务器,hotmail 实现了邮件传送状态通知(multipart/report).我以前写的邮件客户端只支持收取 multipart/related.multipart/alternative和multipart/mixed

JavaMail访问Hotmail邮箱_JSP编程

相信许多人都有MSN聊天工具的帐号,例如abc@hotmail.com ,这个账号其实也是一个邮件地址,可以进行正常的邮件收发功能,你可以通过网址 http://www.hotmail.com 来访问和操作这个邮箱进行邮件的收发.但是这个邮箱有一个限制就是它并不提供POP3或者SMTP服务,也就是说一般的邮件客户端工具无法使用这个邮箱,虽然现在有不少的邮件工具可以支持Hotmail邮箱,但是如果我们需要在我们的Java项目中增加对Hotmail邮箱的支持,那往往会不知从什么地方开始入手,因为SU

通过JavaMail访问Hotmail邮箱

访问 相信许多人都有MSN聊天工具的帐号,例如abc@hotmail.com ,这个账号其实也是一个邮件地址,可以进行正常的邮件收发功能,你可以通过网址 http://www.hotmail.com 来访问和操作这个邮箱进行邮件的收发.但是这个邮箱有一个限制就是它并不提供POP3或者SMTP服务,也就是说一般的邮件客户端工具无法使用这个邮箱,虽然现在有不少的邮件工具可以支持Hotmail邮箱,但是如果我们需要在我们的Java项目中增加对Hotmail邮箱的支持,那往往会不知从什么地方开始入手,因

linux-关于postfix退信的问题。向外域发件一直发不出去

问题描述 关于postfix退信的问题.向外域发件一直发不出去 公网ip:120.1.2.3云服务器系统:centOS6.5WDcp控制面板域名:zenhuang.com 搞了一天只可以向本服务器的成员(例如:test@zenhuang.com)发送邮件能内外域收邮件但是不能向外域(例如:zenhuangzheng@126.com)发送邮件,会被退信,并且发回 This is the mail system at host mail.theglowrun.cn. I'm sorry to hav

退信:Email营销最大的障碍

如果你经营邮件列表并经常发送邮件内容,那么对于不断升高的邮件退信率一定有深刻印象.专业网络广告公司DoubleClick在最近发布的<Email趋势报告>显示,从2001年第三季度开始,邮件列表的退信率每个季度都在上升,到2002年第三季度,已经上升到12.6%的历史记录.根据DoubleClick的观点,电子邮件的退信率上升的主要原因在于同时发送的邮件太多.Email服务商缩减邮箱容量.经济状况引起人们工作变化增加而更换邮箱等. 如果退信率仅仅是保持在12.6%的"记录&quo

JavaMail访问Hotmail邮箱

JavaMailHotmail 相信许多人都有MSN聊天工具的帐号,例如abc@hotmail.com ,这个账号其实也是一个邮件地址,可以进行正常的邮件收发功能,你可以通过网址 http://www.hotmail.com 来访问和操作这个邮箱进行邮件的收发.但是这个邮箱有一个限制就是它并不提供POP3或者SMTP服务,也就是说一般的邮件客户端工具无法使用这个邮箱,虽然现在有不少的邮件工具可以支持Hotmail邮箱,但是如果我们需要在我们的Java项目中增加对Hotmail邮箱的支持,那往往会

收到postmaster附件被删除的退信

今天,朋友问我,他们公司MDamon的邮件服务器发送带有附件的邮件时,对方的邮件收到了,但是没有附件,我方收到了一封来自postmaster的系统退信,具体退信如下: 退信表明:***.zip的压缩包里有一个dsetreport.hta文件,MDaemon检测到***.hta是受限制的附件,采取了删除动作.进入 安全---内容过滤规则---附件 选项卡,默认情况下,MDaemon不允许*.hta类型的文件通过,并且默认检测zip附件中的受限制文件.如下图所示: 知道了原因,就好解决了.解决方法很