2013-05-02 90 views
2

我在發生錯誤時生成電子郵件。我使用StringBuilder.AppendLine()StringBuilder.AppendLine(String)來構建電子郵件的正文,但是我的電子郵件正文顯示爲非常長的一行,沒有換行符。StringBuilder.AppendLine()不生成新行

例如:

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"來換行。

+0

在你的vb.net代碼 – 2013-05-02 12:53:13

+0

中設置'mail.IsBodyHtml = false;'它適合你嗎? – 2013-05-07 09:09:51

回答

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 />作爲解決方法。

示例HTML與<p>標籤 -

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 
0

因爲它顯示爲一個長行的電子郵件時最有可能設置爲顯示爲HTML,而不是純文本。在HTML中,您必須使用<br/>換行符。

您可以在代碼末尾嘗試ErrorsStringBuilder.Replace(Environment.NewLine, Environment.NewLine + "<br/>")以添加HTML換行符。

0

如果您想爲電子郵件正文使用HTML格式,請將您的ErrorsStringBuilder輸出封裝在<pre>...</pre>標記中以保留空格和分行符,並使用固定寬度的字體來保持格式。