【问题标题】:EWS save sent item in WellKnownFolderName.SentItemsEWS 在 WellKnownFolderName.SentItems 中保存已发送的项目
【发布时间】:2019-02-28 17:03:14
【问题描述】:

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

代码:

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);

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

This guy 告诉简单保存,然后使用文件夹 ID 保存,但在这种情况下,我收到以下错误:

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# exchangewebservices send mailmessage


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 可以参考这个链接:stackoverflow.com/questions/26121609/…
    • 感谢您的回答,但它不起作用。正如我在问题中提到的,如果 userA.Email != userB.Email,则跳过必须保存项目的文件夹 ID。它仅适用于模拟。
    • 也许你可以参考这个链接:social.technet.microsoft.com/Forums/office/en-US/…
    • 我已经尝试使用Set-MailboxSentItemsConfiguration 编辑配置。没有帮助。
    • 您应该将该项目保存到草稿文件夹中,然后调用 item.Send()
    猜你喜欢
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    相关资源
    最近更新 更多