如何使用Java mail API阅读退回电子邮件详细信息?

时间:2017-12-17 15:34:49

标签: java javamail

我正在使用Java mail API在我的Gmail ID上阅读来自Amazon SES的退回电子邮件。

这是我从Amazon SES收到退回电子邮件的方式。

<email content start>

An error occurred while trying to deliver the mail to the following recipients:
bounce@simulator.amazonses.com
Action: failed
Final-Recipient: rfc822; bounce@simulator.amazonses.com
Diagnostic-Code: smtp; 550 5.1.1 user unknown
Status: 5.1.1



---------- Forwarded message ----------
From: fullstack.rahultokase@gmail.com
To: bounce@simulator.amazonses.com
Cc: 
Bcc: 
Date: Sun, 17 Dec 2017 15:27:30 +0000
Subject: bounce@simulator.amazonses.com
bounce@simulator.amazonses.com

<email content end>

我的问题是使用Java电子邮件API。我能够阅读内容:

An error occurred while trying to deliver the mail to the following recipients:
bounce@simulator.amazonses.com

但是我无法借助Java email api

阅读以下内容
Action: failed
Final-Recipient: rfc822; bounce@simulator.amazonses.com
Diagnostic-Code: smtp; 550 5.1.1 user unknown
Status: 5.1.1

如何阅读电子邮件中的上述内容?

2 个答案:

答案 0 :(得分:1)

诊断代码信息是消息内容的一部分,可以使用以下代码读取。

MimeMessage payload = (MimeMessage) message.getPayload();
    Multipart mp = (Multipart) payload.getContent();
    for (int i = 0; i < mp.getCount(); i++) {
                        BodyPart bodyPart = mp.getBodyPart(i);
                        StringWriter writer = new StringWriter();
                        IOUtils.copy(bodyPart.getInputStream(), writer);
                        System.out.println("Content inputstream: " +  writer.toString());


    }

答案 1 :(得分:0)

您要查找的信息(操作,最终收件人,诊断代码,状态)在邮件的标题中设置,您可以通过

获取

考虑到msg是消息对象:

  ... 
  final String[] diagnostics = msg.getHeader("Diagnostic-Code"); 

  for (String dx_code : diagnostics) {
     System.out.print(dx_code);
  }
  ...

第二个值(在示例中为diagnostics[1])将包含错误代码,指示它是否是硬反弹550(例如电子邮件地址不存在),还是软反弹450(例如,收件箱已满)