通过 UWP EmailManager 发送电子邮件附件不起作用

Sending email attachments via UWP EmailManager not working

使用以下代码从通用应用程序发送附件不起作用,为什么?

        Dim emailMessage As New EmailMessage()
        emailMessage.[To].Add(New EmailRecipient("a@b.com"))
        emailMessage.Subject = "Test"
        emailMessage.Body = "Hello World"

        Dim localAppFolder = Windows.Storage.ApplicationData.Current.LocalFolder
        Dim file = Await localAppFolder.CreateFileAsync("SomeFile.txt", Windows.Storage.CreationCollisionOption.ReplaceExisting)
        Await Windows.Storage.FileIO.WriteTextAsync(file, "aaaa")
        Dim fileRef = RandomAccessStreamReference.CreateFromFile(file)
        emailMessage.Attachments.Add(New EmailAttachment(file.Name, fileRef))
        Await EmailManager.ShowComposeNewEmailAsync(emailMessage)

收件人、主题和正文在 Outlook 中显示正常,但附件丢失:Outlook screenshot

我认为这是因为 Outlook 是一个桌面应用程序。据我了解,EmailManager.ShowComposeNewEmailAsync 使用 mailto: 协议来启动邮件客户端应用程序并使用共享来提供电子邮件内容。

如果您在 select 默认应用程序对话框启动时选择邮件商店应用程序,您将能够看到如下附件:

如果您之前选择桌面 Outlook 应用程序作为 mailto 协议的默认应用程序,则必须在控制面板中更改 mailto: 协议关联的默认应用程序。

以前,ShowComposeNewEmailAsync 仅适用于 windows phone 运行时应用程序。而且它在文档中不是最新的,因为它不包括 win 10 支持。

在Windows 10 手机上,它运行良好,没有任何问题。但是在 Windows 桌面上,您必须选择一个商店应用程序。

这在 2019 年仍然是一个问题,但我已经为我的项目找到了解决方法。 我只是 assemble 一个包含收件人、主题、正文、附件等的 *.msg 文件,并将其保存到应用程序的本地缓存文件夹中。然后可以使用 Launcher.LaunchFileAsync

启动它

由于 *.msg 文件与 outlook 相关联,因此很可能是打开此类文件的默认应用程序。您可以使用 MsgKit

创建这样的文件

我准备了一个演示项目:https://github.com/Moolt/UniversialWindowsPlatform.LaunchOutlook