2011-07-20 9 views
4

IMAPサーバ(Gmail)からメールを読み込もうとしています。新しいメール(見えない)があるかどうかを確認し、確認します。 私はこのコードを書いたが、IMAPサーバでSEENとしてメールを設定する

imap_setflag_full 

は動作していないようだ。 新しいメールがある場合、スクリプトはSEENフラグを設定することができず、常に1つの目に見えないメールがあることを伝えます。

$mbox=imap_open("{imap.gmail.com:993/ssl/novalidate-cert}" , $this->username, $this->password); 
    if ($mbox) 
      { echo "Connected\n<br><br>"; 
      } else { exit ("Can't connect: " . imap_last_error() ."\n"); echo "FAIL!\n"; }; 

     if ($hdr = imap_check($mbox)) { 
      $msgCount = $hdr->Nmsgs; 
      echo "There are ".$msgCount." mail"; 
     } else { 
      echo "Failed to get mail"; 

     } 

     $result = imap_search($mbox, 'UNSEEN'); 
     echo "<br>Result: "; 
     print_r($result); 
     if($result==false) 
      echo "No email"; 
     else{ 
      echo "you have mail"; 
      echo("<br>now I set the Seen flag for this mail"); 
      rsort($result); 
      $status = imap_setflag_full($mbox, "1", "\\Seen \\Flagged", ST_UID);  
     } 

     echo"<br><br>"; 


     $result = imap_search($mbox, 'UNSEEN'); 
     echo "<br>Result: "; 
     print_r($result); 
     if($result==false) 
      echo "no mail"; 
     else{ 
      echo "there are still"; 

     } 

ありがとうございました。

答えて

9

私は問題がハードコードされた "1"であると思います。私は "1" を置き換え:

foreach ($result as $mail) { 
    $status = imap_setflag_full($mbox, $mail, "\\Seen \\Flagged", ST_UID); 
} 

、動作しているようです。 ST_UIDを使用する場合、実際にはIDであり、シーケンス番号ではありません。

+0

シーケンス番号の代わりにUIDを返すには、** SE_UID **オプションを使用します。 – Matthew

3

私は上記の答えがどのように働いているのか分かりませんし、人々はその答えに投票しています。 私はその一日を無駄にしてしまった。

最後に私は本当の解決策を得ます。これは機能しています。私は電子メールを読むために未読メールを設定しています。

<?php 
// Connect to gmail 
$imapPath = '{imap.gmail.com:993/imap/ssl}INBOX'; 
//$imapPath = '{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX'; 
$username = '[email protected]'; 
$password = 'Your-Password'; 
$email_read = 'UNSEEN'; 

// try to connect 
$inbox = imap_open($imapPath,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error()); 

$emails = imap_search($inbox,$email_read); 
$ids = array(); 
foreach($emails as $key => $mail) { 
    $ids [] = $mail; 

    // Do here whatever you want. 
} 

// Setting flag from un-seen email to seen on emails ID. 
imap_setflag_full($inbox,implode(",", $ids), "\\Seen \\Flagged"); //IMPORTANT 

// colse the connection 
imap_expunge($inbox); 
imap_close($inbox); 

?> 
関連する問題