Outlook が改行を自動消去してメール形式を台無しにする
質問
dotnet フレームワークを使用して電子メールを送信しています。メッセージの作成に使用しているテンプレートは次のとおりです。
Date of Hire: %HireDate%
Annual Salary: %AnnualIncome%
Reason for Request: %ReasonForRequest%
Name of Voluntary Employee: %FirstName% %LastName%
Total Coverage Applied For: %EECoverageAmount%
Guaranteed Coverage Portion: %GICoveragePortion%
Amount Subject to Medical Evident: %GIOverage%
Outlook でメッセージを受信すると、Outlook は「このメッセージ内の余分な改行は削除されました」と表示します。そしてメッセージは次のように表示されます。
Date of Hire: 9/28/2001
Annual Salary: $100,000
Reason for Request: New Hire
Name of Voluntary Employee: Ronald Weasley Total Coverage Applied For: $500,000 Guaranteed Coverage Portion: $300,000.00 Amount Subject to Medical Evident: $200,000
Outlook が名前、EECoverageAmount などの後に必要な改行を誤って削除していることに注意してください。
電子メールの受信者が正しい形式の電子メールを受け取ることは重要であり、受信者の中には Outlook 2003 を使用している人もいると考えなければなりません。また、彼らがメッセージを適切にフォーマットするために自動クリーン機能を停止するのに十分な知識を持っているとも思えません。
これらのメッセージを他のメール クライアントで表示したところ、正しく表示されました。
さらに詳しい情報:
- UTF-8 BodyEncoding (msg.BodyEncoding = System.Text.Encoding.UTF8) を使用しています。
- msg.Body は UTF-8 でエンコードされたテキスト ファイルから読み取られており、各行は crlf で終了します。
質問:この問題を回避するには、メッセージの形式を変更するにはどうすればよいですか?
解決
すべての行を2つのスペースで開始すると、Outlookは<!> quot; tricked <!> quot;書式設定を維持します。
変更
Date of Hire: %HireDate%
Annual Salary: %AnnualIncome%
Reason for Request: %ReasonForRequest%
Name of Voluntary Employee: %FirstName% %LastName%
Total Coverage Applied For: %EECoverageAmount%
Guaranteed Coverage Portion: %GICoveragePortion%
Amount Subject to Medical Evident: %GIOverage%
to
Date of Hire: %HireDate%
Annual Salary: %AnnualIncome%
Reason for Request: %ReasonForRequest%
Name of Voluntary Employee: %FirstName% %LastName%
Total Coverage Applied For: %EECoverageAmount%
Guaranteed Coverage Portion: %GICoveragePortion%
Amount Subject to Medical Evident: %GIOverage%
^^ <--- Two extra spaces at the start of every line
この問題を調査するときに見つけた記事私の答えよりも少し深い。
他のヒント
行の end にタブ文字を挿入することもできます(CR LFの直前)。この余分な空白は行末にあるため、ユーザーには見えません。左側にスペースを挿入するよりも、これを好むかもしれません。単一のスペースでは十分ではないことに注意してください(おそらく複数のスペースが役立つかもしれませんが、わかりません)。
この回答は、<!> quot; disable <!> quot; Outlookクライアントの機能。
- ツールに移動-<!> gt; <!> quot;オプション... <!> quot;
- <!> quot; Preferences <!> quot;タブ<>> quot; Email Options ... <!> quot; をクリックします
- ボックスのチェックを外します<!> quot;プレーンテキストメッセージの余分な改行を削除します。<!> quot;
- ヒット
FYI:Outlook 2007を使用しています
私はいつも、電子メールをhtmlとしてフォーマットする方が幸運でした。クライアントがhtml形式を許可するように設定する必要があるというエンドユーザーの問題がまだあるかもしれませんが、多くの電子メールはhtml形式で送信されるため、通常はこれに慣れています。また、HTMLタグを追加するためにもう少し作業が必要ですが、最終結果ははるかに制御しやすくなります。
@ephemientは次のことも提案しています。 HTMLとプレーンテキストの両方として送信します。良いクライアントは後者を表示し、Outlookは前者を表示し、誰もが幸せです(より多くの仕事をしなければならないプログラマーを除く)。
<!> quot; \ t \ r \ n <!> quot;を追加(TABの場合は\ t)<!> quot; \ r \ n <!> quotの代わりに; Outlook 2010で私のために働いた。
を拡張すると、 ダグ・L なぜなら、HTML メッセージングは、その回答が投稿された 2008 年よりも現在ではさらに普及し、受け入れられていると思うからです。以下は、本文を変換して HTML 形式でメッセージを送信するのに役立つ小さな C# スニペットです。
body = string.Format("<font face='calibri,arial,sans-serif'>{0}<font/>", body.Replace("\r\n", "<br>"));
using (var smtpClient = new SmtpClient() { Host = smtpHost })
using (var msg = new MailMessage(from, emailDistribution, subject, body) { IsBodyHtml = true })
smtpClient.Send(msg);
プレーンテキストの電子メールを生成し、Outlook 2003 SP3でそれを読むと、同じ問題が発生します。行の長さを40文字未満に保つことで、削除プロセスを回避できるようです。常に実用的とは限りません。
<pre>
タグにテキストを入力すると、Outlookはテキストを正しくフォーマットして表示します。
iはHTML BodyのCSSインラインで次のように定義しました:
CSS:
pre {
font-family: Verdana, Geneva, sans-serif;
}
iは、フォントセットに必要なfont-familyを定義しました。
HTML:
<td width="70%"><pre>Entry Date/Time: 2013-09-19 17:06:25
Entered By: Chris
worklog mania
____________________________________________________________________________________________________
Entry Date/Time: 2013-09-19 17:05:42
Entered By: Chris
this is a new Worklog Entry</pre></td>
テキストに「\ r \ n」が含まれていますが、Outlook 2010は改行をレンダリングしません。 '\ r \ n'で区切られた行のトークンとHTML段落タグでエンベロープトークンを作成します。私のメール形式はHTMLです。次のコードでメール用のHTML本文を生成しています。
string[] tokens = Regex.Split(objTickt.Description, "\r\n");
if (tokens.Length > 0)
{
foreach (string line in tokens)
{
//htmlTW.WriteEncodedText(objTickt.Description.Replace("\r\n", "\n\n"));
htmlTW.RenderBeginTag(HtmlTextWriterTag.P);
htmlTW.WriteEncodedText(line);
htmlTW.RenderEndTag();
}
}
回線終端をcrlfからcrまたはlfに変更します。
電子メールの先頭にはcr(またはlf)のみが使用されていると思われ、Outlookは電子メールの残りの部分が同じ形式に従うことを期待しています。