使用以下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。
如何处理这个问题?
答案 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。