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

Kuc*_*chi 6 java email imap jakarta-mail

当我想查看谁使用JavaMail向我发送特定电子邮件时.

我可以用

Message.getFrom()
Run Code Online (Sandbox Code Playgroud)

返回一个

Message[]
Run Code Online (Sandbox Code Playgroud)

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

关于API,这对于传出的电子邮件更有意义.

我真的可以,那:

Address from = message.getFrom()[0];
Run Code Online (Sandbox Code Playgroud)

总是给我回到消息发送的1个地址?

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

Address[] fromAddress = message.getFrom();

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

Ale*_* K. 6

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

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

sender(这是有效的,因为如果有多个s ,RFC 需要单个标头from


sle*_*ske 5

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

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

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

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

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

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

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