私たちのオフィスでは、2つのIMAPサーバーを電子メールに使用し、1つは受信サーバーで、最近の電子メールを保持し、もう1つはアーカイブサーバーです。主にOutlook 2010を使用しています。現在のプロセスは、受信したサーバーからアーカイブに送信されたメッセージを定期的にドラッグすることです。1つのIMAPサーバーから別のIMAPサーバーにメッセージを移動するスクリプト
今日、私はスクリプトを書くことを尋ねられ、定期的に(おそらくcrontabを使用して)送信されたすべてのメッセージを取得し、それらをアーカイブに移動します。
私は、サーバーにアクセスして突っ込むためのSSLまたはtelnetの例を調べました。しかし、私はこれをスクリプト化するための最善の方法やIMAP環境内のファイルを移動する方法を知らない。
これを達成する最も良い方法は何ですか?私はPythonを快適なレベルから使いたいと思っていますが、すでに別の言語の既存のソリューションがある場合は、それに対処できます。
更新:
[OK]を、ここでいくつかのコードです。現在のところ、メッセージは正常にコピーされますが、既存のメッセージはアーカイブサーバーに複製されます。
import imaplib
import sys
#copy from
f_server = 'some.secret.ip.address'
f_username = '[email protected]'
f_password = 'password'
f_box_name = 'Sent Messages'
#copy to
t_server = 'archive.server.i.p'
t_username = 'username'
t_password = 'password'
t_box_name = 'test'
To = imaplib.IMAP4(t_server)
To.login(t_username, t_password)
print 'Logged into mail server'
From = imaplib.IMAP4(f_server)
From.login(f_username, f_password)
print 'Logged into archive'
From.select(f_box_name) #open box which will have its contents copied
print 'Fetching messages...'
typ, data = From.search(None, 'ALL') #get all messages in the box
msgs = data[0].split()
sys.stdout.write(" ".join(['Copying', str(len(msgs)), 'messages']))
for num in msgs: #iterate over each messages id number
typ, data = From.fetch(num, '(RFC822)')
sys.stdout.write('.')
To.append(t_box_name, None, None, data[0][1]) #add a copy of the message to the archive box specified above
sys.stdout.write('\n')
try:
From.close()
From.logout()
try:
To.close()
To.logout()
いくつかのソース:
Doug Hellman's Blog: imaplib - IMAP4 Client Library
Tyler Lesmann's Blog: Copying IMAP Mailboxes with Python and imaplib
は、私はまだ行う必要があります。
- 削除/実際にこれは次のようになります(重複をコピーしない
- ライブサーバー上のメッセージを抹消しますコピー後に原稿を削除して修正しましたが...) アップデート2
をトラップ
誰でもコピーするときに複製を作成しない方法上の任意のアイデアがありますか? (現在はオリジナルを削除するオプションを除いて)テキストを検索することを考えましたが、ネストされた返信はそれを捨てることができました。
rsyncはあるシステムから別のシステムにコピーするためのオプションですか? –