5

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

我正在努力寻找有关如何连接到特定帐户的任何好信息!该应用程序将在某人的笔记本电脑上运行(假设是我的),因此将有一个默认帐户,Outlook 在打开时会连接到该帐户。所以:

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

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

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

4

3 回答 3

5

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

Outlook Interop仅允许您以交互式桌面帐户(当前登录用户)的身份进行连接。连接到其他帐户的唯一方法是当前交互帐户添加了共享邮箱

于 2012-07-19T13:58:31.807 回答
1

您也可以为此使用Redemption - 以可以访问相关邮箱的域用户身份运行您的代码,调用RDOSession对于该用户,然后使用RDOSessionLogonExchangeMailbox打开其他用户的邮箱。/ 。GetSharedMailboxGetSharedDefaultFolder

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

于 2012-07-19T20:20:22.387 回答
1

如果您在一台机器上定义了 2 个帐户,则可以使用以下内容:示例

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);
}
于 2015-08-30T07:29:48.440 回答