我使用下面的代码来阅读我的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作为结果,但在收件箱中显示为未读。
答案 0 :(得分:0)
您正在使用消息序列号(MSN),但为您的标志功能提供ST_UID
标志,将其更改为使用UID。大多数MSN通常不是有效的UID。
在任何地方使用UID(FT_UID
和ST_UID
等所有函数)或MSN到处都是(从不使用UID标志,并且在循环时不要删除任何内容。)
imap_setflag_full($stream, $email_number, "\\Seen");
或
imap_setflag_full($stream, $uid, "\\Seen", ST_UID);
如果您使用UID版本的搜索,则无需致电imap_uid
。