【问题标题】:StringBuilder.AppendLine() does not make a new lineStringBuilder.AppendLine() 不换行
【发布时间】:2013-05-02 09:11:04
【问题描述】:

发生错误时,我正在生成一封电子邮件。我正在使用StringBuilder.AppendLine()StringBuilder.AppendLine(String) 构建电子邮件正文,但是我的电子邮件正文显示为很长的一行,没有换行符。

例如:

Dim ErrorsStringBuilder As New StringBuilder
ErrorsStringBuilder.AppendLine(String.Format("Status : {0}  Message : {1}", Results.Status, Results.ErrorMessage))
ErrorsStringBuilder.AppendLine(String.Format("Failed : {0}  Total : {1}", Results.FailedCount, Results.TotalCount))
ErrorsStringBuilder.AppendLine("Batch #: " & Results.BatchNumber)
ErrorsStringBuilder.AppendLine()
ErrorsStringBuilder.AppendLine("Individual Errors:")
ErrorsStringBuilder.AppendLine()
For Each FailedRecord .......
  ErrorsStringBuilder.AppendLine(String.Format("Failed Record ID : {0}  Message : {1}", FailedRecord.ID, FailedRecord.ErrorText))
Next

这是来自 MSDN 的对 .AppendLine().AppendLine(String) 的描述。

将默认行终止符附加到当前行的末尾 StringBuilder 对象。

附加指定字符串的副本,后跟默认行 终止符到当前 StringBuilder 对象的末尾。

我的问题是:为什么没有换行符? 为什么没有应用默认的行终止符?我误解了描述吗?

ps。我确实看过this question,但没有解释为什么。

我知道我可以使用System.Environment.NewLine"\n" 来获得换行符。

【问题讨论】:

  • 在您的 vb.net 代码中设置 mail.IsBodyHtml = false;
  • 它对你有用吗?

标签: .net vb.net string email stringbuilder


【解决方案1】:

您的电子邮件正文似乎是HTML 类型,但您正在呈现simple text -

如果您真的希望它是 simple text,那么在您的电子邮件对象集 IsBodyHtml = false 中它将呈现新行而不修改您的 StringBuilder 代码 -

MailMessage mail = new MailMessage();
mail.IsBodyHtml = false;

如果您只想要 HTML,请尝试在每一行之后添加 -

ErrorsStringBuilder.AppendLine("<br />");

实际上,您正在尝试构建 HTML 输出。

如果你写在 HTML 中 -

<html>
<body>
Hi,

How are you?
</body>
</html>

这会导致 -

Hi, How are you? 

为了使它起作用,你应该将这两个语句包含在两个不同的块元素中 -

在这种情况下,我使用的是段落 -

<html>
<body>
<p>Hi,</p>

<p>How are you?</p>
</body>
</html>

现在这将导致 -

Hi,

How are you?

在您的情况下,您需要找出 HTML 来呈现所需的输出。否则,请使用 &lt;br /&gt; 作为解决方法。

带有&lt;p&gt;标签的HTML示例 -

Dim ErrorsStringBuilder As New StringBuilder
ErrorsStringBuilder.AppendLine(String.Format("<p>Status : {0}  Message : {1}</p>", Results.Status, Results.ErrorMessage))
ErrorsStringBuilder.AppendLine(String.Format("<p>Failed : {0}  Total : {1}</p>", Results.FailedCount, Results.TotalCount))
ErrorsStringBuilder.AppendLine("<p>Batch #: </p>" & Results.BatchNumber)
ErrorsStringBuilder.AppendLine()
ErrorsStringBuilder.AppendLine("<p>Individual Errors:</p>")
ErrorsStringBuilder.AppendLine()
For Each FailedRecord .......
  ErrorsStringBuilder.AppendLine(String.Format("<p>Failed Record ID : {0}  Message : {1}</p>", FailedRecord.ID, FailedRecord.ErrorText))
Next

【讨论】:

    【解决方案2】:

    由于它显示为一长行,您的电子邮件很可能设置为显示为 HTML,而不是纯文本。在 HTML 中,您必须使用 &lt;br/&gt; 换行。

    您可以尝试在代码末尾添加ErrorsStringBuilder.Replace(Environment.NewLine, Environment.NewLine + "&lt;br/&gt;") 来添加 HTML 换行符。

    【讨论】:

      【解决方案3】:

      如果您想对电子邮件正文使用 HTML 格式,请将 ErrorsStringBuilder 输出包装在 &lt;pre&gt;...&lt;/pre&gt; 标记内以保留空格和换行符,并使用固定宽度的字体来保持格式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-24
        • 1970-01-01
        • 2015-06-04
        • 2020-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多