125

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

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

4

11 に答える 11

134

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

于 2009-01-12T16:58:19.750 に答える
101

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

これは、この問題を調査したときに見つけた記事で、私の回答よりも少し詳しく説明しています。

于 2008-10-29T18:43:21.523 に答える
26

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

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

参考までに、Outlook 2007 を使用しています。

于 2009-08-31T17:56:00.070 に答える
6

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

于 2016-04-12T15:05:22.983 に答える
5

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

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

于 2008-10-29T17:32:19.577 に答える
0

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

于 2008-11-12T22:00:11.913 に答える
-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();
     }
  }
于 2014-11-13T08:53:43.273 に答える
-6

回線終端を crlf から cr または lf に変更します。

電子メールの先頭には cr (または lf) のみが使用されていると思われ、Outlook は電子メールの残りの部分が同じ形式に従うことを期待しています。

于 2008-10-29T17:22:04.930 に答える