首页 文章

UWP App使用EmailManager.ShowComposeNewEmailAsync发送电子邮件不要在新的Outlook电子邮件中添加附件

提问于
浏览
0

使用以下Microsoft文章,我尝试从在Windows 10桌面上运行的UWP应用程序启动默认电子邮件应用程序 . 如果该应用程序是Mail应用程序,则会打开该应用程序并将附件添加到新邮件中 .

但是,如果默认电子邮件应用程序是Outlook(在我的情况下是Outlook 2016,但也可以使用其他版本),则不会添加附件,并且在新电子邮件对话框后Outlook会立即崩溃 . 也没有添加附件 .

这是我正在使用的示例的链接:

https://docs.microsoft.com/en-us/windows/uwp/contacts-and-calendar/sending-email

这是我的代码

private async Task CreateEmail(string messageBody, string archiveFilePath)
{
    StorageFile attachmentFile = await StorageFile.GetFileFromPathAsync(archiveFilePath);
    var subject = string.Format("Sending file {0}", attachmentFile.DisplayName);

    var emailMessage = new Windows.ApplicationModel.Email.EmailMessage();
    emailMessage.Body = messageBody;

    if (attachmentFile != null)
    {
        var stream = Windows.Storage.Streams.RandomAccessStreamReference.CreateFromFile(attachmentFile);
        var attachment = new Windows.ApplicationModel.Email.EmailAttachment(attachmentFile.Name, stream);
        emailMessage.Attachments.Add(attachment);
    }

    var emailRecepient = new Windows.ApplicationModel.Email.EmailRecipient("me@home.com");
    emailMessage.To.Add(emailRecepient);

  // call this on main thread; otherwise, no New Email box open
  await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
  {
    await Windows.ApplicationModel.Email.EmailManager.ShowComposeNewEmailAsync(emailMessage);
  });
}

这就是我如何称呼它

private void SendArchiveFile()
{
    myLogger.SendArchive(path =>
    {
        CreateEmail("test", path); 
    });
}
  • 使用设置为默认应用程序的邮件应用程序运行此代码将正常工作 .

  • 但是,将Outlook设置为默认应用程序运行它将导致Outlook崩溃,新电子邮件将很快打开,不添加任何附件,然后Outlook崩溃 .

我发现很少有帖子声明你不能在不违反商店政策的情况下从UWP应用调用任何Win32应用程序,包括Outlook .

但这是一个巨大的限制因为许多企业因为UWP不兼容而无法改变他们的邮件系统 . 此外,系统应提供与Mail app或其他兼容应用程序兼容的应用程序,而不仅仅是选择默认的电子邮件应用程序,包括不能与UWP一起使用的应用程序,如Outlook .

如何处理这个问题?

2 回答

  • 0

    你有一个错字:

    var subject = string.Format("Sending file {1}", attachmentFile.DisplayName);
    

    应该:

    var subject = string.Format("Sending file {0}", attachmentFile.DisplayName);
    

    索引基于零,您只传递一个参数 . 这应该会在调试器中引发错误,如果您单步调试该函数,您将看到它在创建和发送EmailMessage之前退出并出现以下异常 .

    发生System.FormatException HResult = 0x80131537 Message = Index(从零开始)必须大于或等于零且小于参数列表的大小 .

    修复后,您的代码应成功启动默认邮件应用程序 . 正如您发布的其他主题中所述,附件只会通过内置的UWP邮件应用程序进行 . Outlook 2016没有用于处理EmailManager的EmailAttachment

  • 2

    根据微软的答案(而不是悲伤),主要是在MSDN论坛上,当附加到像Outlook这样的Win32邮件应用程序时,附件会被忽略 .
    https://social.msdn.microsoft.com/Forums/windowsapps/en-US/5a539ff6-ce81-4f05-83a0-8bf430d827f8/uwpwindows-10-c-universal-windows-app-email-with-attachment?forum=wpdevelop

    我会说,这在智能手机设备上可能有意义,但绝对不适用于笔记本电脑/ PC .

相关问题