我们的办公室使用两台 IMAP 服务器来处理电子邮件,一台是接收服务器,保存最近的电子邮件,另一台是存档服务器。我们主要使用 Outlook 2010,我们目前的流程是定期将发送的邮件从接收服务器拖到存档中。
今天我被要求研究编写一个脚本,它会定期(可能使用 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:
有人对复制时如何不创建重复项有任何想法吗?(暂时不包括删除原件的选项)我考虑过搜索文本,但意识到嵌套回复可能会将其排除在外。