如果传递给此函数的文本超过内部 16 KB 缓冲区 (源代码中的 SENDBUFLEN),则此函数会导致 PHP 致命错误。
我还没有深入研究,但将输入文本限制在 16,384 个字符以内仍然会导致我们服务器上的一种错误情况,但将边界缩减至 12,000 则解决了问题。
大多数现实世界中的邮件头都远小于 4 KB。
(PHP 4, PHP 5, PHP 7, PHP 8)
imap_rfc822_parse_headers — 解析来自字符串的邮件头
获取包含各种邮件头元素的对象,类似于 imap_header().
headers
解析的邮件头数据
default_hostname
默认主机名
返回一个类似于 imap_header() 返回的对象,除了来自 IMAP 服务器的标志和其他属性。
如果传递给此函数的文本超过内部 16 KB 缓冲区 (源代码中的 SENDBUFLEN),则此函数会导致 PHP 致命错误。
我还没有深入研究,但将输入文本限制在 16,384 个字符以内仍然会导致我们服务器上的一种错误情况,但将边界缩减至 12,000 则解决了问题。
大多数现实世界中的邮件头都远小于 4 KB。
我正在稍微探查这个函数的行为。
它处理 rfc882 字段
date
subject
message_id
to
from
reply-to
sender - 如果没有在
头
references
in-reply-to
cc
不处理 rfc882 字段
return-path
received
resent - 我认为此字段可能已过时
keywords
如果函数还有其他 rfc822 字段或行为,那么我无法说明,因为它们不在我的测试范围内。
由于它与我目前正在做的事情相关,我可能会不时添加更多关于此函数的信息。
此函数被 c-client 库标记为内部函数,不应直接由 php 使用。
请注意,结果始终包含消息中未设置的字段。例如,reply_to 和 sender 始终会被设置,即使消息中没有定义 Reply-To 和 Sender 头字段。
从 imap_rfc822_parse_headers 获取的对象与从 imap_headerinfo/imap_header 获取的对象在以下方面有所不同。您将不会获得
* flags
* msgno
* size
* Maildate
* udate
* fetchfrom
* fetchsubject
udate 可以使用以下方法模拟
$headerobj=imap_rfc822_parse_headers ($header);
$udate=strtotime($headerobj->date);
但是您将获得一个完整的 To 字段,即按照 RFC 822 中针对长头字段的规范展开。因此,如果您想用此函数替换 imap_headerinfo(),则可以在 imap_fetchheader() 上运行它。