【问题标题】:Set custom message for Follow-up text on email - EWS c#为电子邮件上的后续文本设置自定义消息 - EWS c#
【发布时间】:2020-06-26 08:30:04
【问题描述】:

我开发了一个引擎来自动处理使用 EWS(Exchange Web 服务)推送订阅发送到特定邮箱的电子邮件。一切正常,除了我需要像在 Outlook 中那样使用一些自定义消息设置后续标志文本(下面的屏幕截图):

自定义文字

设置标志文本后的电子邮件示例:

我正在使用下面的代码来执行此操作,但是文本不会显示在电子邮件上,只有日期会通过以下代码反映出来:

    public bool MoveToFolder(EmailMessage mail, string folderName, bool MarkForFollowUp, string FollowUpText)
    {
        try
        {
            var folderView = new FolderView(100);
            if (MarkForFollowUp)
            {
                try
                {
                    ExtendedPropertyDefinition followUpTextFlag = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings, "ChangeDetails", MapiPropertyType.String);
                    Flag flag = new Flag();
                    flag.FlagStatus = ItemFlagStatus.Flagged;
                    flag.StartDate = DateTime.Now;
                    flag.DueDate = DateTime.Now.AddHours(1);
                    mail.Flag = flag;

                    workLog.WriteVerbose($"Setting flag with followup-text: {FollowUpText}", "Notify.cs > MoveToFolder()");
                    mail.SetExtendedProperty(followUpTextFlag, FollowUpText);
                    mail.Update(ConflictResolutionMode.AutoResolve);
                    workLog.WriteVerbose($"Message follow-up flag set successfully.", "Notify.cs > MoveToFolder()");
                }
                catch (Exception ex)
                {
                    // Ignore error while settings the flag
                    workLog.WriteVerbose($"Error occurred while setting the follow-up flag. Reason: {ex.Message}", "Notify.cs > MoveToFolder()");
                }
            }

            folderView.PropertySet = new PropertySet(BasePropertySet.IdOnly);
            folderView.PropertySet.Add(FolderSchema.DisplayName);
            folderView.Traversal = FolderTraversal.Deep;

            FindFoldersResults findFolderResults = _service.FindFolders(WellKnownFolderName.Root, folderView);
            if (findFolderResults == default(FindFoldersResults))
            {
                return false;
            }

            try
            {
                FolderId folderId = findFolderResults.Cast<Folder>().FirstOrDefault(Folder => Folder.DisplayName == folderName).Id;
                mail.Move(folderId);
                return true;
            }
            catch
            {
                return false;
            }
        }
        catch (Exception)
        {
            return false;
        }
    }

【问题讨论】:

    标签: c# exchangewebservices


    【解决方案1】:

    您需要将 PidLidFlagRequest 扩展属性 https://docs.microsoft.com/en-us/office/client-developer/outlook/mapi/pidlidflagrequest-canonical-property 设置为您要显示的文本,例如

            ExtendedPropertyDefinition followUpTextFlag = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings, "ChangeDetails", MapiPropertyType.String);
    
            ExtendedPropertyDefinition PidLidFlagRequest = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Common, 0x8530, MapiPropertyType.String);
            ExtendedPropertyDefinition PidLidFlagString = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Common, 0x85C0, MapiPropertyType.Integer);
    
            Flag flag = new Flag();
            flag.FlagStatus = ItemFlagStatus.Flagged;
            flag.StartDate = DateTime.Now;
            flag.DueDate = DateTime.Now.AddHours(1);
            mail.Flag = flag;
            mail.SetExtendedProperty(PidLidFlagRequest, "PidFlag Blah Blah");
            mail.SetExtendedProperty(PidLidFlagString, 0);
            mail.SetExtendedProperty(followUpTextFlag, "Blah Balh");
            mail.Update(ConflictResolutionMode.AutoResolve);
    

    【讨论】:

    • 感谢您的意见。我会尽力让您知道这是否按预期工作。
    • 很抱歉延迟接受。在 PRODUCTION 服务器上进行更改之前,我需要通过更改管理流程。它按预期工作。再次感谢您的意见。
    猜你喜欢
    • 2019-12-21
    • 2019-08-04
    • 2016-02-22
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 2018-03-27
    • 2021-02-06
    • 1970-01-01
    相关资源
    最近更新 更多