我目前正在Visual Studio中使用c#编程Outlook插件。现在我想读取缓存的现有条目,以便自动将其中包含的联系人保存为地址簿中的条目。谁能帮助我进一步了解如何访问缓存,然后实现我的功能?
到目前为止,我已经做了以下步骤:public partial class ThisAddIn
{
...
private Outlook.Application OutlookApplication;
private MAPIFolder inboxFolder;
...
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
...
inboxFolder = Application.GetNamespace("MAPI").GetDefaultFolder(OlDefaultFolders.olFolderInbox);
...
}
private void saveContact()
{
StorageItem storage = inboxFolder.GetStorage("IPM.Configuration.Autocomplete", OlStorageIdentifierType.olIdentifyByEntryID);
PropertyAccessor propertyAcc = storage.PropertyAccessor;
byte[] got = propertyAcc.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x7C090102");
}
当打开一个检查器时,我正在调用测试方法。
到目前为止,我得到以下错误消息:System.Runtime.InteropServices.COMException: "无法在此文件夹中创建StorageItem项。文件夹是只读的,或者此文件夹中不允许存储项。">
有人能帮我改正我的错误吗?
自动完成(昵称)缓存流存储在Inbox文件夹中具有IPM.Configuration.Autocomplete
消息类的隐藏消息中(请参阅该文件夹的相关内容)。格式有文档记录,请参阅昵称缓存。您可以使用MAPIFolder.GetStorage
访问该消息,然后您可以获得流本身:
Set propAcc = storage.PropertyAccessor
Set got = propertyAcc.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x7C090102")
你可能会发现在VBA线程中获取Outlook的自动完成地址列表很有帮助。
自动完成流作为隐藏(关联)消息与"IPM.Configuration.Autocomplete"
的消息类存储在Inbox文件夹中。你可以在OutlookSpy中看到数据(我是它的作者):进入收件箱文件夹,点击OutlookSpy功能区上的IMAPIFolder按钮,进入"关联内容";选项卡,使用PR_MESSAGE_CLASS == "IPM.Configuration.Autocomplete"找到消息,选择PR_ROAMING_BINARYSTREAM
属性查看其内容。
您可以使用Outlook对象模型(MAPIFolder.GetStorage("IPM.Configuration.Autocomplete", OlStorageIdentifierType.olIdentifyByMessageClass
)打开该消息,使用PropertyAccessor.GetProperty
读取属性,然后解析它。注意,大的(>30kB)自动完成流不能使用PropertyAccessor
打开。
如果使用Redemption选项(我也是它的作者),它将自动完成作为RDONicknames集合公开:
set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
set Nicknames = Session.GetNicknames
for each NickName in NickNames
Debug.Print NickName.Name & " - " & NickName.SmtpAddress
next