imap_setflag_full 无法更改邮件状态
imap_setflag_full not working to change mail status
我正在使用下面的代码阅读我的 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);
结果总是 return 1,但在收件箱中显示为未读。
您正在使用消息序列号 (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
。
我正在使用下面的代码阅读我的 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);
结果总是 return 1,但在收件箱中显示为未读。
您正在使用消息序列号 (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
。