我正在尝试阅读退回电子邮件的状态标头。 This site更好地解释了我正在尝试的内容......
原始电子邮件由多个MultiParts对象组成,因此我在java代码中阅读:
private void test(MimeMessage message) throws IOException, MessagingException {
if (message.getContent() != null && message.getContent() instanceof Multipart) {
Multipart content = (Multipart) message.getContent();
for (int i = 0; i < content.getCount(); i++) {
BodyPart bodyPart = content.getBodyPart(i);
Enumeration headers = bodyPart.getAllHeaders();
while(headers.hasMoreElements()){
Header header = (Header) headers.nextElement();
LOGGER.info("Header: " + header.getName() + " value: " + header.getValue());
}
}
}
}
我正在分析的电子邮件部分:
内容描述:发送报告内容类型:text / plain; charset = utf-8 Content-Transfer-Encoding:7bit
报告-MTA:dns; someLink.com X-Postfix-Queue-ID:EC862F00D0 X-Postfix-Sender:rfc822; receiver@email.com抵达日期:2013年8月7日星期三 13:52:43 +0200(CEST)
最终收件人:rfc822; noexisting@email.com 原始收件人:rfc822; noexisting@email.com行动: 失败状态:5.1.1 Remote-MTA:dns; [somelink.com 诊断代码:smtp; 550-5.1.1您尝试过的电子邮件帐户 伸手可及 不存在。请尝试550-5.1.1仔细检查收件人的电子邮件 拼写错误的地址或550-5.1.1不必要的空格。
在我的日志文件中,我只能看到3个第一个标题:
> Header: Content-Description value: Delivery report
> Header: Content-Type value: text/plain; charset=us-ascii INFO
> Header: Content-Transfer-Encoding value: 7bit
有谁知道为什么?我怎么能得到状态标题?感谢
答案 0 :(得分:0)
我无法在标题中找到状态信息,我将从内容中获取它。它不是一个优雅的解决方案,但至少它的工作原理。 如果有人找到更好的,请告诉我!
Java代码:
StringWriter writer = new StringWriter();
IOUtils.copy(bodyPart.getInputStream(), writer);
LOGGER.info("Content inputstream: " + writer.toString());
日志:
内容输入流:报告-MTA:dns; srvvie-mx3.styria-multi-media.com X-Postfix-Queue-ID:2A1A8F00CF X-Postfix-Sender:rfc822; 抵达日期:2013年8月9日星期五 11:14:02 +0200(CEST)
最终收件人:rfc822; MAILER-DAEMON@domain.com 原始收件人:rfc822; MAILER-DAEMON@domain.com 操作:失败状态:5.1.1 Remote-MTA:dns; 诊断代码:smtp; 550 5.1.1邮箱 不存在