如何使用mailmessage.body在电子邮件正文中包含XML

时间:2015-03-24 20:48:21

标签: c# xml email mailmessage

我有一个执行某些测试的应用程序。作为这些测试的结果,生成了一个XML对象(来自XmlDiff比较)。 有没有办法将XML嵌入到格式化状态的电子邮件正文中? 我正在使用XmlWriter到StringBuilder对象,然后将字符串转换为" html safe"使用System.Security.SecurityElement.Escape()格式化。在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并使其显示为格式化?

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

我找到了解决方案,在正文消息的最后,创建一个div并设置样式显示为空,不插入close div,仅打开标签div而不显示样式。

答案 1 :(得分:0)

mail.IsBodyHtml = false;

完成工作,除非你真的需要html格式化的身体。

答案 2 :(得分:0)

也许太老了,但我有解决方案,只能对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>");