用于错误报告的XML/HTML电子邮件模板



我想创建一个带有占位符的XML或HTML模板,用于在异常发生时在运行时交换异常报告变量。我喜欢到目前为止我对模板和行为所做的一切,但目前一切都是硬编码的,太糟糕了。

这是我的代码示例。。。

'Styling (Outlook does not follow CSS standards >:-( )
body = "<html><head>" & _
        "<style type=""text/css"">" & _
        "   * {font:12px Arial, Helvetica, sans-serif;}" & _
        "   table {border-collapse:collapse;}" & _
        "   table.grid td {padding:0 7px;border:solid #ccc 1px;}" & _
        "   .bold {font-weight:bold;padding-right:12px;}" & _
        "</style></head><body>"
'Partial template
body &= "<table><tr><td class=""bold"">Error:</td><td>" & ex.Message & "</td></tr>" & _
        "<tr><td class=""bold"">Exception:</td><td>" & ex.GetType().FullName & "</td></tr>" & _
        "<tr><td class=""bold"">Source:</td><td>" & ex.Source & "</td></tr>" & _
        "<tr><td class=""bold"">Request Url:</td><td>" & Request.Url.ToString & "</td></tr></table><br />"

注意ex.Message变量等。我想将所有HTML代码移动到一个单独的文件中(XML或HTML,取决于推荐的内容,我想是XML?),以及每个错误变量的占位符。然后加载模板,替换变量并即时发送电子邮件。这样做的最佳做法是什么?

此外,请不要试图修复我的CSS,这不是这个问题的意义所在。Outlook不遵循标准(见图),这就是我必须做的。

谢谢。)

我认为你已经走上了正确的道路。步骤是:

  • 将模板提取到资源文件中(资源扩展名.xml,.html是实际的资源类型)
  • 用标记替换变量串联;因此:(…)<tr><td class="bold">Source:</td><td>{exSource}</td></tr>(…)
  • 创建一个String对象的扩展方法来"增强"String.Format,这样你就可以做一些类似的事情

    ' Load the resourceFile and put content into formattedBody
    Dim formattedBody as String = templateBody.FormatWith(New With{.exSource = ex.Source})
    

关于如何实现FormatWith,请看这里。这个答案可能对你也有帮助。

最新更新