我正试图通过PHP从电子邮件标题中读取请求读取回执和优先级标题。
imap_header
似乎只显示选择标题。下面的邮件标题应该但不包括我正在寻找的两个标题。。。
stdClass Object (
[date] => Tue, 30 Jul 2013 18:11:26 -0700 (MST)
[Date] => Tue, 30 Jul 2013 18:11:26 -0700 (MST)
[subject] => Return
Request Receipt + High Priority Test
[Subject] => Return Request
Receipt + High Priority Test
[in_reply_to] => <__@mrmail.com>
[message_id] => <__@mrmail.com>
[toaddress] => __@example.com [to] =>
Array (
[0] => stdClass Object (
[mailbox] => __ [host] => example.com
)
)
[fromaddress] => Someone <__@mrmail.com>
[from] =>
Array (
[0] =>
stdClass Object (
[personal] => Someone
[mailbox] => example
[host] => mrmail.com
)
)
[reply_toaddress] => Someone <__@mrmail.com>
[reply_to] =>
Array (
[0] => stdClass Object (
[personal] => Someone
[mailbox] => __
[host] => mrmail.com
)
)
[senderaddress] => Someone <__@mrmail.com>
[sender] =>
Array (
[0] => stdClass Object (
[personal] => Someone
[mailbox] => example
[host] => mrmail.com
)
)
[Recent] =>
[Unseen] => U
[Flagged] =>
[Answered] =>
[Deleted] =>
[Draft] =>
[Msgno] => 69
[MailDate] => 30-Jul-2013 19:18:03 -0600
[Size] => 2719
[udate] => 1375233483
那么,我在PHP中使用什么函数来遍历ALL标头呢?
想清楚了,下面的数组返回所有标题,为其他人发布。。。
[edit]已更新,以便检查可能多次出现的标头,并添加一个包含其值的数组。$unlimited
阵列从https://www.rfc-editor.org/rfc/rfc5322#section-3.6.[/edit]
<?php
$th = imap_fetchheader($mbox,$cms->page2);
$th = trim($th);
$th = str_ireplace("r","n",$th);
$th = str_ireplace("nn","n",$th);
$p0 = explode("n",$th);
$current = '';
$unlimited = array('comments','keywords','optional-field','resent-bcc','resent-cc','resent-date','resent-from','resent-msg-id','resent-sender','resent-to','trace');
$headers = array();
foreach ($p0 as $k1)
{
$k1 = rtrim($k1);
$a = $k1;
$b = trim($k1);
if ($a!==$b)
{
$p1 = trim($k1);
if (in_array($current,$unlimited)) {array_push($headers[strtolower($current)],$p1);}
else {$headers[strtolower($current)] .= $p1;}
}
else if (stristr($k1,':'))
{
$p1 = explode(':',$k1,2);
if (in_array(strtolower($p1[0]),$unlimited))
{
if (!isset($headers[strtolower($p1[0])])) {$headers[strtolower($p1[0])] = array($p1[1]);}
else {array_push($headers[strtolower($current)],$p1[1]);}
}
else
{
if (!isset($headers[strtolower($p1[0])])) {$headers[strtolower($p1[0])] = $p1[1];}
else {$headers[strtolower($p1[0])] .= $p1[1];}
}
$current = $p1[0];
}
}
ksort($headers);//Mainly for testing purposes, remove this afterwards.
echo '<div><pre>';
$a = print_r($headers,1);
echo htmlspecialchars($a).'</pre></div>';
?>