【发布时间】: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