如何使用 Exchange EWS 设置 SaveSentMessageFolder

How to set SaveSentMessageFolder using Exchange EWS

当我使用 CreateEmail() 调用创建草稿邮件时,如何预先设置目标保存文件夹,以便当用户按 "Send" 和 outlook 时,最终发送的项目将保存到?

在 outlook 中,它在选项 -> "Save Sent Item To" 下,但我不知道如何在 EWS 中执行此操作

谢谢

在 EWS 中,您可以指定要将发送的消息保存到哪个文件夹。如果您使用 EWS Managed API,您可以通过 Overload for Send 或 SendAndSaveCopy 执行此操作,否则默认值为当前安全主体的草稿文件夹和已发送项目文件夹。

如果您使用 EWS 创建草稿并使用 Outlook 发送,那么您需要将 PR_SENTMAIL_ENTRYID https://msdn.microsoft.com/en-us/library/office/cc842003.aspx 设置为您希望 Outlook 将邮件保存到的文件夹的 HexId

例如

        ExtendedPropertyDefinition  PR_SENTMAIL_ENTRYID = new ExtendedPropertyDefinition(0x0E0A,MapiPropertyType.Binary);
        TestMove.SetExtendedProperty(PR_SENTMAIL_ENTRYID,ConvertHexStringToByteArray("00000000BE1CDD3D9606274890F3DE4B7DDFBE490100751047FD18EA304D9D40B1428BAC20D00000364670AA0000"));

(这与 Outlook 设置的 属性 相同)

您需要确保使用文件夹的 HexId 而不是 EWSId 来获取 HexId 您可以使用 convertId 例如

        AlternateId ai = new AlternateId(IdFormat.EwsId, folder.Id.UniqueId, "gscales@datarumble.com");
        AlternateId Convertedai = (AlternateId)service.ConvertId(ai, IdFormat.HexEntryId);
        ExtendedPropertyDefinition  PR_SENTMAIL_ENTRYID = new ExtendedPropertyDefinition(0x0E0A,MapiPropertyType.Binary);
        TestMove.SetExtendedProperty(PR_SENTMAIL_ENTRYID, ConvertHexStringToByteArray(Convertedai.UniqueId));

        internal static byte[] ConvertHexStringToByteArray(string hexString)
    {
        if (hexString.Length % 2 != 0)
        {
            throw new ArgumentException(String.Format(CultureInfo.InvariantCulture, "The binary key cannot have an odd number of digits: {0}", hexString));
        }

        byte[] HexAsBytes = new byte[hexString.Length / 2];
        for (int index = 0; index < HexAsBytes.Length; index++)
        {
            string byteValue = hexString.Substring(index * 2, 2);
            HexAsBytes[index] = byte.Parse(byteValue, NumberStyles.HexNumber, CultureInfo.InvariantCulture);
        }

        return HexAsBytes;
    }  

干杯 格伦