此函数忽略了一些报头值具有多行的事实...
<?php
$connection = @imap_open("{localhost:143/imap}INBOX", "your_username", "your_password");
$header = explode("\n", imap_fetchheader($connection, 1));
if (is_array($header) && count($header)) {
$head = array();
foreach($header as $line) {
if (eregi("^X-", $line)) {
eregi("^([^:]*): (.*)", $line, $arg);
$head[$arg[1]] = $arg[2];
}
}
}
?>
我写了这个简单的函数....
$mbox = imap_open("{localhost:143/imap}INBOX", "your_username", "your_password");
$mid=1 // 邮件 ID
// 获取报头
$header = imap_fetchheader($mbox, $mid);
// 按 \n 分割
$h_array=split("\n",$header);
foreach ( $h_array as $h ) {
// 检查行是否以字符开头
if ( preg_match("/^[A-Z]/i", $h )) {
$tmp = split(":",$h);
$header_name = $tmp[0];
$header_value = $tmp[1];
$headers[$header_name] = $header_value;
} else {
// 将行追加到上一个字段
$headers[$header_name] = $header_value . $h;
}
}