【问题标题】:imap_delete deleting without imap_expunge being calledimap_delete 删除而不调用 imap_expunge
【发布时间】:2015-09-24 16:22:21
【问题描述】:

这个概念是我想从我的 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。我已尝试对此进行调查,但找不到其他遇到此类问题的人。

这只是我正在使用的代码的一个 sn-p,一切正常,但是 imap_delete() 是否有某种方法可以删除消息而不是仅仅标记它们?

【问题讨论】:

    标签: php imap


    【解决方案1】:

    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

    【讨论】:

    • 谢谢,我不知道gmail有这个功能。看起来它为我做事的路很长:)
    猜你喜欢
    • 2011-04-08
    • 2015-08-14
    • 2014-04-15
    • 2015-01-06
    • 2012-10-20
    • 2013-11-16
    • 2015-01-15
    • 1970-01-01
    • 2013-04-20
    相关资源
    最近更新 更多