Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除和附加更新的邮件仍显示旧邮件_Python_Gmail_Append_Imap - Fatal编程技术网

Python 删除和附加更新的邮件仍显示旧邮件

Python 删除和附加更新的邮件仍显示旧邮件,python,gmail,append,imap,Python,Gmail,Append,Imap,我在一个gmail邮箱里有一堆邮件,邮件头有点破损。我想使用python和gmail的imap接口自动处理和更新它们。我想下载消息,在本地修改消息头,然后在服务器上删除它,然后重新添加固定消息。问题是,虽然消息似乎确实被正确删除了,但在添加回旧消息后,仍然存在错误的消息头。更复杂的是,如果我在gmail中手动删除消息,然后在python中使用相同的命令添加消息,那么新的、良好的标题就会按需要显示 >>> import imaplib >>> import em

我在一个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'])
但是消息返回了它原来的坏字符串。但是,如果我没有以编程方式将其标记为已删除并删除,而是在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文件夹中删除时:立即永久删除邮件
当然,在发布问题后,答案很快就会解开。。。重要的细节是邮件标记为已删除并从最后可见的IMAP文件夹中删除时的行。默认情况下,选择“所有邮件”作为可见的IMAP文件夹,因此邮件将始终在至少一个文件夹中可见。我认为有两种解决办法:

取消选择所有邮件作为可见的IMAP文件夹。然后,当邮件被标记时。。。选项的行为与我在从标签中删除和删除时最初预期的一样。如果选择了“存档邮件”,则只需删除标签,即可在所有邮件中看到该标签。如果选择“将邮件移动到垃圾箱”,则邮件将移动到垃圾箱标签。如果选择永久删除永久,则消息将被完全删除

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


检查并查看该帮助我以前搜索答案时是否看到该问题,并确保检查我的高级imap设置,因为它已升级为普通gmail的一部分,而不仅仅是实验室。默认设置是在收到imap删除请求时归档邮件。可以将其更改为移动到垃圾箱标签或立即永久删除邮件。我把它设置为后者。好吧,那么-我有点不知所措-但我打赌gmail有一些怪癖在起作用
>>> 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'])