php imap 从电子邮件地址获取

发布于 2024-09-13 05:43:53 字数 190 浏览 12 评论 0原文

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

如果发件人姓名已知,并且使用“from”参数,我将获得发件人姓名而不是电子邮件地址。

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

How do I retrieve the email address from an email with imap_open?

If the sender name is known I get the sender name instead of the email address if I use the 'from' parameter.

Code: http://gist.github.com/514207

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

乖乖公主 2024-09-20 05:43:53
$header = imap_headerinfo($imap_conn, $msgnum);
$fromaddr = $header->from[0]->mailbox . "@" . $header->from[0]->host;
$header = imap_headerinfo($imap_conn, $msgnum);
$fromaddr = $header->from[0]->mailbox . "@" . $header->from[0]->host;
老街孤人 2024-09-20 05:43:53

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

// 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() 为我提供了我需要的所有信息。

I battled with this as well but the following works:

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

I had used imap_fetch_overview() but the imap_header() gave me all the information I needed.

还给你自由 2024-09-20 05:43:53

最坏的情况,您可以自己解析标头,如下所示:

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

$matches will contains 3 arrays:

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

Get this from: http://www.php.net/manual/en/function.imap-fetchheader.php#82339

Worst case, you can parse the headers yourself with something like:

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

$matches will contain 3 arrays:

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

Got this from: http://www.php.net/manual/en/function.imap-fetchheader.php#82339

蹲墙角沉默 2024-09-20 05:43:53

和你有同样的问题......必须把它拼凑在一起,不知道为什么它如此奇葩。

此处未经测试的示例:

$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);

Had same issue as you....had to piece it together, don't know why it's such gonzoware.

Untested example here:

$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);
偏爱你一生 2024-09-20 05:43:53

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

可以在此处找到使用示例:http://davidwalsh.name/gmail-php-imap,特别是

echo $overview[0]->from;

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

imap_fetch_overview could be what you're looking for: http://www.php.net/manual/en/function.imap-fetch-overview.php

An example of use can be found here: http://davidwalsh.name/gmail-php-imap, specifically

echo $overview[0]->from;

This function is simple, but has limitations. A more exhaustive version is in imap_headerinfo ( http://www.php.net/manual/en/function.imap-headerinfo.php ) which can return detailed arrays of all header data.

你与昨日 2024-09-20 05:43:53

遇到麻烦,直到我发现 $header 是 stdClass 对象的数组。以下两行有效:

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

Had trouble until I spotted that the $header is an array of stdClass Objects. The following 2 lines worked:

    $header=imap_fetch_overview($imap,$countClients,FT_UID);
    $strAddress_Sender=$header[0]->from;
草莓味的萝莉 2024-09-20 05:43:53

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

使用 PHP 和 IMAP 从收件箱中提取电子邮件地址列表
inbox-using-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"
            );
        } 

Full working code with an online example

Extract email addresses list from inbox using PHP and IMAP
inbox-using-php-and-imap

I think all you need is just to copy the script.

I am publishing two core functions of the code here as well (thanks to Eineki's comment)

         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"
            );
        } 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文