【问题标题】:Can a Message have multiple senders?一条消息可以有多个发件人吗?
【发布时间】:2014-02-24 04:03:21
【问题描述】:

当我想使用 JavaMail 检查谁向我发送了特定的电子邮件时。

我可以使用

Message.getFrom()

返回一个

Message[]

在什么情况下,复活的消息可以有多个身份?

关于API,这对于外发电子邮件更有意义。

那么我真的可以说:

Address from = message.getFrom()[0];

总是准确地返回 1 个发送邮件的地址?

我现在已经实现了类似的东西:

Address[] fromAddress = message.getFrom();

if (fromAddress == null || fromAddress.length > 1) {
    // Don't Process the Email and Notify me
}

【问题讨论】:

  • 文档显示它可以返回一个empty数组。
  • 如果您想发送消息但尚未设置,这是有道理的。但是每个传入的消息都应该有一个它来自的身份。我不明白为什么一封电子邮件/消息应该有多个 From 字段...
  • 在实践中发生了零和一。如今,不止一个是垃圾邮件的明确迹象(在上个千年不同),所以只要确保你的代码在这种情况下不会崩溃,一切都会好起来的。

标签: java email jakarta-mail imap


【解决方案1】:

是的,看来Message.getFrom()真的可以返回多个地址。

我查看了 Apache Geronimo 的 JavaMail API 实现的源代码,如果有多个 From: 标头,或者一个标头中有多个地址,它将返回多个地址。

至于这是否会发生:

正如 Alex K. 的回答所解释的,如果只有一个“发件人”,该标准允许多个“发件人”地址。我不知道是否真的有人发送带有多个“发件人”地址的邮件,但它是符合标准的。

实践中实际发生的另一种情况:

一些垃圾邮件发送者显然会发送带有多个 From: 标头的邮件。这不符合标准,但显然一些邮件服务器仍然接受邮件。这显然是为了通过From: 地址过滤的邮件过滤器。垃圾邮件发送者包含多个地址,希望头脑简单的过滤器在找到一个带有“发件人”地址的标头时让邮件通过。

总而言之:是的,您应该期望Message.getFrom() 返回多个地址(或根本不返回)。但是,您可能不需要花费大量精力来处理这种情况。也许您甚至可以直接将其记录为错误 - 这取决于您的应用程序。

【讨论】:

    【解决方案2】:

    SMTP 的 MAIL FROM 命令仅允许 1 个地址,但 From: 标头(IMF 格式)不限于单个地址

    RFC 5322, 3.6.2。发起人字段: 消息的发起者字段由 from 字段组成,... from 字段由字段名称“From”和 一个或多个邮箱规范的逗号分隔列表。

    (这是有效的,因为如果有多个 froms,RFC 需要一个 sender 标头)

    【讨论】:

      猜你喜欢
      • 2020-01-04
      • 2016-10-27
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      相关资源
      最近更新 更多