在Windows 8 metro中以html格式发送电子邮件

时间:2013-03-11 11:48:29

标签: c# html email microsoft-metro

我正在编写一个数据密集型的Metro应用程序,我需要以html格式发送电子邮件。谷歌搜索后,我遇到了这个代码。

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);

除了一个例外,这对我很有用。我通过html字符串生成这封电子邮件的正文,所以我的代码就像这样。

string htmlString=""
DALClient client = new DALClient();
htmlString += "<html><body>";
htmlString += "<table>";
List<People> people = client.getPeopleWithReservations();
foreach(People ppl in people)
{
    htmlString+="<tr>"
    htmlString +="<td>" + ppl.PersonName + "</td>";
    htmlString +="</tr>";
}
htmlString +="</table>";
htmlString +="</body><html>";

现在,当我运行此代码时,电子邮件客户端就会打开。但结果显示为纯文本。有没有一种方法可以让我在格式化的HTML中显示,所以html标签等不会显示? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

无法将HTML传递给mailto。您可以使用共享,而不是将HTML代码传递到默认的Windows应用商店邮件应用程序(遗憾的是不能使用默认的桌面邮件应用程序)。

以下是页面上的示例:

public sealed partial class MainPage : Page
{
   private string eMailSubject;
   private string eMailHtmlText;

   ...

   private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs args)
   {
      // Check if an email is there for sharing
      if (String.IsNullOrEmpty(this.eMailHtmlText) == false)
      {
         // Pass the current subject
         args.Request.Data.Properties.Title = this.eMailSubject;   

         // Pass the current email text
         args.Request.Data.SetHtmlFormat(
            HtmlFormatHelper.CreateHtmlFormat(this.eMailHtmlText));

         // Delete the current subject and text to avoid multiple sharing
         this.eMailSubject = null;
         this.eMailHtmlText = null;
      }
      else
      {
         // Pass a text that reports nothing currently exists for sharing
         args.Request.FailWithDisplayText("Currently there is no email for sharing");
      }
   }

   ...

   // "Send" an email
   this.eMailSubject = "Test";
   this.eMailHtmlText = "Hey,<br/><br/> " +
      "This is just a <b>test</b>.";
   DataTransferManager.ShowShareUI(); 

另一种方法是使用SMTP,但据我所知,Windows Store应用程序还没有SMTP实现。