StringBuilder.AppendLine()不会创建新行

时间:2013-05-02 09:11:04

标签: .net vb.net string email stringbuilder

发生错误时我正在生成电子邮件。我正在使用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"来获取换行符。

3 个答案:

答案 0 :(得分:5)

您的电子邮件正文似乎是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来呈现所需的输出。否则,请使用<br />作为解决方法。

带有<p>标记的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

答案 1 :(得分:0)

由于它显示为一个长行,因此您的电子邮件很可能设置为显示为HTML,而不是纯文本。在HTML中,您必须使用<br/>来换行。

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

答案 2 :(得分:0)

如果要对电子邮件正文使用HTML格式,请将<pre>...</pre>标记内的ErrorsStringBuilder输出包装起来以保留空格和换行符,并使用固定宽度字体来维护格式。