By
Vika Zhou
更新日期:
文章目录
工作中每天都要收到大量的邮件,实在是太多了。 设置了定期归档任务, 将旧的邮件都移到了archive folder里,也有换时间来切换不同的文件, 来保持服务器上空间不会满,加快outlook启动的时间。但当要查找旧邮件时,就需要打开archive folder, 以致于Outlook卡死。一直想找个邮件归档软件来保存outlook里的旧邮件, 于是找到了MailStore。
MailStore功能是非常强大的,支持多种邮件导入方式,比如从IMAP、磁盘上的eml\msgy文件,也支持outlook。导入归档邮件最简单的方式就是读取outlook使用的pst文件,不过免费版本的Home Edition并不支持,需要Pro Edtion。归档邮件可以像在outlook两档式的查看,也支持用outlook来查看。
我所解决的问题就是,将归档的message从outlook导出来保存为.msg文件, 使用python 脚本来实现的。 在保存为.msg文件后,就可以导入到Mail Store里了。
看几张图吧。
- MailStore的主界面,最左侧是工具栏/导行,中间是邮件列,右边是邮件内容。 注意,邮件内容上的工具栏,可以从outlook时直接打开邮件,当想要回复旧的邮件时就非常之方便了。
- “Archive Email”选项。这里使用的Profile Name 是EML and MSG Files。从文件夹导入MSG 文件成功, MailStore会删除MSG文件。
下面是使用的python 脚本, 邮件文件存放到接收日期对应的子文件夹下。由于使用了outlook的COM接口, 在运行脚本的过程中, outlook会一直等待,这时是没法正常使用outlook的。所以,最好是在下班后启动脚本了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
import os import win32com.client
def saveMailAsFile(mailItem): root_dir = r'D:\msgStore2' try: dest_dir = os.path.join(root_dir, mailItem.ReceivedTime.Format('%Y/%m/%d')) except: return if not os.path.exists(dest_dir): os.makedirs(dest_dir) mailItem.SaveAs(os.path.join(dest_dir, str(mailItem.EntryID) + '.msg'))
def deleteMail(mailItem): try: mailItem.Delete() except Exception, e: print 'Exception when delete', mailItem.Subject print e
def saveMailAndDelete(mailItem): saveMailAsFile(mailItem) deleteMail(mailItem)
def openOutlookFolderWithConfig(config, mailHandler): outlookApp = win32com.client.gencache.EnsureDispatch('Outlook.Application') nsMAPI = outlookApp.GetNamespace('MAPI') folder = nsMAPI
fPaths = config['folder'].strip('/').split('/') for p in fPaths: folder = folder.Folders.Item(p) print 'Location:', folder.FullFolderPath while True: emailList = folder.Items print len(emailList) if len(emailList) == 0: break for msg in emailList: mailHandler(msg) def exportMSG(): config = { 'folder': 'Archive Folders/Inbox', } openOutlookFolderWithConfig(config, saveMailAndDelete)
if __name__ == '__main__': exportMSG()
|