【问题标题】:How to read a bounce back email details with Java mail API?如何使用 Java 邮件 API 读取退回邮件的详细信息?
【发布时间】:2021-06-25 01:32:38
【问题描述】:

我正在使用 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。我能够阅读以下内容:

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

但我无法在 Java 电子邮件 api 的帮助下阅读以下内容

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

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

【问题讨论】:

  • 退回邮件在RFC 6533 中定义,但并非所有服务器都遵循所有规则。查看退回邮件的 MIME 结构并尝试找到作为实际传递状态通知 (DSN) 的“附件”。准备好为不同类型的邮件服务器和配置执行此操作。

标签: java jakarta-mail amazon-ses


【解决方案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());


    }

【讨论】:

【解决方案2】:

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

考虑到 msg 是消息对象:

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

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

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

【讨论】:

  • 您好感谢您的建议我已经尝试过您的解决方案,但它不起作用。而不是标题,我发现诊断代码信息在正文部分内容中。
猜你喜欢
  • 2015-10-26
  • 1970-01-01
  • 2016-06-01
  • 1970-01-01
  • 2011-12-01
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
相关资源
最近更新 更多