2015-07-20 76 views
1

我有这样的代码它完美....我唯一的问题是imap_setflag_full($imap,$i, "\\Seen");所看到的标志似乎并没有被设置..PHP IMAP - imap_setflag_full

$imap = imap_open("{mail.xyz.com:993/imap/ssl/novalidate-cert}INBOX", "username", "pass");  
    $message_count=2; 
     for ($i = 1; $i <= $message_count; ++$i) { 
      $header = imap_header($imap, $i); 
      $body = trim(substr(imap_body($imap, $i), 0, 1000)); 
      $prettydate = date("jS F Y", $header->udate); 
      echo "<pre>".print_r($header)."</pre>"; 
      if (isset($header->from[0]->personal)) { 
       $personal = $header->from[0]->personal; 
     } else { 
      $personal = $header->from[0]->mailbox; 
     } 

     $email = "$personal < ".$header->from[0]->mailbox."@".$header->from[0]->host." >"; 
     echo "On $prettydate, $email said \"$body\".\n <BR>"; 
     imap_setflag_full($imap,$i, "\\Seen"); // Set the flag "Seen" 
    } 

    imap_close($imap); 

我打印头在我尝试设置标志并且不显示之后。然而,如果我累imap_setflag_full($imap,$i, "\\Flagged");被标记的测地仪将是F,如果把imap_clearflag_full($imap,$i,'\\Flagged') F将被删除...唯一的问题是SEEN和UNSEEN ...任何帮助表示赞赏。

感谢

回答

0

建议:使用返回的消息

  • 开始追赶IMAP协议的阵列的IMAP功能

    1. 开始返回的值,看是否有错误。
    2. 尝试切换到UID将是我的最后一个建议。

    我有同样的问题,我在消息号与消息UID混合,这就是为什么看不见(总是)设置。这似乎不是你的情况。

    $mbox = imap_open ($account, $user, $pwd); 
    if($mbox !== false) { 
        $numMsg = imap_num_msg ($mbox); 
        $msgs = imap_search($mbox, 'UNSEEN', SE_UID); 
    
        // Go through ALL emails. 
        foreach ($msgs as $msguid) { 
        $msgno = imap_msgno ($mbox, $msguid); 
        $header = imap_headerinfo($mbox, $msgno); 
        if($header === false) { 
         ... log error 
        } 
        $email = imap_body ($mbox, $msgno); 
    
        // Mark as Read 
        $result = imap_setflag_full($mbox, $msguid, "\\Seen", ST_UID); 
        if($result === false) { 
         ... log error 
        } 
    
        } 
        imap_close ($mbox); 
    }