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

时间:2012-07-19 13:09:03

标签: c# outlook exchange-server mapi

我正在创建一个应用程序来访问Exchange 2003服务器上托管的特定电子邮件帐户,并对找到的未读电子邮件执行一些操作。我对MAPI的工作原理并不是很了解,所以如果我错过了一些非常明显的东西,我也不会感到惊讶!我(很遗憾)使用C#,我已经读过这可能导致的问题(并且我担心会产生影响,但是我的老板希望它能像这样完成......

我很难找到关于如何连接到特定帐户的任何好消息! 该应用程序将从某人的笔记本电脑(让我们说我的)运行,因此Outlook将在打开时连接到默认帐户。所以:

  • 是否可以从用户已拥有自己的帐户且可能已打开Outlook的计算机上连接到另一个帐户?

  • 如果有可能的话。我该怎么做呢?启动Outlook互操作对象时,应用程序会自动获取用户帐户并将当前用户设置为该帐户。 我原本希望Logon()方法对此进行排序,但不是。即使只是跑步     Outlook.Application olApp = new Outlook.Application(); 将当前用户设置为标准帐户。

我希望我有意义(可能不是),但随时可以在评论中提出更详细的问题,我会尽快回复。就像我说的,我对MAPI和Exchange知之甚少,所以我在努力解决我的问题。

3 个答案:

答案 0 :(得分:5)

如果要连接到 Exchange 2003 中的特定电子邮件帐户,则需要使用WebDAVCDOEXExOLEDB。如果您使用的是Exchange 2007+,则可以使用EWS

Outlook Interop 只允许您作为交互式桌面帐户(当前登录用户)进行连接。连接到其他帐户的唯一方法是当前的互动帐户有added the shared mailbox

答案 1 :(得分:1)

您也可以使用Redemption - 以可以访问相关邮箱的域用户身份运行您的代码,为该用户致电RDOSessionLogonExchangeMailbox,然后打开其他用户'邮箱使用RDOSessionGetSharedMailbox / GetSharedDefaultFolder

由于Exchange 2013不再允许旧式RPC连接(仅RPC-over-HTTP或MAPI-over-HTTP),因此可以使用RDOSession.LogonHostedExchangeMailbox(适用于Exchange 2013和Exchange 2010)。

答案 2 :(得分: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);
}