Java 一封邮件可以有多个发件人吗?

Java 一封邮件可以有多个发件人吗?,java,email,jakarta-mail,imap,Java,Email,Jakarta Mail,Imap,当我想检查谁用JavaMail向我发送特定电子邮件时 我可以用 Message.getFrom() 返回一个 Message[] 在什么情况下,恢复的消息可以具有来自多个身份 这对于发送电子邮件更有意义 那么我真的可以继续吗 Address from = message.getFrom()[0]; 总是只给我一个发邮件的地址 我现在实现了如下内容: Address[] fromAddress = message.getFrom(); if (fromAddress == null ||

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

我可以用

Message.getFrom()
返回一个

Message[]
在什么情况下,恢复的消息可以具有来自多个身份

这对于发送电子邮件更有意义

那么我真的可以继续吗

Address from = message.getFrom()[0];
总是只给我一个发邮件的地址

我现在实现了如下内容:

Address[] fromAddress = message.getFrom();

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

SMTP的
MAIL FROM
命令只允许一个地址,但是
FROM:
标头(IMF格式)不限于一个地址

RFC 5322,3.6.2。发起人字段: 消息的原始发件人字段包括发件人字段,..发件人字段包括字段名“发件人”和 一个或多个邮箱规范的逗号分隔列表


(这是因为RFC需要一个
发送方
头,如果存在来自s的多个

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

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

至于这是否可能发生:

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

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

一些垃圾邮件发送者显然使用多个
发件人:
邮件头发送邮件。这不符合标准,但显然有些邮件服务器仍然接受邮件。显然,这样做是为了通过邮件过滤器,通过
发件人:
地址进行过滤。垃圾邮件发送者包括多个地址,希望一个简单的过滤器能让邮件通过,如果它找到一个带有它喜欢的“发件人”地址的标题


总之:是的,您应该期望
Message.getFrom()
返回多个地址(或者根本不返回)。但是,您可能不需要花费大量精力来处理该案例。也许你甚至可以把它作为一个错误记录下来——这取决于你的应用程序。

文档显示它可以返回一个空数组。如果你想发送一条消息,但还没有设置它,这是有意义的。但是每个传入的消息都应该有一个来自它的标识。我不明白为什么一封电子邮件/消息应该有多个字段…在实践中零和一发生。现在,不止一个是垃圾邮件的必然迹象(这与上一个千年有所不同),所以只要确保你的代码在这种情况下不会崩溃,一切都会好起来。