php imap 从电子邮件地址获取

Posted

技术标签:

【中文标题】php imap 从电子邮件地址获取【英文标题】:php imap get from email address 【发布时间】:2011-03-27 00:06:42 【问题描述】:

如何使用 imap_open 从电子邮件中检索电子邮件地址?

如果发件人姓名已知,如果我使用“发件人”参数,我会得到发件人姓名而不是电子邮件地址。

代码:http://gist.github.com/514207

【问题讨论】:

【参考方案1】:
$header = imap_headerinfo($imap_conn, $msgnum);
$fromaddr = $header->from[0]->mailbox . "@" . $header->from[0]->host;

【讨论】:

如何使用 Zend_Mail 来实现? Zend_Mail 不是用于撰写和发送电子邮件吗?这个问题是关于从收到的消息中提取地址,在这种情况下通过 imap 访问。【参考方案2】:

我也与此作斗争,但以下工作:

// Get email address
$header = imap_header($imap, $result); // get first mails header
echo '<p>Name: ' . $header->fromaddress . '<p>';
echo '<p>Email: ' . $header->senderaddress . '<p>';

我使用了 imap_fetch_overview(),但 imap_header() 提供了我需要的所有信息。

【讨论】:

【参考方案3】:

最坏的情况,你可以自己解析标题:

<?php
$headers=imap_fetchheader($imap, $msgid);
preg_match_all('/([^: ]+): (.+?(?:\r\n\s(?:.+?))*)\r\n/m', $headers, $matches);
?>

$matches 将包含 3 个数组:

$matches[0] are the full-lines (such as "To: user@user.com\r\n")
$matches[1] will be the header (such as "To")
$matches[2] will be the value (user@user.com)

从:http://www.php.net/manual/en/function.imap-fetchheader.php#82339得到这个

【讨论】:

这是我的标头:MIME-Version: 1.0 收到:by 10.227.37.212; 2010 年 7 月 21 日,星期三 12:21:40 -0700 (PDT) 日期:2010 年 7 月 21 日,星期三 12:21:40 -0700 邮件 ID:主题:使用颜色和主题自定义 Gmail 发件人:Gmail 团队 收件人:Frederik Heyninck 内容-类型:多部分/替代;边界=0016e6d5fc53164fb6048beab667 所以没有电子邮件地址。这就是问题所在。【参考方案4】:

和你有同样的问题....不得不把它拼凑起来,不知道为什么它是这样的 gonzoware。

此处未经测试的示例:

$mbox = imap_open(....)

$MN=$MC->Nmsgs;
$overview=imap_fetch_overview($mbox,"1:$MN",0);
$size=sizeof($overview);
for($i=$size-1;$i>=0;$i--)
    $val=$overview[$i];
    $msg=$val->msgno;
    $header = imap_headerinfo ( $mbox, $msg);
    echo '<p>Name  / Email Address: ' . $header->from[0]->personal ." ".
    $header->from[0]->mailbox ."@". $header->from[0]->host. '<p></br>';

imap_close($mbox);

【讨论】:

【参考方案5】:

imap_fetch_overview 可能是您正在寻找的:http://www.php.net/manual/en/function.imap-fetch-overview.php

可以在这里找到一个使用示例:http://davidwalsh.name/gmail-php-imap,具体来说

echo $overview[0]-&gt;from;

这个功能很简单,但有局限性。更详尽的版本在 imap_headerinfo (http://www.php.net/manual/en/function.imap-headerinfo.php) 中,它可以返回所有标头数据的详细数组。

【讨论】:

【参考方案6】:

在我发现 $header 是 stdClass 对象的 array 之前遇到了麻烦。以下两行有效:

    $header=imap_fetch_overview($imap,$countClients,FT_UID);
    $strAddress_Sender=$header[0]->from;

【讨论】:

这给了我发件人的姓名,而不是他们的电子邮件【参考方案7】:

带有在线示例的完整工作代码

Extract email addresses list from inbox using PHP and IMAP 收件箱-使用-php-and-imap

我认为您只需要复制脚本即可。

我在这里也发布了代码的两个核心功能(感谢 Eineki 的评论)

         function getAddressText(&$emailList, &$nameList, $addressObject)  
            $emailList = '';
            $nameList = '';
            foreach ($addressObject as $object) 
                $emailList .= ';';
                if (isset($object->personal))  
                     $emailList .= $object->personal;
                 
                $nameList .= ';';
                if (isset($object->mailbox) && isset($object->host))  
                    $nameList .= $object->mailbox . "@" . $object->host;
                    
                
            $emailList = ltrim($emailList, ';');
            $nameList = ltrim($nameList, ';');
         

        function processMessage($mbox, $messageNumber)  
            echo $messageNumber;
            // get imap_fetch header and put single lines into array
            $header = imap_rfc822_parse_headers(imap_fetchheader($mbox, $messageNumber));
            $fromEmailList = '';
            $fromNameList = '';
            if (isset($header->from))  
                getAddressText($fromEmailList, $fromNameList, $header->from); 
            
            $toEmailList = '';
            $toNameList = '';
            if (isset($header->to)) 
                getAddressText($toEmailList, $toNameList, $header->to); 
                
            $body = imap_fetchbody($mbox, $messageNumber, 1);
            $bodyEmailList = implode(';', extractEmail($body));
            print_r(
               ',' . $fromEmailList . ',' . $fromNameList 
                . ',' . $toEmailList . ',' . $toNameList 
                . ',' . $bodyEmailList . "\n"
            );
         

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review 完成。感谢您的评论!

以上是关于php imap 从电子邮件地址获取的主要内容,如果未能解决你的问题,请参考以下文章

从 IMAP 请求电子邮件的 PHP 库

PHP使用IMAP读取邮箱收邮件

PHP使用IMAP读取邮箱收邮件

Python IMAP 从或到指定的电子邮件地址搜索

PHP:从 POP3 或 IMAP 下载传入的电子邮件,对其进行解析,并在服务器上将其标记为已读/删除

仅从 IMAP 服务器获取新邮件