当前位置:  开发笔记 > 编程语言 > 正文

使用win32com和/或active_directory,如何按名称访问电子邮件文件夹?

如何解决《使用win32com和/或active_directory,如何按名称访问电子邮件文件夹?》经验,为你挑选了1个好方法。

在使用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指向testsubdir 的对象?



1> 小智..:

我意识到这是一个老问题,但我最近一直在使用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希望这不会弊大于利.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有