在使用win32com和/或active_directory的python w/Outlook 2007中,如何获取对子文件夹的引用,以便将MailItem移动到此子文件夹?
我有一个收件箱结构,如:
收件箱 | + - 测试 | ` - todo
我可以访问收件箱文件夹,如:
import win32com.client import active_directory session = win32com.client.gencache.EnsureDispatch("MAPI.session") win32com.client.gencache.EnsureDispatch("Outlook.Application") outlook = win32com.client.Dispatch("Outlook.Application") mapi = outlook.GetNamespace('MAPI') inbox = mapi.GetDefaultFolder(win32com.client.constants.olFolderInbox) print '\n'.join(dir(inbox))
但是,当我尝试test
根据Microsoft的示例获取子目录时,该inbox
对象没有Folders
接口或任何方式来获取子目录.
如何获得Folder
指向test
subdir 的对象?
我意识到这是一个老问题,但我最近一直在使用win32com软件包,发现文档很麻烦,至少可以说...我希望有人,有一天可以挽救我经历过的动荡试图围绕MSDN的混乱说明
这是一个python脚本遍历Outlook文件夹,访问我喜欢的电子邮件的例子.
免责声明 我转移了代码并取出了一些敏感信息,所以如果你想复制并粘贴它并让它运行,祝你好运.
import win32com import win32com.client import string import os # the findFolder function takes the folder you're looking for as folderName, # and tries to find it with the MAPIFolder object searchIn def findFolder(folderName,searchIn): try: lowerAccount = searchIn.Folders for x in lowerAccount: if x.Name == folderName: print 'found it %s'%x.Name objective = x return objective return None except Exception as error: print "Looks like we had an issue accessing the searchIn object" print (error) return None def main(): outlook=win32com.client.Dispatch("Outlook.Application") ons = outlook.GetNamespace("MAPI") #this is the initial object you're accessing, IE if you want to access #the account the Inbox belongs too one = '@ .com' #Retrieves a MAPIFolder object for your account #Object functions and properties defined by MSDN at #https://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.mapifolder_members(v=office.14).aspx Folder1 = findFolder(one,ons) #Now pass you're MAPIFolder object to the same function along with the folder you're searching for Folder2 = findFolder('Inbox',Folder1) #Rinse and repeat until you have an object for the folder you're interested in Folder3 = findFolder( ,Folder2) #This call returns a list of mailItem objects refering to all of the mailitems(messages) in the specified MAPIFolder messages = Folder3.Items #Iterate through the messages contained within our subfolder for xx in messages: try: #Treat xx as a singular object, you can print the body, sender, cc's and pretty much every aspect of an e-mail #In my case I was writing the body to .txt files to parse... print xx.Subject,xx.Sender,xx.Body #Using move you can move e-mails around programatically, make sure to pass it a #MAPIFolder object as the destination, use findFolder() to get the object xx.Move(Folder3) except Exception as err: print "Error accessing mailItem" print err if __name__ == "__main__": main()
PS希望这不会弊大于利.