首页 > 解决方案 > EWS 在 WellKnownFolderName.SentItems 中保存已发送的项目

问题描述

我正在尝试与用户A一起发送EmailMessageusing并将发送的项目保存在用户B的文件夹中。基本上它有效。我遇到的唯一问题是,该项目被保存为草稿,而不是作为已发送的项目。EWSSentItems

编码:

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time");

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2, timeZone)
{
    Url = new Uri(uri),
    Credentials = new WebCredentials(new NetworkCredential(user, password, domain)),
    UseDefaultCredentials = false,
};

EmailMessage message = new EmailMessage(service)
{
    Subject = subject,
    Body = new MessageBody(BodyType.HTML, fullBody)
};
message.From = email;
message.ToRecipients.Add(email);

FolderId folderId = new FolderId(WellKnownFolderName.SentItems, email);

我尝试了什么:

// Simply sends the message
message.Send();

// Sends the item but is it not saved in the sentItems of email-account
FolderId folderId = new FolderId(WellKnownFolderName.SentItems, email);
message.SendAndSaveCopy(folderId);

// Sends the item, saves the item in the right folder, but it is saved as a draft, not as a sent item
FolderId folderId = new FolderId(WellKnownFolderName.SentItems, email);
message.Send();
message.Move(folderId);

我错过了什么或做错了什么?

家伙告诉简单地保存然后保存使用folderId,但在这种情况下我收到以下错误:

This operation can't be performed because this service object already has an ID. To update this service object, use the Update() method instead.

标签: c#exchangewebservicessendmailmessage

解决方案


经过一些测试,我发现正确的程序如下:

FolderId folderId = new FolderId(WellKnownFolderName.SentItems, email);
message.SendAndSaveCopy(folderId);

但是,必须存在一个错误,因为该项目始终保存在用于验证 ExchangeService 的用户的 sentItems 文件夹中,而忽略了folderId传递的参数。
解决方案(解决方法)是按照Microsoft 文档的说明模拟用户。这里是模拟代码:

service.AutodiscoverUrl(email);
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, email);

它有效......我想知道其他人是否能够以适当的方式安排它。


推荐阅读