imap_setflag_full无法更改邮件状态

时间:2018-06-05 06:33:00

标签: php email imap

我使用下面的代码来阅读我的Gmail收件箱,它可以正常阅读。

但问题是有些邮件没有设置,所以每次都会出现。

根据我观察的邮件不会改变,从看不见到看到的邮件是包含一些HTML的邮件。

以下是我的代码:

 public function getMessages($type = 'text') {
        $stream = $this->imapStream;
        $emails = imap_search($stream, 'UNSEEN');
        $messages = array();
        if ($emails) {
            $this->emails = $emails;
            $i = 0;
            foreach ($emails as $email_number) {
                $this->attachments = array();
                $uid = imap_uid($stream, $email_number);
                $messages[] = $this->loadMessage($uid, $type);
                if ($i == $this->limit) {
                    break;
                }
                $i++;
                echo "seen status=>".imap_setflag_full($stream, $email_number, "\\Seen", ST_UID);
                //echo "seen status=>".imap_clearflag_full($stream, $email_number, "\\Seen");
            }
        }
        return $messages;
    }

这是我用来手动更改状态的行

echo "seen status=>".imap_setflag_full($stream, $email_number, "\\Seen", ST_UID);

看到状态总是返回1作为结果,但在收件箱中显示为未读。

1 个答案:

答案 0 :(得分:0)

您正在使用消息序列号(MSN),但为您的标志功能提供ST_UID标志,将其更改为使用UID。大多数MSN通常不是有效的UID。

在任何地方使用UID(FT_UIDST_UID等所有函数)或MSN到处都是(从不使用UID标志,并且在循环时不要删除任何内容。)

imap_setflag_full($stream, $email_number, "\\Seen");

imap_setflag_full($stream, $uid, "\\Seen", ST_UID);

如果您使用UID版本的搜索,则无需致电imap_uid