我使用以下代码从邮件中提取标题详细信息..我无法在下面提到的from,to和cc中获取邮件地址..
$header = explode("\n", imap_fetchheader($mbox,$msgno));
echo "<br>";
for ($i=1; $i<count($header); $i++)
{
echo $header[$i] . "<br>";
}
output:
Delivered-To: user1@examplecom
X-WM-Delivered: user1@example.com
Received: from ElcotPC ([127.0.0.1])
(envelope-sender )
by 127.0.0.1 with ESMTP
for ; Wed, 31 Jul 2013 09:14:19 +0530
From: "user1"
To:
Cc:
Subject: testing with attachment
Date: Wed, 31 Jul 2013 09:14:18 +0530
“from”,“to”,“cc”字段为空,没有邮件地址..
我想要像这样的输出..
Delivered-To: user1@examplecom
X-WM-Delivered: user1@example.com
Received: from ElcotPC ([127.0.0.1])
(envelope-sender )
by 127.0.0.1 with ESMTP
for ; Wed, 31 Jul 2013 09:14:19 +0530
From: "user1" <user1@example.com>
To: <user2@example.com>
Cc: <user1@example.com>
如何将电子邮件地址设为“from”,“to”和“cc”字段?
答案 0 :(得分:2)
更新:
它总是最好使用现成的代码,所以我检查了是否已存在imap-parsing函数。它确实:imap_rfc822_parse_headers
。 Read the docs了解详细信息,以及指向各种imap_*
函数的链接。也许imap_rfc822_parse_adrlist
正好你需要什么?
基本的preg_match_all
电话可以完成这项工作,我想:
if (preg_match_all('/^\s*(From|To|Cc):[^<]*<([^>]+)\>/m',$string, $addresses)
{
$addresses = array_merge($addresses[1], $addresses[2]);
print_r($addresses);
}
应输出:
array (
'From' => 'user1@example.com',
'To' => 'user2@example.com',
'Cc' => 'user1@example.com',
)
我认为这就是你要找的东西 正则表达式解释说:
^\s*
匹配行的开头,以及零个或多个空格字符(From|To|Cc)
匹配(和组)From,To或Cc :[^<]*<
:匹配(但不分组)冒号和任何字符,但地址分隔<
([^>]+)
:在<
之后的所有内容的数学(和分组),不是>
\>
:可以省略,但匹配地址分隔>
m
:多行。如果省略前导^
表示字符串,则现在意味着行首 注意:此表达式不处理逗号分隔的地址或多个地址,调用它可能很有用:
filter_var($addresses['From'], FILTER_VALIDATE_EMAIL)
或使用array_map
在合并之前过滤$addresses[2]
...