导出 Standard/Extended 用户问候语 (Exchange 2016) - 用于 XMedius AVST

Export Standard/Extended User Greetings (Exchange 2016) - For Use In XMedius AVST

在早些时候的 post 2018 年 6 月 18 日(顺便说一句,我的生日),一位用户询问了 "Hopefully a simple question - at one time I know when user's recorded their personal greetings for UM voicemail in o365 (regular greeting and/or extended absence greeting) these were stored in their Exchange inbox using a special item type (i.e. "IPM.Configuration.Um.CustomGreetings.External")。但是,设置我的测试 o365 设置,配置 UM 等等,在记录我的个人问候语并从收件箱的根目录开始浏览每个项目之后,(大约 900 多个项目 - 里面有很多奇怪的东西)- 我不知道再也看不到这样的东西了。很多日志,activity 项,一些消息,但没有关于问候语的信息。将所有可以转换为电子邮件类型的内容提取到一个文件夹中,我仔细检查了每一个 - 没有任何希望。任何人都有用户 UM 的自定义问候语(不是自动助理录音 - 那是不同的野兽)的线索在哪里以及如何到达它? 在阅读答案以及Jeff Lindborg 提供的代码,我认为我正在取得进展。经过大量试验和错误,我终于能够安装 EWS-FAI 模块以及 Exchange Web 服务 API。不幸的是,当涉及到 运行 提供的代码时,这就是我感到困惑的地方。我不是开发人员或 'coder' 任何形式,但我一直在寻找有效和高效的方法来完成我的工作。话虽如此,我正在尝试在 Win10 工作站上 运行,但似乎无法弄清楚这需要在哪个程序中 运行。我已经尝试过 Powershell,但这不起作用。我有权访问邮箱模拟所需的帐户以及所需的任何其他权限。我提供了最初提供的代码以供审查。如有任何额外帮助,我们将不胜感激。

代码

ExchangeService _service;
        _service = new ExchangeService(ExchangeVersion.Exchange2016); // Exchange2013_SP1);
        _service.Credentials = new WebCredentials("user@domain", "myPw");
        _service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");

        //select the user you're fetching greetings for
        _service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "user@domain");

        //get the root folder for the current account
        var oParamList = new List<FolderId> {WellKnownFolderName.Root};
        var oTemp = _service.BindToFolders(oParamList, PropertySet.FirstClassProperties);
        var oRoot = oTemp.First().Folder;

        var oView = new ItemView(50)
        {
            PropertySet = new PropertySet(BasePropertySet.FirstClassProperties),
            Traversal = ItemTraversal.Associated
        };
        SearchFilter oGreetingFilter = new SearchFilter.ContainsSubstring(ItemSchema.ItemClass,
            "IPM.Configuration.Um.CustomGreetings", ContainmentMode.Substring, ComparisonMode.IgnoreCase);
        var oResults = _service.FindItems(oRoot.Id, oGreetingFilter, oView);

        //fetch the binary for the greetings as values 
        var oPropSet = new PropertySet(BasePropertySet.FirstClassProperties);
        var oRoamingBinary = new ExtendedPropertyDefinition(31753, MapiPropertyType.Binary);
        oPropSet.Add(oRoamingBinary);
        _service.LoadPropertiesForItems(oResults, oPropSet);

        var strFileName = "";
        foreach (var oItem in oResults.Items)
        {
            if (oItem.ItemClass.Equals("IPM.Configuration.Um.CustomGreetings.External",
                StringComparison.InvariantCultureIgnoreCase))
                strFileName = "jlindborg_Standard.wav";
            if (oItem.ItemClass.Equals("IPM.Configuration.Um.CustomGreetings.Oof",
                StringComparison.InvariantCultureIgnoreCase))
                strFileName = "jlindborg_Extended.wav";
            File.WriteAllBytes("d:\" + strFileName, (byte[]) oItem.ExtendedProperties.First().Value);
        }
    }

您发布的代码是 c#,因此您需要使用 Visual Studio 创建 C# 应用程序添加对 EWS Managed API 的引用并编译它以使其工作(您将需要聘请开发人员或学习一些基本编码)。

EWS-FAI 是一个 powershell 模块,它应该能够 return 该项目并且您应该能够将其写入文件,例如

   $MailboxName = "mailbox@domain.com" 
   $Item = Get-FAIItem -MailboxName $MailboxName -ConfigItemName Um.CustomGreetings.External -Folder Inbox -ReturnConfigObject
   [System.IO.File]::WriteAllBytes(("C:\temp\" + $MailboxName + ".wav"),$Item.BinaryData)