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