0

我正在编写一个数据非常密集的 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 标签等就不会显示?提前致谢。

4

1 回答 1

1

将 HTML 传递给 mailto 是不可能的。您可以使用共享来代替,您可以将 HTML 代码传递给默认的 Windows Store Mail App(不幸的是,不能传递给默认的桌面邮件应用程序)。

这是页面上的示例:

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 Apps 还没有 SMTP 实现。

于 2013-03-12T10:47:31.523 回答