用Python修改Exchange文件夹的ACL

1 投票
3 回答
640 浏览
提问于 2025-04-16 03:37

我在尝试读取一个文件夹的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

撰写回答