imap_delete和imap_expunge不会永久删除?

时间:2013-09-06 11:08:29

标签: php imap gmail-imap

我目前正在测试一个脚本,该脚本将通过一个电子邮件帐户删除每页最长的20封电子邮件。 (数字仅用于测试目的)但是。我注意到我正在做的几个问题:

1 - 似乎有时会忽略电子邮件。例如。我有12封可能被删除的电子邮件。然而它只删除了6,当我再次运行脚本时,它删除了3,然后减少到2,最后我不得不再次刷新以删除最后一个。有谁知道为什么会这样?当限制为20.所以无论如何都会循环20次。

2 - 主要问题是虽然它从收件箱中删除。当我去All Mail。每封电子邮件都在那里。

代码如下,任何人都可以发现我遇到这些困难的原因。 (虽然删除了imap_open调用。         

$numMessages = imap_num_msg($imap);
//for ($i = $numMessages; $i > ($numMessages - 20); $i--) {
for($i=1; $i<=20; $i++)
{
    $header = imap_header($imap, $i);

    $fromInfo = $header->from[0];
    $replyInfo = $header->reply_to[0];

    $details = array(
        "fromAddr" => (isset($fromInfo->mailbox) && isset($fromInfo->host))
            ? $fromInfo->mailbox . "@" . $fromInfo->host : "",
        "fromName" => (isset($fromInfo->personal))
            ? $fromInfo->personal : "",
        "replyAddr" => (isset($replyInfo->mailbox) && isset($replyInfo->host))
            ? $replyInfo->mailbox . "@" . $replyInfo->host : "",
        "replyName" => (isset($replyTo->personal))
            ? $replyto->personal : "",
        "subject" => (isset($header->subject))
            ? $header->subject : "",
        "udate" => (isset($header->udate))
            ? $header->udate : ""
    );

    $uid = imap_uid($imap, $i);

    echo "<ul>";
    echo "<li><strong>From:</strong>" . $details["fromName"];
    echo " " . $details["fromAddr"] . "</li>";
    echo "<li><strong>Subject:</strong> " . $details["subject"] . "</li>";
    echo '<li><a href="mail.php?folder=' . $folder . '&uid=' . $uid . '&func=read">Read</a>';
    echo " | ";
    echo '<a href="mail.php?folder=' . $folder . '&uid=' . $uid . '&func=delete">Delete</a>';
    echo " | ";
    echo date("F j, Y, g:i a",$details['udate']) . '</li>';
    echo "</ul>";

    imap_delete($imap, $uid, FT_UID);
}
imap_expunge($imap);
imap_close($imap);
?>

谢谢

1 个答案:

答案 0 :(得分:2)

由于Google邮件可以位于多个“文件夹”(标签)中,因此imap_delete会删除相应的标签。

首先,您必须将邮件移至“废纸篓”文件夹。从那里你可以imap_delete他们。

来源:Deleting IMAP messages