如何用JavaMail API识别退信通知?Gmail与IBM Domino邮件头差异
判断IBM Domino退信的邮件头标识
x-failed-recipient这个头不通用,IBM Domino环境下不会自动添加它,别指望靠这个识别Domino退信。- Domino退信有自己专属的标识,推荐优先检查这些邮件头:
Reporting-MTA:Domino生成的退信里,这个字段的值一般会包含domino字样或者Domino服务器的域名,比如Reporting-MTA: dns;domino01.company.com。Diagnostic-Code:退信里会明确给出错误码,比如收件人不存在时会是smtp;550 User unknown,这是判断退信的核心依据之一。X-Domino-Report:部分Domino版本会添加这个头,直接表明这是Domino生成的退信报告,识别起来更直接。
- 用JavaMail API实现判断的简单示例:
// 假设已获取到MimeMessage对象msg String reportingMTA = msg.getHeader("Reporting-MTA", null); String diagnosticCode = msg.getHeader("Diagnostic-Code", null); String dominoReportHeader = msg.getHeader("X-Domino-Report", null); boolean isBounceMail = false; // 多条件组合判断,提高准确率 if ((reportingMTA != null && reportingMTA.toLowerCase().contains("domino")) || (diagnosticCode != null && diagnosticCode.contains("550 User unknown")) || dominoReportHeader != null) { isBounceMail = true; } - 补充:如果邮件头判断拿不准,也可以结合邮件正文——Domino退信正文里通常会有"Unable to deliver mail to"这类明确提示,但邮件头的可靠性比正文高,优先用头判断。
内容的提问来源于stack exchange,提问作者Manish Chauhan
相关产品推荐
相关产品推荐

