带“&”的imaplib邮箱无法打开

时间:2019-02-27 17:52:08

标签: python imaplib

我改编了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

1 个答案:

答案 0 :(得分:0)

是的,IMAP邮箱使用修改后的UTF-7编码,该编码使用&作为编码字符。我不相信imaplib具有内置的UTF-7编码,但是您可以使用LIST命令来获取文件夹的实际名称。可能是Inbox.Here &- There。另外请注意,空格可能需要在文件夹名称"Inbox.Here &- There"

周围加上引号