【问题标题】:UWP App Sending Email with EmailManager.ShowComposeNewEmailAsync Wont add Attachment in New Outlook EmailUWP App 使用 EmailManager.ShowComposeNewEmailAsync 发送电子邮件不会在新 Outlook 电子邮件中添加附件
【发布时间】:2018-03-14 01:53:59
【问题描述】:

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

但是,如果默认电子邮件应用程序是 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 不兼容而改变他们的邮件系统。此外,系统应提供兼容的应用程序,例如邮件应用程序或其他已安装的兼容应用程序,而不是仅仅选择默认电子邮件应用程序,包括不支持 UWP 的应用程序,例如 Outlook。

如何处理这个问题?

【问题讨论】:

    标签: uwp windows-10 windows-10-universal email-attachments xamarin.uwp


    【解决方案1】:

    你有一个错字:

    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

    【讨论】:

    • 谢谢 Rob,我确实找到了问题,但还没有解决方案。你是对的,我遇到了索引问题,但这不是问题的原因。原因是代码是从后台线程调用的。我更新了上面的问题以反映我的新解释以及真正的问题是什么。问题是我无法将附件添加到在 Outlook 中创建的新电子邮件中。感谢您的帮助
    • 嗨 Rob,如果 Outlook 不在系统中/或未配置怎么办? ShowComposeNewEmailAsync 会给我什么回报?
    【解决方案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 上绝对不行。

    【讨论】:

      猜你喜欢
      • 2021-10-22
      • 1970-01-01
      • 2015-10-05
      • 2016-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      相关资源
      最近更新 更多