C# 在C中使用Exchange Web服务托管API检索错误的邮箱项目#

C# 在C中使用Exchange Web服务托管API检索错误的邮箱项目#,c#,exchangewebservices,C#,Exchangewebservices,我正在尝试使用Exchange Web Services托管API从特定邮箱(我在其中拥有权限)检索收件箱项目。我首先通过AutoDiscoveryURL使用自己的电子邮件地址对代码进行了测试,效果很好。然而,当我尝试使用其他电子邮件地址时,EWS仍然检索我自己的收件箱项目。这是因为缓存还是什么 我的代码如下: ExchangeService ex=新的ExchangeService(ExchangeVersion.Exchange2010_SP1); 例如,自动发现URL(“someothe

我正在尝试使用Exchange Web Services托管API从特定邮箱(我在其中拥有权限)检索收件箱项目。我首先通过AutoDiscoveryURL使用自己的电子邮件地址对代码进行了测试,效果很好。然而,当我尝试使用其他电子邮件地址时,EWS仍然检索我自己的收件箱项目。这是因为缓存还是什么

我的代码如下:

ExchangeService ex=新的ExchangeService(ExchangeVersion.Exchange2010_SP1);
例如,自动发现URL(“someothermailbox@company.com");
FindItemsResults findResults=ex.FindItems(WellKnownFolderName.Inbox,新项目视图(10));
foreach(findResults.Items中的项目)
Console.WriteLine(项目主题);

指定给
AutodiscoverUrl
的电子邮件地址与您绑定到的邮箱无关

从另一个用户邮箱获取收件箱项目有(至少)两种方法:委托访问和模拟

如果您具有对其他用户邮箱的委托访问权限,则可以在调用
FindItems
时将邮箱指定为参数:

FindItemsResults<Item> findResults = ex.FindItems(
    new FolderId(WellKnownFolderName.Inbox, new Mailbox("someothermailbox@company.com")), 
    new ItemView(10));

免责声明:我编写上述代码时没有在真正的Exchange服务器上进行实际测试。

如果您想使用仅代表权限发送电子邮件,请在发送之前先保存电子邮件。它将设置发送邮件所需的smtp地址

        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
        service.Credentials = new WebCredentials("user1", "1234", "domain.com");
        service.AutodiscoverUrl("user2@domain.com");

        EmailMessage email = new EmailMessage(service);
        email.ToRecipients.Add("user2@domain.com");
        email.Subject = "HelloWorld";
        email.Body = new MessageBody("Sent by using the EWS Managed API");

        //save it first!
        email.Save(new FolderId(WellKnownFolderName.Drafts, "user1@domain.com"));

        email.Send();
我用它来避免这个错误:
“当以没有邮箱的帐户进行请求时,您必须为任何可分辨文件夹ID指定邮箱主SMTP地址。”

谢谢,因为我有代理访问权限(并且没有模拟权限),所以我采用了您的第一种方法,并且成功了!我可能花了太多时间才弄明白这一点:1)确定包含目标邮箱的筛选器:
导入模块ActiveDirectory;get aduser-filter*|其中{$\u.samaccountname-类似于“bob”}
,2)创建一个管理范围,其中包括目标邮箱
新的管理范围–名称bob\u targetuser–RecipientRestrictionFilter{samaccountname-类似于“bob”}
;3) 将作用域分配给对象ACL:
New ManagementRoleAssignment–Name appimpersonationrole–Role ApplicationImpersonation–允许的用户用户名ImpersonationRights–CustomRecipientWriteScope bob_targetuser
我试图使用模拟从共享帐户发送电子邮件,它无法处理以下错误:“该帐户没有模拟请求用户的权限。”但Exchange Online网站允许我作为共享用户发送电子邮件。这一直困扰着我,直到我找到了这个答案,类似的东西在我试图做的事情中起了作用。先存钱是关键。非常感谢。p、 我正在使用Save-then-send和savecopy。
ExchangeService ex = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
ex.AutodiscoverUrl("someothermailbox@company.com");
ex.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "someothermailbox@company.com");
ItemsResults<Item> findResults = ex.FindItems(WellKnownFolderName.Inbox, new ItemView(10));
        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
        service.Credentials = new WebCredentials("user1", "1234", "domain.com");
        service.AutodiscoverUrl("user2@domain.com");

        EmailMessage email = new EmailMessage(service);
        email.ToRecipients.Add("user2@domain.com");
        email.Subject = "HelloWorld";
        email.Body = new MessageBody("Sent by using the EWS Managed API");

        //save it first!
        email.Save(new FolderId(WellKnownFolderName.Drafts, "user1@domain.com"));

        email.Send();