imap_delete删除没有调用imap_expunge

时间:2015-07-07 09:02:47

标签: php imap

这个概念是我希望从我的Gmail帐户收到电子邮件并将其上传到数据库中。然后删除邮件,我已经完成了所有工作,但有时我想在上传后将邮件保留在Gmail中,所以我手动注释掉了imap_expunge行,但它仍然删除了邮件。 例如:

$mbox = imap_open('{'.$mail_server.':'.$mail_port.$mail_certificate.'}'.$mail_folder, $mail_username, $mail_password) or die('Error opening mailbox: <br /> '.imap_last_error());

foreach ($mailboxheaders as $val) {
      $msgno++;
      $msgType = checkMsgType($mbox, $msgno);
      if($msgType === "RS-StaffJourno"){
           staffJournoMsg($mbox, $msgno);
      }
}

//imap_expunge($mbox);
imap_close($mbox);

function staffJournoMsg($mbox, $msgno){
    $type = "Journo";       
    setVars($mbox, $msgno, $type);
    imap_delete($mbox, $msgno);
}

setVars()工作正常。我的问题是,即使注释了imap_expunge被注释掉,脚本仍然会删除标记的消息。

当我注释掉imap_delete()时,它不会删除这些消息,但我宁愿在每种消息类型上注释掉一行代替imap_delete。我已经尝试过对此进行调查,但我无法找到遇到此类问题的其他人。

这只是我正在使用的代码的片段,一切正常但是有一些方法,imap_delete()正在删除消息而不是仅仅标记它们?

1 个答案:

答案 0 :(得分:0)

Gmail IMAP服务器具有非标准功能:它会在标记为\Deleted后立即删除,而无需等待EXPUNGE命令:

C: 377 UID STORE 52372 +FLAGS (\Deleted)
S: * 6247 FETCH (FLAGS (\Deleted) MODSEQ (6219134) UID 52372)
S: * 6247 EXPUNGE
S: * 6248 EXISTS
S: 377 OK Success

因此,当您连接到Gmail服务器时,唯一不删除邮件的方法就是不要拨打imap_delete