在 Gmail 上标记为不可见 (imaplib)

问题描述 投票:0回答:2

我正在尝试将电子邮件标记为在 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
给定的邮件文件夹,它与适当的电子邮件匹配。

python email gmail imap imaplib
2个回答
3
投票

看来您对 APPEND 上的标志有些误解。

通过执行

APPEND folder (-FLAGS \Seen) ...
,您实际上创建了一条带有两个标志的消息:标准
\Seen
标志和非标准
-FLAGS
标志。

要创建不带 \Seen 标志的消息,只需使用

()
作为
APPEND
的标志列表。

-FLAGS
是 STORE 的子命令,表示从当前列表中删除这些标志。相反,
+FLAGS
是将这些标志添加到当前列表中。普通的
FLAGS
会覆盖当前列表。

此外,如果您确实通过 IMAP 连接删除了

\Seen
标志,则可能需要一些时间才能显示在 GMail WebUI 中。您可能需要刷新或切换文件夹才能获取要渲染的更改。

注意:你没有保护你的反斜杠。

\S
不是合法的转义序列,因此将被传递,但您应该使用双反斜杠 (
'\\Seen'
) 或原始字符串 (
r'\Seen'
)


0
投票

我将留下有效的内容,它是其他线程中留下的几个答案的组合。看来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')

© www.soinside.com 2019 - 2024. All rights reserved.