从Outlook获取收件箱

时间:2011-07-27 18:05:12

标签: vba outlook outlook-addin outlook-vba outlook-object-model

我在Outlook 2010中配置了两个Exchange帐户,但是我无法找到如何到达第二个帐户的收件箱。 Session.GetDefaultFolder() 始终返回第一个。

即使枚举Session.Accounts,找到合适的帐户并致电 Session.Account(found one).Store.GetDefaultFolder() 也会返回错误的收件箱(来自默认的兑换帐户,而不是辅助帐户)。

5 个答案:

答案 0 :(得分:4)

这是否显示了所有可用的收件箱?

Sub LoopThroughInboxes

Dim ol As Outlook.Application
Dim ns As Outlook.NameSpace
Dim i As Long

Set ol = Outlook.Application
Set ns = ol.GetNamespace("MAPI")

For i = 1 To ns.Folders.Count
 Debug.Print ns.Folders(i).Name
Next i

如果是,那么ns.Folders(i).Folders("Inbox")将为您提供每个邮箱的收件箱。

答案 1 :(得分:3)

使用Store.GetDefaultFolder而不是Namespace.GetDefaultFolder。 请注意,Outlook 2010中添加了Store.GetDefaultFolder。在早期版本的Outlook中,使用扩展MAPI(C ++或Delphi)或Redemption(RDOStore.GetDefaultFolder。

答案 2 :(得分:3)

转到Mapix库

Mapix库链接如下所示

Mapix library for C++/MFC

注意:此资料库适用于MS Outlook中的收件箱电子邮件

答案 3 :(得分:1)

也许你早就放弃了这个问题,但这里有......

之前我遇到过同样的问题,我通过添加Outlook帐户管理API解决了这个问题。不幸的是,这是一个面向c ++的API。 (我的插件已经用c ++开发了)

此外,VBA和.NET插件使用的OOM(Outlook对象模型)对多个帐户的支持很差(如果有的话)。通过添加到兑换帐户,您基本上已将多个帐户添加到您的个人资料中。

因此,您可能必须使用带有c ++的MAPI进入某个级别,然后挂钩Outlook帐户管理API。这是一项很多工作,但这是我所做的,它的确如此迷人。

另外,这是一个例子: http://www.codeproject.com/KB/IP/IOlkAccountManager.aspx

答案 4 :(得分:0)

我想这是一个旧的,但有一天可能需要它。 以下是迭代Outlook中所有“已发送邮件”文件夹的代码。 (我认为这只适用于Outlook 2010及更新版本。)

MSOutlook._NameSpace ns = Globals.ThisAddIn.Application.GetNamespace("MAPI");
var accounts = ns.Accounts;
foreach (MSOutlook.Account account in accounts)
{
    try
    {
        // You might want to test if DeliveryStore is null, in case this account is not an Exchange account
        MSOutlook.MAPIFolder sentFolder = account.DeliveryStore.GetDefaultFolder(MSOutlook.OlDefaultFolders.olFolderSentMail);
        if(sentFolder != null)
        {
            SentItems = sentFolder.Items;
            SentItems.ItemAdd += LogMethods.Items_Sent_ItemAdd;
        }
    }
    catch (Exception e)
    {
        BaseClass.log.Log(LoggLevel.Warning, e.Message);
    }
}