【问题标题】:Delete and append updated message still shows old message删除和附加更新的消息仍然显示旧消息
【发布时间】:2012-07-20 07:35:10
【问题描述】:

我的 gmail 邮箱中有一堆邮件的标题略有损坏。我想使用 python 和 gmail 的 imap 接口自动处理和更新它们。我想下载消息,在本地修改标头,然后在服务器上将其删除,然后将固定消息添加回来。问题是,虽然该消息似乎已被正确删除,但在将其添加回旧的、错误的标头后仍然存在。更复杂的是,如果我手动删除 gmail 中的消息,然后在 python 中使用相同的命令添加消息,新的、好的标题会根据需要出现。

>>> import imaplib
>>> import email
>>> mail = imaplib.IMAP4_SSL('imap.gmail.com')
>>> mail.login('user@gmail.com', 'password')
>>> mail.select('label')
('OK', ['2'])
>>> mail.search(None, 'from', 'bad_string')
('OK', ['2'])
>>> ret,data = mail.fetch('2', '(RFC822)')
>>> msg = email.message_from_string(data1[0][1])
>>> msg['from']
'"Doe, John" <john.doe@bad_string.com>'
>>> new = msg['from'].replace('bad_string', 'good_string')
>>> msg.replace_header('From', new)
>>> msg['from']
'"Doe, John" <john.doe@good_string.com>'
>>> mail.store('2', '+FLAGS', '\\Deleted')
('OK', ['2 (FLAGS (\\Seen \\Deleted))'])
>>> mail.expunge()
('OK', ['2'])
>>> mail.search(None, 'from', 'bad_string')
('OK', [''])
>>> mail.select('label')
('OK', ['1'])

此时,python 似乎将电子邮件视为已删除。检查 gmail 的网络界面似乎也显示它已经消失了。标签中只有一封电子邮件,而不是开头的两封,搜索返回空。

>>> mail.append('label', None, '"20-Jul-2012 22:30:00 -0400"', str(msg))
('OK', ['[APPENDUID 24 13] (Success)'])
>>> mail.search(None, 'from', 'bad_string')
('OK', ['2'])
>>> mail.search(None, 'from', 'good_string')
('OK', [''])

但是消息返回了原来的错误字符串。但是,如果不是以编程方式将其标记为已删除和清除,而是在 gmail 的 Web 界面中删除并清空垃圾箱,然后追加(仍然在与上述相同的 python 会话中,因此在上述输出之后立即运行)...

>>> mail.append('label', None, '"20-Jul-2012 22:30:00 -0400"', str(msg))
('OK', ['[APPENDUID 24 14] (Success)'])
>>> mail.search(None, 'from', 'bad_string')
('OK', [''])
>>> mail.search(None, 'from', 'good_string')
('OK', ['2'])

gmail中的IMAP设置如下:

  • 当我在 IMAP 中将邮件标记为已删除时:自动删除关闭 - 等待客户端更新服务器。
  • 当邮件被标记为已删除并从最后一个可见的 IMAP 文件夹中清除时:立即永久删除邮件

【问题讨论】:

  • 检查 stackoverflow.com/questions/3988583/… 看看是否有帮助
  • 我之前在搜索答案时确实看到了这个问题,并确保检查了我的高级 imap 设置(因为被提升为常规 gmail 的一部分,而不仅仅是实验室)。默认是在 imap 删除请求时归档消息。可以将其更改为移动到垃圾标签或“立即永久删除邮件”。我把它设置为后者。
  • Rightio 那么 - 我很茫然 - 但我敢打赌 gmail 有一些怪癖正在这样做

标签: python gmail append imap


【解决方案1】:

因此,当然,在发布问题后不久答案就会揭开……重要的细节是“当邮件被标记为从最后一个可见的 IMAP 文件夹中删除并删除时​​”这一行。默认情况下,所有邮件都被选为可见的 IMAP 文件夹,因此邮件将始终在至少一个文件夹中可见。我相信有两种解决方案:

  1. 取消选择所有邮件作为可见的 IMAP 文件夹。然后,“当消息被标记时...”选项的行为就像我最初在从标签中删除和删除时所期望的那样。如果选择了“归档邮件”,它只会删除标签,并且它仍然在所有邮件中可见。如果选择“将邮件移至垃圾箱”,则将邮件移至垃圾箱标签。如果选择“permanently delete forever”,则消息将被彻底删除。

  2. 将所有默认文件夹选为可见 IMAP 文件夹和默认 IMAP 设置,而不是对当前标签中的邮件执行任何操作,您可以将邮件复制到“[Gmail]/垃圾”标签,然后选择垃圾标签并删除/清除其中的所有内容。这将永久删除该消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多