消息可以有多个发件人吗?

时间:2014-01-31 12:46:04

标签: java email javamail imap

当我想查看谁使用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
}

2 个答案:

答案 0 :(得分:5)

是的,似乎Message.getFrom()可以真正返回多个地址。

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

至于是否会发生这种情况:

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

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

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

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

答案 1 :(得分:2)

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

  

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

(这是有效的,因为RFC需要一个sender标头,因为有多个from s)