Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将电子邮件设置为在IMAP服务器上看到的电子邮件_Php_Email_Gmail_Imap - Fatal编程技术网

Php 将电子邮件设置为在IMAP服务器上看到的电子邮件

Php 将电子邮件设置为在IMAP服务器上看到的电子邮件,php,email,gmail,imap,Php,Email,Gmail,Imap,我正在尝试从Imap服务器(Gmail)读取邮件。我会检查是否有新邮件(看不见),并检查它是否被看到。 我写了这段代码,但是 imap_setflag_full 似乎不起作用。 如果我有一封新邮件,脚本将无法放置“已看到”标志,它会提示我始终有一封未看到的邮件 $mbox=imap_open( "{imap.gmail.com:993/ssl/novalidate-cert}" , $this->username, $this->password); if ($mbox

我正在尝试从Imap服务器(Gmail)读取邮件。我会检查是否有新邮件(看不见),并检查它是否被看到。 我写了这段代码,但是

imap_setflag_full
似乎不起作用。 如果我有一封新邮件,脚本将无法放置“已看到”标志,它会提示我始终有一封未看到的邮件

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

        }
$mbox=imap_open({imap.gmail.com:993/ssl/novalidate cert},$this->username,$this->password);
如果(百万美元)
{echo“已连接\n

”; }else{exit(“无法连接:”.imap\u last\u error()。“\n”);echo“FAIL!\n”}; 如果($hdr=imap\U检查($mbox)){ $msgCount=$hdr->Nmsgs; 回显“有”。$msgCount.“邮件”; }否则{ echo“无法获取邮件”; } $result=imap_搜索($mbox,'UNSEEN'); 回声“
结果:”; 打印(结果); 如果($result==false) 回显“无电子邮件”; 否则{ 回音“你有邮件”; echo(“现在我为这封邮件设置了SEED标志”); rsort(结果); $status=imap_setflag_full($mbox,“1”,“\\Seen\\Flagged”,ST_UID); } 回声“

”; $result=imap_搜索($mbox,'UNSEEN'); 回声“
结果:”; 打印(结果); 如果($result==false) 回应“无邮件”; 否则{ 呼应“还有”; }

非常感谢。

我想问题出在您硬编码的“1”上。我将“1”替换为:


这似乎奏效了。当使用ST_UID时,这意味着实际上是一个ID,而不是序列号。

我不知道上面的答案是如何工作的,人们正在投票表决这个答案。 我把一整天都浪费在这个答案上了

最后我得到了真正的解决方案。这是有效的。我只是将未读电子邮件设置为阅读电子邮件

<?php   
// Connect to gmail
$imapPath = '{imap.gmail.com:993/imap/ssl}INBOX';
//$imapPath = '{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX';
$username = 'Your-email@gmail.com';
$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);

?>


要返回UID而不是序列号,请使用SEU UID选项。在您的回答中,您将所有未看到的电子邮件标记为已读。但是在上面的答案中,我可以根据需要使用不同的条件选择我想在
foreach
中标记为已读的电子邮件。
<?php   
// Connect to gmail
$imapPath = '{imap.gmail.com:993/imap/ssl}INBOX';
//$imapPath = '{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX';
$username = 'Your-email@gmail.com';
$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);

?>