我正在创建一个应用程序来访问Exchange 2003服务器上托管的特定电子邮件帐户,并对找到的未读电子邮件执行一些操作。我对MAPI的工作原理并不是很了解,所以如果我错过了一些非常明显的东西,我也不会感到惊讶!我(很遗憾)使用C#,我已经读过这可能导致的问题(并且我担心会产生影响,但是我的老板希望它能像这样完成...... )
我很难找到关于如何连接到特定帐户的任何好消息! 该应用程序将从某人的笔记本电脑(让我们说我的)运行,因此Outlook将在打开时连接到默认帐户。所以:
是否可以从用户已拥有自己的帐户且可能已打开Outlook的计算机上连接到另一个帐户?
如果有可能的话。我该怎么做呢?启动Outlook互操作对象时,应用程序会自动获取用户帐户并将当前用户设置为该帐户。
我原本希望Logon()
方法对此进行排序,但不是。即使只是跑步
Outlook.Application olApp = new Outlook.Application();
将当前用户设置为标准帐户。
我希望我有意义(可能不是),但随时可以在评论中提出更详细的问题,我会尽快回复。就像我说的,我对MAPI和Exchange知之甚少,所以我在努力解决我的问题。
答案 0 :(得分:5)
如果要连接到 Exchange 2003 中的特定电子邮件帐户,则需要使用WebDAV,CDOEX或ExOLEDB。如果您使用的是Exchange 2007+,则可以使用EWS。
Outlook Interop 只允许您作为交互式桌面帐户(当前登录用户)进行连接。连接到其他帐户的唯一方法是当前的互动帐户有added the shared mailbox。
答案 1 :(得分:1)
您也可以使用Redemption - 以可以访问相关邮箱的域用户身份运行您的代码,为该用户致电RDOSession。LogonExchangeMailbox
,然后打开其他用户'邮箱使用RDOSession。GetSharedMailbox
/ 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);
}