webdevqa.jp.net

Outlookが改行を自動クリーニングし、電子メール形式を台無しにする

ドットネットフレームワークを使用してメールを送信しています。メッセージの作成に使用しているテンプレートは次のとおりです。

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で終了します。

質問:この問題を回避するために、メッセージの形式を変更するにはどうすればよいですか?

109
Aheho

すべての行を2つのスペースで開始すると、Outlookは書式設定を維持するために「トリック」されます。

だから変更

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%

  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

ここに 記事 があります。この問題を調査するときに、答えよりも少し深くなります。

92
Alex B

行のend(CR LFの直前)にタブ文字を挿入することもできます。この余分な空白は行末にあるため、ユーザーには見えません。左側にスペースを挿入するよりも、これを好むかもしれません。単一のスペースでは十分ではないことに注意してください(おそらく複数のスペースが役立つかもしれませんが、わかりません)。

123
Jim Davis

この回答は、Outlookクライアントから機能を「無効にする」方法に関するものです。

  • [ツール]-> [オプション...]に移動します
  • 「設定」タブで「メールオプション...」をクリックします
  • [プレーンテキストメッセージの余分な改行を削除する]チェックボックスをオフにします。
  • ヒットOK

参考:Outlook 2007を使用しています

27
DHornpout

私はいつも、電子メールをhtmlとしてフォーマットする方が幸運でした。クライアントがhtml形式を許可するように設定する必要があるというエンドユーザーの問題がまだあるかもしれませんが、多くの電子メールはhtml形式で送信されるため、通常はこれに精通しています。また、HTMLタグを追加するためにもう少し作業が必要ですが、最終結果ははるかに制御しやすくなります。

@ -ephemientも提案します:HTMLとプレーンテキストの両方として送信します。良いクライアントは後者を表示し、Outlookは前者を表示し、誰もが幸せです(より多くの作業を行う必要があるプログラマを除く)。

4
Doug L.

Outlook 2010では、「\ r\n」の代わりに「\ t\r\n」(TABの場合は\ t)を追加するとうまくいきました。

2
supernova

Doug 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);
1
Ho Ho Ho

プレーンテキストの電子メールを生成し、Outlook 2003 SP3でそれを読むときに同じ問題が発生しています。行の長さを40文字未満に保つことで、削除プロセスを回避できるようです。常に実用的とは限りません。

0
Geep

自動クリーニングは、余分な改行を削除するOutlookの機能です。これを防ぐには2つの方法があります。

  • 最初の方法は、コードでメールを送信する際に、行の前に少なくとも2つの余分なスペースを追加することです。これらの余分なスペースは、Outlookが自動的に削除する行の前にのみ追加できます。

  • 2番目の方法は、Outlookが余分な改行を削除しないようにするOutlook設定を変更することです。

enter image description here

enter image description here

テキストを<pre>タグに入れると、Outlookはテキストを正しくフォーマットして表示します。

hTML BodyのCSSインラインで次のように定義しました。

CSS:

pre {
 font-family: Verdana, Geneva, sans-serif;
}

フォントファミリをフォントセットに定義しました。

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>
0