我在Outlook 2010中配置了两个Exchange帐户,但无法找到如何到达第二个帐户的收件箱。 Session.GetDefaultFolder()
总是返回第一个。从Outlook获取收件箱
即使枚举Session.Accounts,找到正确的帐户并呼吁Session.Account(found one).Store.GetDefaultFolder()
返回错误收件箱(从默认交换帐户,而不是辅助)。
我在Outlook 2010中配置了两个Exchange帐户,但无法找到如何到达第二个帐户的收件箱。 Session.GetDefaultFolder()
总是返回第一个。从Outlook获取收件箱
即使枚举Session.Accounts,找到正确的帐户并呼吁Session.Account(found one).Store.GetDefaultFolder()
返回错误收件箱(从默认交换帐户,而不是辅助)。
这是否显示您所有可用的收件箱?
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")
将为您获取每个邮箱的收件箱。
使用Store.GetDefaultFolder而不是Namespace.GetDefaultFolder。 注意Store.GetDefaultFolder在Outlook 2010中添加在早期版本的Outlook使用扩展MAPI(C++或Delphi)或Redemption(RDOStore.GetDefaultFolder。
也许你早就在这个问题上放弃了,但在这里不用...
我以前有同样的问题,我通过添加Outlook帐户管理API解决了这个问题。不幸的是你,这个面向C++的API。
(我的插件已经用C++开发的)此外,VBA和.NET插件使用的OOM(Outlook对象模型)对多个帐户的支持很差(如果有的话)。通过添加到交换帐户,您可以实质上是将多个帐户添加到您的个人资料
所以,您可能不得不在一个级别上使用MAPI和C++,然后在Outlook帐户管理API中挂钩。这是很多工作,但这完全是我所做的,而且它像魅力一样工作。
而且,这里有一个例子: http://www.codeproject.com/KB/IP/IOlkAccountManager.aspx
我想这是一个旧的,但有一天可能有人需要它。 这里是迭代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);
}
}
想知道我的代码是否适合您。 – JimmyPena