如何从WinRT/Windows Store应用程序发送电子邮件?

12

我正在开发一款Windows Store应用程序(Windows 8)。

我需要根据应用程序数据和地址发送电子邮件,而不需要用户手动输入数据或地址。

有什么正确/简单的方法来实现它?

EitanB

5个回答

30

你可以尝试使用

var mailto = new Uri("mailto:?to=recipient@example.com&subject=The subject of an email&body=Hello from a Windows 8 Metro app."); 
await Windows.System.Launcher.LaunchUriAsync(mailto);

使用共享功能来开发Windows 8 RT应用程序。 - Manuel Rauber
尝试了一下,运行得很好,但我认为“首选”的方式应该是通过共享Charm界面实现。 感谢您的意见! - user1211925
4
首选方式并非总是共享功能。当您想要分享应用中的特定内容时,请使用共享功能。例如,当我在我的应用程序中有一个联系人列表时,如果我选择一个联系人并按下共享按钮,我会期望分享该联系人的详细信息而不是发送一封邮件给他。若要发送电子邮件,我将在应用栏中选择邮件图标,该图标使用mailto:并全屏启动邮件应用程序。 - GeertvdC
URL 错误,收件人字段将永远不会填充。您需要将“?”移动到主题之前并删除“to =”。 - Greg Quinn
我编写了一个类,以更友好的方式完成此操作。它模仿了通用应用程序中可用的API。但要注意这个问题 - SandRock
显示剩余2条评论

9

这个问题并不局限于问题中提到的特殊情况。当我有一个反馈按钮时,我不能将用户重定向到魅力栏。 - jalgames

6
这是mailto链接的正确语法(与上面其他带有mailto:的示例不同,那些是不正确的)。
var mailto = new Uri("mailto:yourname@email.com?subject=" + subject + "&body=" + body);
await Launcher.LaunchUriAsync(mailto);

使用mailto:方法的问题在于,如果用户没有与mailto:相关联的客户端程序,则什么也不会发生。

最可靠的方法是使用某种Web服务或WCF服务。虽然在Windows 8上考虑使用共享魅力是“正确”的方式,但并不一定是最好的方式,因为用户可能仍然没有安装电子邮件客户端,例如他们依赖于gmail.com进行电子邮件。


3
如果您正在开发通用的WinRT Windows Phone应用程序,您可以使用“Windows.ApplicationModel.Email.EmailMessage”命名空间,因为“Microsoft.Phone.Tasks.EmailComposeTask”命名空间在WinRT应用程序上不起作用。
然后,使用以下代码创建并启动新电子邮件。
// Create your new email message.
var em = new EmailMessage() ;

// Add as much EmailRecipient in it as you need using the following method.
em.To.Add(new EmailRecipient("yourname@yourdomain.com"));
em.Subject = "Your Subject...";
em.Body = "Your email body...";
// You can add an attachment that way.
//em.Attachments.Add(new EmailAttachment(...);

// Show the email composer.
await EmailManager.ShowComposeNewEmailAsync(em);

我希望这能解决你(或其他开发人员)的问题。

祝好。


1
有没有在Windows 8商店应用程序中确切地执行此操作的方法? - SandRock

1

总是可以连接到SMTP服务器并发出HELO、MAIL、RCPT等命令。当然,您需要连接到一个SMTP服务器。我在我们公司的内部网络上使用它来发送电子邮件。


使用共享功能来开发Windows 8 RT应用程序。 - Manuel Rauber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接