我正在尝试将电子邮件标记为在 Gmail 服务器上看不到。
我正在使用这个命令:
res, data = mailbox.uid('STORE', uid, '-FLAGS', '(\Seen)')
一切顺利,但当我使用网络浏览器检查它时,它仍然标记为已看到。 当我检查标志时,我得到的是:
b'46 (FLAGS (-FLAGS \\Seen))'
我已经看到了有关此问题的多个问题,但所提出的解决方案都不起作用。
顺便提一下,我使用以下方式附加这封电子邮件:
mailbox.append(db_email.folder, "-FLAGS \Seen", time.mktime(db_email.date.timetuple()), mail.as_bytes())
但是标志参数
-FLAGS \Seen
没有任何效果,因为当我不传递标志参数时它是相同的。
此外,我已经仔细检查了
uid
给定的邮件文件夹,它与适当的电子邮件匹配。
看来您对 APPEND 上的标志有些误解。
通过执行
APPEND folder (-FLAGS \Seen) ...
,您实际上创建了一条带有两个标志的消息:标准 \Seen
标志和非标准 -FLAGS
标志。
要创建不带 \Seen 标志的消息,只需使用
()
作为 APPEND
的标志列表。
-FLAGS
是 STORE 的子命令,表示从当前列表中删除这些标志。相反,+FLAGS
是将这些标志添加到当前列表中。普通的 FLAGS
会覆盖当前列表。
此外,如果您确实通过 IMAP 连接删除了
\Seen
标志,则可能需要一些时间才能显示在 GMail WebUI 中。您可能需要刷新或切换文件夹才能获取要渲染的更改。
注意:你没有保护你的反斜杠。
\S
不是合法的转义序列,因此将被传递,但您应该使用双反斜杠 ('\\Seen'
) 或原始字符串 (r'\Seen'
)
我将留下有效的内容,它是其他线程中留下的几个答案的组合。看来APPEND中的flags不太好理解。
import imaplib
mail.select("Inbox", readonly=False)
status, messages = mail.uid('SEARCH', None, '(UNSEEN)')
message_ids = messages[0].split()
for message_id in message_ids:
status, message_data = mail.uid('FETCH', message_id, '(RFC822)')
email_from = message.get("From")
email_subject = message.get("Subject")
mail.uid('STORE', message_id, '-FLAGS', '\\SEEN')