Outlookで改行が自動クリーンアップされ、メール形式が台無しになる


119

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を使用していると想定する必要があります。また、メッセージを適切にフォーマットするためにautoclean機能を停止するのに十分な知識があるとは思えません。

これらのメッセージを他のメールクライアントで表示しましたが、正しく表示されます

いくつかの詳細:

  • UTF-8 BodyEncodingを使用しています(msg.BodyEncoding = System.Text.Encoding.UTF8)
  • msg.BodyはUTF-8エンコードされたテキストファイルから読み取られ、各行はcrlfで終了します。

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


12
以下の非常に賛成の回答はどちらも正しいですが、すべてのルールのリストについては、この回答を参照してください。
ボブソン2013


5
なぜこの「機能」が存在するのですか?
chiliNUT

1
Windowsの改行を試してください\r\n。それは私のために働いた。
kevinarpe 2017

回答:


97

すべての行を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

この問題を調査したときに私が見つけた記事は、私の答えよりも少し深くなっています。


6
ここでは、これを整理するために便利な正規表現です:Regex.Replace(messageBody, @"^(?!\s\s)", " ", RegexOptions.Multiline);
ウィルフレッドKnievel

2
OK、その正規表現には2つのスペースがありますが、これはHTMLなので1つしか表示されません!
Wilfred Knievel

コードで生成されたプレーンテキストの電子メールの場合、これが最適なソリューションです。
サルバドールバレンシア

129

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


14
Regex.Replace(messageBody, @"(?<!\t)((?<!\r)(?=\n)|(?=\r\n))", "\t", RegexOptions.Multiline)
Wilfred Knievel

TracからOutlookユーザーに送信される電子メールに最適なソリューション。
sfarbota 2013年

1
+1タブの代わりに3つのスペースを使用する必要がありましたが、基本的にこの修正でうまくいきました:Regex.Replace(messageBody、@ "(?<!\ t)((?<!\ r)(?= \ n) |(?= \ r \ n)) "、" "、RegexOptions.Multiline)
Ryan VandenHeuvel

確認しました!ここにphpスニペットとして正規表現:$ re = '/(?<!\ t)((?<!\ r)(?= \ n)|(?= \ r \ n))/ m'; $ subst = ""; $ MailText = preg_replace($ re、$ subst、$ MailText);
C4pt4inC4nn4bis 2018

三星電子のメールクライアントにOutlookの作品が、区切りのテキストメールFPRスマートフォン:(
C4pt4inC4nn4bis

26

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

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

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


3
この機能も好きではありません。特に、電子メールのコードが破損し、PGP署名チェックが失敗します。
ブライアンライター

7
Outlook 2010の場合:[ファイル]> [オプション]> [メール]> [メッセージ形式]セクションまでスクロールし、[プレーンテキストメッセージの余分な改行を削除する]チェックボックスをオフにします。
Peter Ford

2
これはクライアント側のソリューションです。Outlookがサーバー側でこれを行わないようにする信頼できる方法、つまり他のクライアントに影響を与えないようにメールをフォーマットすること(受信者がどのメールクライアントを使用するかわからないため)がより良いでしょう。
トビアス

7
おかげで-そして今、私たちの100.000以上のニュースレター受信者にこれを行うようにガイドしてください
Muleskinner

4

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

@ephemientも提案しています:HTMLとプレーンテキストの両方として送信します。優れたクライアントは後者を示し、Outlookは前者を示します。誰もが幸せです(より多くの作業を行わなければならないプログラマを除く)。


2
HTMLとプレーンテキストの両方で送信します。良いクライアントは後者を示し、Outlookは前者を示します。誰もが幸せです(より多くの作業を行わなければならないプログラマを除く)。
ephemient

ところで、あなたの答えでs / http / html / g。
象08年

4

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


"\r\n "同様のハックとして改行の後に(2つのスペース、タブなし)を使用してこれを「解決」しました。Outlook 2016で動作します。YMMV。
user2864740 2018

1

ダグ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);

0

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


0

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

私はそれをHTML本文の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>

1
元の質問はHTMLではなくプレーンテキストのメールに関するものだと思います。あなたは解決策としてHTMLを混ぜようとしています。
クリスピーターズ

0

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

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

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

ここに画像の説明を入力してください

ここに画像の説明を入力してください


-1

テキストに「\ 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();
     }
  }

-6

ライン終端をcrlfからcrまたはlfに変更します。

メールの上部ではcr(またはlf)のみを使用していると思います。Outlookでは、メールの残りの部分も同じ形式であると想定しています。


行末記号をCRに変更してみました。それはうまくいきませんでした。その後、LFに変更してみました。それもうまくいきませんでした。
Aheho 2008年

1
疑わしい。Outlookには、改行のあるメールをフローテキストに変換しようとする非常に疑わしい機能があります。当然のことながら、この場合のように、これはよく間違えられます。
Daniel Cassidy、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.