Stringbuilderを使用して、テキスト(HTMLではない)メールで使用される文字列の本文を作成しようとしています。ただし、一部の行(動的データを含む場合、新しい行は追加されませんが、一部の行では意図したとおりに機能します。
Stringbuilderクラスを使用するときに不足している基本的なものがありますか、または発生するはずのより基本的なプロセスがありますか?
以下のコードで:
_sbUser.AppendLine("Please find below confirmation of your registration details. If any of these details are incorrect, please email [email protected]");
sbUser.AppendLine();
sbUser.AppendLine("Selected event : " + ContentPage.FetchByID(int.Parse(ddlEvent.SelectedValue)).PageTitle);
sbUser.AppendLine("Date of event : " + thisEvent.EventStartDate.ToString("dd MMM yyyy"));
sbUser.AppendLine("==============================================================");
sbUser.AppendLine();
_
(ContentPageとthisEventはSubsonic(v2)を使用して構築されたカスタムクラスです。PageTitleは文字列の出力タイプです)
これを出力として取得します:
_ Please find below confirmation of your registration details. If any of these details are incorrect, please email [email protected]
Selected event : My Event Date of event : 16 Sept 2012 ==============================================================
_
ご覧のとおり、コードの3行目以降はすべて1行になります。
しかし、私が使用するコードをさらに下に:
_sbRR.AppendLine("First name : " + txtFirstname.Text.Trim());
sbRR.AppendLine("Surname : " + txtSurname.Text.Trim());
etc,
_
これらはすべて別々の行に正しく表示されます。なぜこれが起こっているのかわかりません。
メールはそのように構成されています
mailMessage.Body = sbUser.ToString() + sbRR.ToString();
次のコードを追加します。
_sbUser.AppendLine("Selected event : " + ContentPage.FetchByID(int.Parse(ddlEvent.SelectedValue)).PageTitle + Environment.NewLine);
sbUser.AppendLine("Date of event : " + thisEvent.EventStartDate.ToString("dd MMM yyyy") + Environment.NewLine);
_
次の出力が生成されます。
_Selected event : My Event
Date of event : 16 Sept 2012
==============================================================
_
これは、2つの改行(AppendLineとEnvironment.NewLine)が追加されていることを除いて、動作すると思います。データをデータベースから直接文字列ビルダーに直接引っ張ると、行末が混乱するようです。データベースのプル後にテキストを追加しても、1行のままです。
[〜#〜] update [〜#〜]
StringBuilder.Append("blah"+Environment.NewLine)
を実行すると正しい結果が生成されますが、それがなぜ機能し、.AppendLine("blah"+<database content>)
が機能しないのかはまだわかりません。
の代わりに
sbUser.AppendLine();
使用してみてください
sbUser.Append(Environment.NewLine);
なぜこれが機能するのか分かりません...
質問が古く、回答済みとしてマークされていることはわかっていますが、StringBuilder.AppendLine()が機能しないためにGoogleで最初にヒットしたため、他の誰かがこれに遭遇した場合に備えて、ここに追加すると思いました。
私は同じ問題を抱えていたが、それはOutlookの問題であることが判明した。 Outlookは、余分な改行を削除して、テキストベースの電子メールを再フォーマットします。個々のメールのヘッダーで[このメッセージの余分な改行を削除した->改行を復元する]をクリックするか、この厄介な小さなトリックを行う設定を変更することができます "オプション->メール->メッセージ形式->余分な行を削除プレーンテキストメッセージの中断」
回避策(すべての潜在的な電子メールターゲットの設定を制御できないため)ここで見つけた ニュースレターの書式設定と余分な改行の削除の問題 。基本的に、各行の先頭に2つの空白文字を追加すると、Outlookは電子メールを再フォーマットしません。
ここに役立つ拡張メソッドがあります(メソッド名は少し冗長なので、好みに合わせて変更してください:))
namespace System.Text
{
public static class StringBuilderExtensions
{
public static void AppendLineWithTwoWhiteSpacePrefix(this StringBuilder sb, string value)
{
sb.AppendFormat("{0}{1}{2}", " ", value, Environment.NewLine);
}
public static void AppendLineWithTwoWhiteSpacePrefix(this StringBuilder sb)
{
sb.AppendFormat("{0}{1}", " ", Environment.NewLine);
}
}
}
つかいます Environment.NewLine
sbUser.AppendLine("Please find below confirmation of your registration details. If any of these details are incorrect, please email [email protected]");
sbUser.AppendLine(Environment.NewLine);
sbUser.AppendLine("Selected event : " + ContentPage.FetchByID(int.Parse(ddlEvent.SelectedValue)).PageTitle);
sbUser.AppendLine("Date of event : " + thisEvent.EventStartDate.ToString("dd MMM yyyy"));
sbUser.AppendLine("==============================================================");
sbUser.AppendLine(Environment.NewLine);
Windows 10 Insider preview Build15007。デフォルトのラインターミネーターとEnvironment.NewLineは両方とも「\ n」です。 「\ r\n」を使用するには、文字列定数を作成し、代わりに使用する必要がありました。
つかいます Environment.NewLine
各行の後、または新しい行が必要な場所
例えば:-
sbUser.AppendLine("Please find below confirmation of your registration details. If any of these details are incorrect, please email [email protected]" + Environment.NewLine);
sbUser.AppendLine("Selected event : " + ContentPage.FetchByID(int.Parse(ddlEvent.SelectedValue)).PageTitle);