用Python修改Exchange文件夹的ACL
我在尝试读取一个文件夹的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)获取和修改Exchange中的ACL数据?
谢谢 - Marquies
3 个回答
0
看起来你想要访问消息存储对象上的ACL表。根据我的了解,ACL表是特定于文件夹对象的,而在消息存储中是不存在的。你可以试着用你的“mystore”对象打开存储中的某个特定文件夹,然后在这个文件夹对象上调用OpenProperty来获取ACL表。同时,确保你在打开文件夹对象时,指定了MAPI_NO_CACHE和MAPI_MODIFY这两个标志。
1
根据文档,你需要一个PyIID对象。
不过,几乎在所有情况下,期待CLSID/IID作为参数的函数都可以接受字符串对象或者原生的PyIID对象。
也就是说,我见过mapi.IID_IMessage和OpenProperty方法一起使用。
1
IExchangeModifyTable
是在 edkmdb.h 这个文件里声明的。你在用 Python 的 mapi33 吗?这个接口在 mapi33 里有声明吗?你可以在 Redemption 中使用 RDOFolder.ACL
(我是它的作者):http://www.dimastr.com/redemption/rdo/RDOACL.htm