imap_setflag_full не может установить электронную почту как прочитанную Gmail - PullRequest
0 голосов
/ 31 мая 2018

У меня есть скрипт, который проверяет почтовый ящик пользователей и обрабатывает эти письма в системе заявок.В 99% случаев скрипт работает нормально.Время от времени я сталкиваюсь с электронным письмом, которое не помечается как прочитанное после обработки.Я не использовал флаг imap_setflag_full, чтобы пометить его как прочитанный, он делает это автоматически.Пока что это происходит с Gmail.

imap_setflag_full($hMail, $idxMsg, "\\Seen \\Flagged", ST_UID);

Так что даже при попытке использовать imap_setflag_full электронная почта все равно не помечается как прочитанная.Единственное, что я могу сделать - это вручную войти в папку «Входящие» и удалить письмо.

Кто-нибудь знает, почему это происходит?

$hMail = imap_open("{".$row['address'].":".$row['port']."/".$row['transport']."/".$row['security']."}INBOX", "$strUser", "$strPassword");

if ($hMail) {
    // get headers
    $aHeaders = imap_headers($hMail);

    // get message count
    $objMail = imap_mailboxmsginfo( $hMail );

    // process messages
    for( $idxMsg = 1; $idxMsg <= $objMail->Nmsgs; $idxMsg++  ) {
        // get header info
        $objHeader = imap_headerinfo( $hMail, $idxMsg );

        // is unread mail
        if($objHeader->Unseen == 'U') {
            // email unread so process
            imap_setflag_full($hMail, $idxMsg, "\\Seen \\Flagged", ST_UID);
        } else {
            // email read already so skip
            if ($row['delete_email'] == 1) {
                // delete message
                imap_delete( $hMail, $idxMsg );
            }
            continue;
        }
    }
}

}

1 Ответ

0 голосов
/ 01 июня 2018

Вы не используете UID, поэтому не устанавливайте флаг ST_UID для imap_setflag_full.Вы используете порядковые номера сообщений везде:

imap_setflag_full($hMail, $idxMsg, "\\Seen \\Flagged");
...