私たちのオフィスは電子メールに2つのIMAPサーバーを使用しています。1つは受信サーバーで最近の電子メールを保持し、もう1つはアーカイブサーバーです。私たちは主にOutlook2010を使用しており、現在のプロセスは、送信されたメッセージを着信サーバーからアーカイブに定期的にドラッグすることです。
今日、私はスクリプトの作成を検討するように求められました。スクリプトを定期的に(おそらくcrontabを使用して)取得し、送信されたすべてのメッセージをアーカイブに移動します。
サーバーにアクセスして調べ回るSSLまたはtelnetの例をいくつか調べました。ただし、これをスクリプト化する最善の方法や、IMAP環境内でサーバー間でファイルを移動する方法がわかりません。
これを達成するための最良の方法は何ですか?快適なレベルからPythonを使用したいのですが、別の言語で既存のソリューションがすでに存在する場合は、それに対処できます。
アップデート:
わかりました、ここにいくつかのコードがあります。現在、メッセージは問題なくコピーされますが、アーカイブサーバー上の既存のメッセージが複製されます。
import imaplib
import sys
#copy from
f_server = 'some.secret.ip.address'
f_username = 'j@example.com'
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のブログ:imaplib-IMAP4クライアントライブラリ
Tyler Lesmannのブログ:Pythonとimaplibを使用したIMAPメールボックスのコピー
私はまだする必要があります:
- ライブサーバー上のメッセージを削除/消去します
- 重複をコピーしない(実際には、コピー後にオリジナルを削除することで修正されますが...)
- エラートラップ
アップデート2:
コピー時に重複を作成しない方法について誰かが何かアイデアがありますか?(今のところ、オリジナルを削除するオプションを除いて)私はテキストを検索することを考えましたが、ネストされた応答がそれを捨てることができることに気づきました。