无法读取 java 中已发送邮件的 BCC 字段

Unable to read BCC field of sent mails in java

我在从收到的邮件中提取密件抄送地址时遇到一个问题。 这是使用的示例代码。

 public EmailVO dumpEnvelope(Message m) throws Exception {
             EmailVO emailVO = new EmailVO();
        if ((addresses = m.getRecipients(Message.RecipientType.BCC)) != null) {
            emailVO.setBcc(this.getAddresses(addresses, "BCC"));
        }
}

我在密件抄送中收到空值。 调试时,我在 header 字段中找到了 BCC 收件人的姓名,但我无法访问该 header。 是这个代码问题还是在发送邮件时有一些特定的设置,比如不包括密件抄送字段?

addresses = m.getRecipients(Message.RecipientType.BCC);

returns 地址数组。您可以在 for 循环中检查内容:

Address[] addresses = m.getRecipients(Message.RecipientType.BCC);
for(Address address : addresses){
    System.out.println(address);
}

Bcc 的全部意义在于它是一个 抄送 - 收件人看不到谁被抄送了。您不会在收到的邮件中看到密件抄送字段。 (有时密件抄送的收件人会在他们收到的邮件中看到密件抄送 header,但其他收件人会收到一份没有密件抄送的邮件副本。但我认为很多邮寄者不再这样做,因为它需要发送消息的两个不同版本。)

您可以查看您的消息 object,其中包含有关邮件的所有详细信息。 由于 BCC 是邮件的一部分,但它也会被隐藏,但据我所知,您可以从邮件中检索信息 headers.

Address[] addresses = m.getHeader("Your Header Name HERE");

这将为您提供有关邮件中特定 header 标签的所有详细信息。

例如

Address[] addresses = m.getHeader("Delivered-To"); 

此标签将为您提供有关邮件收件人的所有信息,其中还包括密件抄送。

您还可以为邮件添加自定义 header。