我想在使用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
这样的行为是设计的吗?或者我可以使用目标文件夹而不仅仅是众所周知的文件夹?
答案 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邮箱中的文件夹。谁的邮箱包含“项目”?我不记得是否可以使用模拟来复制邮箱。我很想知道它对你有用。