PHP Conference Japan 2024

imap_fetchheader

(PHP 4, PHP 5, PHP 7, PHP 8)

imap_fetchheader返回邮件的报头

描述

imap_fetchheader(IMAP\Connection $imap, int $message_num, int $flags = 0): string|false

此函数将获取指定邮件的完整、未过滤的 » RFC2822 格式报头。

参数

imap

一个 IMAP\Connection 实例。

message_num

邮件编号

flags

可能的 flags

  • FT_UID - message_num 参数是一个 UID
  • FT_INTERNAL - 返回字符串采用“内部”格式,不会尝试规范化为 CRLF 换行符
  • FT_PREFETCHTEXT - RFC822.TEXT 应同时预取。如果需要完整邮件文本(例如在“保存到本地文件”操作中),这可以避免在 IMAP 连接上进行额外的 RTT

返回值

返回指定邮件的报头作为文本字符串,或在失败时返回 false

变更日志

版本 描述
8.1.0 imap 参数现在需要一个 IMAP\Connection 实例;以前需要一个有效的 imap 资源

参见

添加注释

用户贡献的注释 2 条注释

7
rgagnon24 dot nospam at gmail dot com
14 年前
有趣的是,imap_headerinfo() 不允许像其他所有获取函数那样为 $msg_number 字段使用 UID。

如果要使用 UID 获取报头,请使用此两步过程

<?php
/*
* 假设 $mbox 是您的流,并且 $uid 设置
* 正确。正确的错误检查取决于您。
*/
$hText = imap_fetchbody($mbox, $uid, '0', FT_UID);
$headers = imap_rfc822_parse_headers($hText);
?>

结果与 imap_headerinfo() 的输出相同,但您可以使用 UID。
3
Jille at nomorecrap dot quis dot cx
16 年前
<?PHP
$headers
=imap_fetchheader($imap, $msgid);
preg_match_all('/([^: ]+): (.+?(?:\r\n\s(?:.+?))*)\r\n/m', $headers, $matches);
?>

非常适合分割报头,
$matches 将包含 3 个数组
$matches[0] 是完整行 (To: [email protected]\r\n)
$matches[1] 将是报头 (To)
$matches[2] 将是值 ([email protected])

在多行值中,“多行不会被去除!”
这可以通过类似以下内容实现
<?PHP
preg_replace
('/\r\n\s+/m', '', $matches[2]);
?>
To Top