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

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

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

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

【问题讨论】:

    标签: php email imap


    【解决方案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
          • 完成。感谢您的评论!
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-21
          相关资源
          最近更新 更多