2012-07-19 50 views
5

我正在申请访问Exchange 2003服务器上托管的特定电子邮件帐户,并对发现的未读电子邮件执行一些操作。我对MAPI的工作原理并不十分了解,如果我错过了非常明显的东西,我不会感到惊讶!我是(不幸)使用C#,我已阅读有关这可能会导致的问题(,我害怕的影响,但我的老板想这样做,所以..)。如何连接到特定的Outlook/Exchange帐户?

我很努力地找到关于如何连接到特定帐户的任何好信息! 该应用程序将从某些笔记本电脑(让我们说我的)运行,所以会有一个Outlook连接到打开时的默认帐户。所以:

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

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

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

回答

4

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

的Outlook互操作只会让你连接的交互式桌面账户(用户登录当前)。连接到其他帐户的唯一方法是当前交互式帐户有added the shared mailbox

+0

(叹气)...我怀疑这可能是这种情况,但也和其他的路线继续前进。感谢您的建议。链接是有用的起点。 – Jammerz858 2012-07-19 15:29:58

1

您也可以使用Redemption - 将您的代码作为可访问相关邮箱的域用户运行,请拨打RDOSessionLogonExchangeMailbox,然后使用RDOSession打开其他用户的邮箱。 GetSharedMailbox/GetSharedDefaultFolder

由于Exchange 2013不再允许旧式RPC连接(仅RPC-over-HTTP或基于HTTP的MAPI),因此可以使用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 = "[email protected]"; 

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

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