我有一个脚本可以检查用户邮箱并将这些电子邮件处理到故障单系统。在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;
}
}
}
}
答案 0 :(得分:0)
您没有使用UID,因此请勿在imap_setflag_full上设置ST_UID标志。您在任何地方都使用消息序列号:
imap_setflag_full($hMail, $idxMsg, "\\Seen \\Flagged");