dsn1327 2013-07-31 01:54
浏览 57
已采纳

PHP:imap_header不显示请求读取收据和优先级标头

I'm trying to read the Request Read Receipt and Priority headers from email headers via PHP.

IT seems that imap_header only displays select headers. The message headers below should but do not include the two headers I'm looking for...

 stdClass Object ( 
 [date] => Tue, 30 Jul 2013 18:11:26 -0700 (MST)
 [Date] => Tue, 30 Jul 2013 18:11:26 -0700 (MST) 
 [subject] => Return
 Request Receipt + High Priority Test 
 [Subject] => Return Request
 Receipt + High Priority Test 
 [in_reply_to] => <__@mrmail.com>
 [message_id] => <__@mrmail.com> 
 [toaddress] => __@example.com [to] =>
   Array ( 
   [0] => stdClass Object (
     [mailbox] => __ [host] => example.com
   )
 )

 [fromaddress] => Someone <__@mrmail.com> 
 [from] => 
   Array ( 
     [0] =>
       stdClass Object ( 
         [personal] => Someone 
         [mailbox] => example 
         [host] => mrmail.com 
   )
 )

 [reply_toaddress] => Someone <__@mrmail.com> 
 [reply_to] => 
   Array ( 
     [0] => stdClass Object (
       [personal] => Someone 
       [mailbox] => __ 
       [host] => mrmail.com 
      )
 )

 [senderaddress] => Someone <__@mrmail.com> 
 [sender] => 
   Array ( 
     [0] => stdClass Object ( 
       [personal] => Someone 
       [mailbox] => example 
       [host] => mrmail.com 
      )
 )

 [Recent] => 
 [Unseen] => U 
 [Flagged] => 
 [Answered] => 
 [Deleted] =>
 [Draft] => 
 [Msgno] => 69 
 [MailDate] => 30-Jul-2013 19:18:03 -0600
 [Size] => 2719 
 [udate] => 1375233483

So what function in PHP do I use to iterate through ALL headers?

  • 写回答

1条回答 默认 最新

  • dongyi4420 2013-08-02 18:12
    关注

    Figured it out, the array below returns all headers, posting for others...

    [edit] Updated so that headers that may appear more than once are checked and an array with their values are added. The $unlimited array is sampled from http://tools.ietf.org/html/rfc5322#section-3.6.[/edit]

    <?php
    $th = imap_fetchheader($mbox,$cms->page2);
    $th = trim($th);
    $th = str_ireplace("","
    ",$th);
    $th = str_ireplace("
    
    ","
    ",$th);
    $p0 = explode("
    ",$th);
    $current = '';
    $unlimited = array('comments','keywords','optional-field','resent-bcc','resent-cc','resent-date','resent-from','resent-msg-id','resent-sender','resent-to','trace');
    $headers = array();
    
    foreach ($p0 as $k1)
    {
     $k1 = rtrim($k1);
     $a = $k1;
     $b = trim($k1);
    
     if ($a!==$b)
     {
      $p1 = trim($k1);
      if (in_array($current,$unlimited)) {array_push($headers[strtolower($current)],$p1);}
      else {$headers[strtolower($current)] .= $p1;}
     }
     else if (stristr($k1,':'))
     {
      $p1 = explode(':',$k1,2);
      if (in_array(strtolower($p1[0]),$unlimited))
      {
       if (!isset($headers[strtolower($p1[0])])) {$headers[strtolower($p1[0])] = array($p1[1]);}
       else {array_push($headers[strtolower($current)],$p1[1]);}
      }
      else
      {
       if (!isset($headers[strtolower($p1[0])])) {$headers[strtolower($p1[0])] = $p1[1];}
       else {$headers[strtolower($p1[0])] .= $p1[1];}
      }
    
      $current = $p1[0];
     }
    }
    
    ksort($headers);//Mainly for testing purposes, remove this afterwards.
    
    echo '<div><pre>';
    $a = print_r($headers,1);
    echo htmlspecialchars($a).'</pre></div>';
    ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题