【发布时间】:2019-02-28 04:36:23
【问题描述】:
我改编了 http://tech.franzone.blog/2012/11/24/listing-imap-mailboxes-with-python/ 的脚本来识别我的 IMAP4 电子邮件服务器上的每个邮箱。以下脚本旨在备份服务器上的电子邮件。
下面的脚本可以正常工作,除非目标邮箱包含 & 字符(例如“Here & there”)。每当我在包含 & 符号的邮箱上运行脚本时,我都会在日志中收到“错误:无法打开邮箱”消息。请注意,邮箱已经用引号括起来。无论如何,我尝试用& 代替&,但没有成功。想法?
import sys
import imaplib
IMAP_SERVER = '<email server name>'
EMAIL_ACCOUNT = str(sys.argv[1])
EMAIL_FOLDER = "Inbox.Here & there"
OUTPUT_DIRECTORY = '<local directory>' + EMAIL_ACCOUNT + '/' + EMAIL_FOLDER
PASSWORD = str(sys.argv[2])
localtime = time.asctime( time.localtime(time.time()) )
def process_mailbox(M):
"""
Dump all emails in the folder to files in output directory.
"""
logging.basicConfig(level=logging.DEBUG,
filename="DailyFullEmailBackup.log", filemode="a+", format="%(asctime)-15s, %(levelname)-8s %(message)s")
rv, data = M.search(None, "ALL")
if rv != 'OK':
logging.debug ("No messages found!")
return
for num in data[0].split():
rv, data = M.fetch(num, '(BODY.PEEK[])')
if rv != 'OK':
logging.debug ("ERROR getting message %s", num)
return
logging.debug ("Writing message %s", num)
f = open('%s/%s.eml' %(OUTPUT_DIRECTORY, num), 'wb')
f.write(data[0][1])
f.close()
def main():
logging.basicConfig(level=logging.DEBUG, filename="debug.log",
filemode="a+", format="%(asctime)-15s, %(levelname)-8s %(message)s")
logging.debug ("Begin.")
M = imaplib.IMAP4_SSL(IMAP_SERVER)
M.login(EMAIL_ACCOUNT, PASSWORD)
rv, data = M.select(EMAIL_FOLDER)
if rv == 'OK':
logging.debug ( "Processing mailbox: %s", EMAIL_ACCOUNT)
logging.debug ( "Processing folder: %s", EMAIL_FOLDER)
process_mailbox(M)
M.close()
else:
logging.debug ("ERROR: Unable to open mailbox %s", EMAIL_FOLDER)
M.logout()
if __name__ == "__main__":
main()
localtime = time.asctime( time.localtime(time.time()) )
print "Finish time: ", localtime
【问题讨论】: