如何使用Exchange EWS

时间:2015-04-23 10:00:17

标签: outlook exchangewebservices

当我使用CreateEmail()调用创建草稿邮件时,如何预先设置目标保存文件夹,以便在用户按下"发送"和前景?

在展望中,它位于选项 - >> "将已发送的项目保存到",但我不知道如何在EWS中执行此操作

谢谢

1 个答案:

答案 0 :(得分:1)

在EWS中,您可以指定要将发送的邮件保存到哪个文件夹。如果您使用EWS托管API,则通过Overload for Send或SendAndSaveCopy执行此操作,否则默认将是当前安全主体的drafts文件夹和sent-items文件夹。

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

例如

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

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

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

TypedQuery<UserActionPerUserResult> messagesQuery = entityManager.createQuery(
   "SELECT e from UserActionPerUserResult e JOIN FETCH e.emailMessages em WHERE e.id = 1 and e.userAction.id = 1", UserActionPerUserResult.class);
List<UserActionPerUserResult> resultList = messagesQuery.getResultList();

干杯 格伦

相关问题