POP3サーバからIMAP4サーバにメールを移動する

現在、ネットワークアクセス制限がきついところに出入りしているのですが、外部からメールを送受信するのも大変なので、IMAP4が使えるGMailにメールをすべて移動することにしました。Pythonの勉強を兼ねて、Python クックブック 第2版を参考にしてPOP3サーバからIMAP4サーバへメールを移動させる自作してみました。エラー処理が微妙に足りない気がします。今後daemon化を考えるときには、もう少しエラー処理やクラス化を考えないとなぁと思います。

import getpass
import poplib
import imaplib
import email
from email.Utils import parsedate

POPHOST = "popserver"
POPUSER = "username1"
POPPASS = ""

IMAPHOST = "imapserver"
IMAPUSER = "username2"
IMAPPASS = ""

try:
    pop = poplib.POP3_SSL(POPHOST)
    pop.user(POPUSER)
    if not POPPASS or POPPASS=='=':
        POPPASS = getpass.getpass("Password for %s@%s (POP3):" % (POPUSER, POPHOST))
    pop.pass_(POPPASS)

    msgCount, _ = pop.stat()
    print "Logged in to POP3 server as %s@%s." % (POPUSER, POPHOST)
    print "Status: %d message(s)" % msgCount

    imap = imaplib.IMAP4_SSL(IMAPHOST)
    if not IMAPPASS or IMAPPASS=='=':
        IMAPPASS = getpass.getpass("Password for %s@%s (IMAP4):" % (IMAPUSER, IMAPHOST))
    imap.login(IMAPUSER, IMAPPASS)
    imap.select()
    print "Logged in to IMAP4 server as %s@%s." % (IMAPUSER, IMAPHOST)

    for msgNum in range(1, msgCount+1):
        _, message, _ = pop.retr(msgNum)
        msg = email.message_from_string('\n'.join(message))
        datetime = parsedate(msg.get('Date'))
        imap.append('INBOX', [], datetime, str(msg))
        pop.dele(msgNum)

    print "Closing POP3 session"
    pop.quit()

    print "Closing IMAP4 session"
    imap.close()
    imap.logout()

except poplib.error_proto, detail:
    print "POP3 Protocol Error:", detail
except imap.error, detail:
    print "IMAP4 Protocol Error:", detail

Python クックブック 第2版

Python クックブック 第2版