2010-09-02 109 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標誌打開文件夾對象。