如何连接到特定的Outlook/Exchange帐户?

5
我正在制作一个应用程序,用于访问托管在Exchange 2003服务器上的特定电子邮件帐户,并对找到的未读邮件执行一些操作。我不太了解MAPI的工作原理,所以如果我错过了一些非常明显的东西,我也不会感到太惊讶!我(不幸地)使用C#,我已经阅读了可能引起问题的问题(并且担心后果,但我的老板希望这样做..)。
我正在努力寻找有关如何连接到特定帐户的任何好信息!该应用程序将从某人的笔记本电脑(比方说我的)运行,因此打开时Outlook会连接到默认帐户。所以:
  • 是否可以从用户已经拥有自己的帐户并且可能已经打开Outlook的计算机上连接到另一个帐户?

  • 如果可能。我该怎么做?当启动Outlook互操作对象时,应用程序会自动获取用户帐户并将当前用户设置为该帐户。我希望Logon()方法可以解决这个问题,但事实并非如此。即使只运行Outlook.Application olApp = new Outlook.Application();,也会将当前用户设置为标准帐户。

我希望我的问题表达得清楚(可能不是),但请在评论中提出更详细的问题,我会尽快回复。就像我说的那样,我对MAPI和Exchange知之甚少,所以我很难用正确的方式表达我的问题。
3个回答

5
如果您想连接到特定的电子邮件帐户,且该帐户在 Exchange 2003 上,则需要使用WebDAVCDOEXExOLEDB。如果您使用的是 Exchange 2007 或更新版本,则可以使用EWSOutlook Interop只能让您以交互式桌面帐户(当前登录用户)身份连接。唯一连接到其他帐户的方法是当前交互式帐户已经添加了共享邮箱

(叹气)...我本来就怀疑可能会是这样,但还是得走其他路线。感谢建议。链接是有用的起点。 - Jammerz858

1
在OOM中,您可以使用Namespace.GetSharedDefaultFolder(假设当前用户具有访问该共享文件夹的权限)。
您还可以使用Redemption(我是其作者) - 以域用户身份运行代码,该用户可以访问相关的邮箱,调用RDOSessionLogonExchangeMailbox为该用户,然后使用RDOSessionGetSharedMailbox/GetSharedDefaultFolder打开其他用户的邮箱。
自从Exchange 2013不再允许旧式RPC连接(仅允许RPC-over-HTTP或MAPI-over-HTTP)以来,您可以使用RDOSession.LogonHostedExchangeMailbox(适用于Exchange 2013和Exchange 2010)。

1
如果您在一台计算机上定义了2个账户,您可以使用以下方法:example
Outlook.Application app = new Outlook.Application();
Outlook.NameSpace ns = app.GetNamespace("MAPI");

// optional
//object missing = Type.Missing;
//ns.Logon(missing, missing, true, false);

// additional email address 
string recipientName = "myEmail@myDomain";

Outlook.Recipient recip = ns.CreateRecipient(recipientName);
recip.Resolve();

if (recip.Resolved)
{
Outlook.MAPIFolder inboxFolder = ns.GetSharedDefaultFolder(recip, Outlook.OlDefaultFolders.olFolderInbox);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接