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

时间:2017-10-02 23:02:48

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

使用以下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); 
    });
}
  • 将Mail应用程序设置为默认应用程序运行此代码将正常工作。

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

我发现很少有帖子声明您无法在不违反商店政策的情况下从UWP应用调用任何Win32应用,包括Outlook。

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

如何处理这个问题?

2 个答案:

答案 0 :(得分:2)

你有一个错字:

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

应该是:

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

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

  

发生System.FormatException HResult = 0x80131537消息=索引   (基于零)必须大于或等于零且小于   参数列表的大小。

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

答案 1 :(得分:0)

根据微软的答案(而不是悲伤),主要是在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。