Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java mail API读取回退电子邮件的详细信息?_Java_Jakarta Mail - Fatal编程技术网

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

如何使用Java mail API读取回退电子邮件的详细信息?,java,jakarta-mail,Java,Jakarta Mail,我正在使用Java邮件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: rfc8

我正在使用Java邮件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的帮助下阅读以下内容

Action: failed
Final-Recipient: rfc822; bounce@simulator.amazonses.com
Diagnostic-Code: smtp; 550 5.1.1 user unknown
Status: 5.1.1

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

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

考虑到msg是消息对象:

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

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

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

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

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());


    }
MimeMessage负载=(MimeMessage)message.getPayload();
Multipart mp=(Multipart)payload.getContent();
对于(int i=0;i
中定义了跳出消息,但并非所有服务器都遵守所有规则。查看反弹消息的MIME结构,并尝试查找“附件”,即实际的传递状态通知(DSN)。为不同类型的邮件服务器和配置做好准备。另请参阅。您好,谢谢您的建议,我尝试了您的解决方案,但它不起作用。我发现车身部件的内容中没有标题,而是包含诊断代码信息。您能查看一下吗?
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());


    }