【问题标题】:How do I include XML in an email body using mailmessage.body如何使用 mailmessage.body 在电子邮件正文中包含 XML
【发布时间】:2015-05-28 08:26:57
【问题描述】:

我有一个执行一些测试的应用程序。作为这些测试的结果,生成了一个 XML 对象(通过 XmlDiff 比较)。 有没有办法以格式化状态将 XML 嵌入到电子邮件正文中? 我将 XmlWriter 用于 StringBuilder 对象,然后使用 System.Security.SecurityElement.Escape() 将字符串转换为“html 安全”格式。在 MailMessage 中,我设置 IsBodyHtml = true。 要提取我要嵌入的 XML:

        public static string GetDiff(string approvedfile, string failingfile)
    {
        StringBuilder sb = new StringBuilder();
        XmlWriter xmlwriter = XmlWriter.Create(sb);
        XmlDiff xdiff =
            new XmlDiff(XmlDiffOptions.IgnoreChildOrder | XmlDiffOptions.IgnoreNamespaces |
                        XmlDiffOptions.IgnorePrefixes);
        bool response = xdiff.Compare(approvedfile, failingfile, false, xmlwriter);
        xmlwriter.Flush();
        xmlwriter.Close();
        return System.Security.SecurityElement.Escape(sb.ToString());
    }

设置我正在使用的正文内容:

        string sb = GetDiff(approvedMapfile, fileout);
        string message = String.Format("Comparison of Map item1 and Map item2 for {0} failed.</br>Review the differences here:</br>{1}</br> and Compare the files</br>{2}</br>and</br>{3}</br>to find the differences.", loc, sb, emailApprovedMap, emailFailedMap);
        Util.SendStatusEmail(message);

在 SendStatusEmail 中邮件信息是这样设置的:

        public static string SendStatusEmail(string status)
    {
        string hostServer = "smtphost.this.server.com";

        MailMessage mail = new MailMessage();
        SmtpClient client = new SmtpClient();
        client.Port = 25;
        client.Host = hostServer;
        client.Credentials = CredentialCache.DefaultNetworkCredentials;
        MailAddress from = new MailAddress("me@here.com", "Me There");
        mail.From = from;
        mail.To.Add("You@there.com");
        mail.IsBodyHtml = true;
        mail.Body = status;
        mail.Subject = "Map Checker status report";
        try
        {
            client.Send(mail);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

        return string.Empty;
    }

当使用上述方法接收电子邮件时,嵌入的 XML 已包含在内,但未格式化,它显示为一长串 XML。 有没有办法以编程方式将 XML 嵌入电子邮件正文并使其显示为格式化?

感谢您的帮助!

【问题讨论】:

  • 您应该使用XmlWriterSettings 来创建您的作家。
  • 你可以将它作为 .xml 文件添加到 email.attachments 中吗?
  • @Kyle:是的,我已经这样做了。不过,首选是将它放在体内。还是谢谢!
  • @tschmit007:谢谢,我会更仔细地查看 XmlWriterSettings。

标签: c# xml email mailmessage


【解决方案1】:
mail.IsBodyHtml = false;

可以完成这项工作,除非你真的需要 html 格式的正文。

【讨论】:

  • 谢谢,但我确实需要 HTML 格式。我最终还是保留了 XML 作为附件。谢谢..
【解决方案2】:

我找到了解决方案,在正文的最后一条消息中创建一个 div 并设置样式不显示,不插入关闭 div 只打开标签 div 样式不显示。

【讨论】:

    【解决方案3】:

    也许太旧了,但我有解决方案来编码 xml 文本。

    参考如何在 C# 上做:How to encode the ampersand if it is not already encoded?

    基本上有lib可以做到这一点:

    HttpUtility.HtmlEncode(string)
    

    我正在用 java 做这样的事情:

    StringEscapeUtils.escapeHtml4("<xml><row>1</row></xml>");
    

    【讨论】:

      猜你喜欢
      • 2023-02-04
      • 2010-11-20
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 2018-05-05
      • 1970-01-01
      相关资源
      最近更新 更多