2010-09-02 68 views
1

而尝试读取一个文件夹的ACL表文件夹,我就遇到了这个问题:修改Exchange ACL与蟒蛇

在C++工具(MFCMAPI)这个方法是用来获取属性PR_ACL_TABLE处于可用数据类型:

// Open the table in an IExchangeModifyTable interface 
EC_H(lpMAPIProp->OpenProperty(
    ulPropTag, 
    (LPGUID)&IID_IExchangeModifyTable, 
    0, 
    MAPI_DEFERRED_ERRORS, 
    (LPUNKNOWN FAR *)&lpExchTbl)); 

我想通了,这样做在python的win32:

table = mystore.OpenProperty(mapitags.PR_ACL_TABLE, IID_IExchangeModifyTable, 0 , mapi.MAPI_DEFERRED_ERRORS) 

但似乎MAPI扩展不知道IID_IExchangeModifyTable类型。我刚只是这个错误:

AttributeError的:'module' object has no attribute 'IID_IExchangeModifyTable

有谁知道另一种方式来获得并从由MAPI(和Python)交换修改ACL数据?

感谢 - Marquies

+0

只是一个想法:你是否试图用win32 com makepy工具生成这种类型?不确定,因为我没有安装Exchange,也不熟悉这个API。我希望它有帮助 – luc 2010-09-02 12:26:08

回答

1

按照docs,你需要一个PyIID对象。

However, in almost all cases, functions that expect a CLSID/IID as a param will accept either a string object, or a native PyIID object.

这么说,我已经看到了mapi.IID_IMessage与OpenProperty方法使用。

+0

感谢Mark,我之前尝试过mapi.IID_IExchangeModifyTable,也许这只是我身边的复制和粘贴错误。问题是Python MAPI没有为IID_IExchangeModifyTable接口实现。这在bugtracker上得到了证实:http://sourceforge.net/tracker/?func=detail&aid=3058134&group_id=78018&atid=551954 – marquies 2010-09-03 08:14:41

1

IExchangeModifyTable在edkmdb.h中声明 在python中使用mapi33吗?甚至在mapi33中声明了这个接口? 您可以在兑换中使用RDOFolder.ACL:http://www.dimastr.com/redemption/rdo/RDOACL.htm

+0

感谢edkmdb.h提示。我使用了MFCMAPI的一些库来编写pywin32 mapi的扩展来完成这项工作。我会将其捐献给该项目,让我们看看是否受欢迎。 – marquies 2010-09-20 14:58:08

0

看起来您试图访问消息存储对象上的ACL表。据我所知,ACL表特定于文件夹对象,并且不存在于消息存储中。尝试使用“mystore”对象打开商店内的特定文件夹,然后调用文件夹对象上的OpenProperty以检索ACL表。请确保您使用指定的MAPI_NO_CACHE和MAPI_MODIFY标志打开文件夹对象。