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
- 作者: Alex Martelli,Anna Martelli Ravenscroft,David Ascher,鴨澤眞夫,當山仁健,吉田聡,吉宗貞紀
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2007/06/26
- メディア: 大型本
- 購入: 11人 クリック: 423回
- この商品を含むブログ (85件) を見る