【问题标题】:UWP mail API - from non-UWP project (but desktop-bridge)UWP 邮件 API - 来自非 UWP 项目(但桌面桥)
【发布时间】:2018-03-04 05:55:47
【问题描述】:

我正在将我的应用程序移植到 UWP,并且 UWP 中不允许使用某些 API - 其中之一是经典邮件 API (MAPI)。

我发现的是:

  • UWP 公开了新的邮件 API
  • 任何引用某些 WinRT 的应用程序 DLL(我的应用程序是 WPF Windows 桌面应用程序)可以使用新的 UWP API(包括新的邮件 API)。 (顺便说一句。UWP 和 WPF UI 不兼容 - 但这是另一回事,我们不在这里处理这个(跨平台 UI 使用))

我已经使用光传感器(从 Windows 控制台应用程序使用的 UWP API)进行了一些成功的测试,并希望邮件 api 也能正常工作。但是,当我运行这个简单的代码时 - 它在 UWP 项目中编译时可以工作,但是从 WPF 应用程序中运行时却不能。

EmailMessage emailMessage = new EmailMessage();
emailMessage.To.Add(new EmailRecipient("someone@gmail.com"));
emailMessage.Body = "message body";
await EmailManager.ShowComposeNewEmailAsync(emailMessage);

运行时以通信结束: 不支持请求 来自hresult的异常(0x80070032)

问题是: 这是一个已知的限制吗,UWP 公开的邮件 api 不能在 WPF(或任何非 UWP 主机)上工作? 谁能说出这是否是一般行为而不是特定于我的环境? (为了在WPF项目中编译,需要添加对两个DLL的引用:System.runtime.windowsruntime.dll和Windows.winmd)

我尝试从“原始”WPF 应用程序调用 UWP 邮件 api,并将其打包并安装为 Windows 桌面 UWP 应用程序 - 我得到相同的否定结果。

仅当从 UWP 应用程序运行时,代码才会显示邮件客户端

提前致谢, 迈克尔

【问题讨论】:

    标签: email uwp mapi desktop-bridge


    【解决方案1】:

    你可以使用 URI 吗?我认为更多的应用程序支持 URI,但它们不支持 uwp 邮件协议。

    我会告诉你一个简单的方法来发送带有 URI 的电子邮件。

    我写了一个可以帮助发送电子邮件的函数。

        private async Task UniversallyEmail(string email, string subject, string messageBody)
        {
            messageBody = Uri.EscapeDataString(messageBody); 
            string url = $"mailto:{email}?subject={subject}&body={messageBody}";
            await Launcher.LaunchUriAsync(new Uri(url));
        }
    

    我认为它很容易使用。

    【讨论】:

      【解决方案2】:

      我了解到,目前在这种情况下不支持 Windows.ApplicationModel.Email API。 https://docs.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-supported-api

      【讨论】:

        猜你喜欢
        • 2018-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-17
        • 2017-11-20
        • 2019-07-02
        • 2019-10-03
        • 2018-07-20
        相关资源
        最近更新 更多