EWS Item.Copy导致ErrorAccessDenied

时间:2014-03-16 14:18:22

标签: exchangewebservices ews-managed-api

我想在使用EWS托管API的邮箱之间复制项目。在这里,我遇到了奇怪的情况。

当我首先尝试获取目标文件夹然后使用其ID复制项目时,我收到错误ErrorAccessDenied。

this.exchangeService.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "test1@test.local");
var folder = Folder.Bind(this.exchangeService, WellKnownFolderName.Inbox);
item.Copy(folder.Id);

This gets an error

如果我创建一个指定众所周知的文件夹名称(收件箱)和邮箱名称的FolderId对象实例,我没有遇到任何问题。

var folderId = new FolderId(WellKnownFolderName.Inbox, new Mailbox("test1@test.local"));
item.Copy(folderId);

This works

这样的行为是设计的吗?或者我可以使用目标文件夹而不仅仅是众所周知的文件夹?

1 个答案:

答案 0 :(得分:0)

我相信这种行为是设计的。在第一个示例中,呼叫帐户(acct1)正在模拟acct2。我认为请求正在作为acct2处理,试图绑定到acct1的收件箱,因为调用的凭据与acct1相关联。呼叫的上下文基于包含目标邮箱的SMTP地址的标识符。

您的第二个示例明确标识了应定位的邮箱。基于该文件夹标识符访问的所有后续标识符将具有test1@test.local的上下文。

我认为你可以改变你对它的第一次调用以使其发挥作用:

var folder = Folder.Bind(this.exchangeService, new FolderId(WellKnownFolderName.Inbox, new Mailbox("test1@test.local")));

我知道您正在复制到test1@test.local邮箱中的文件夹。谁的邮箱包含“项目”?我不记得是否可以使用模拟来复制邮箱。我很想知道它对你有用。