我有一个执行某些测试的应用程序。作为这些测试的结果,生成了一个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并使其显示为格式化?
感谢您的帮助!
答案 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>");