Outlook secara otomatis membersihkan jeda baris saya dan mengacaukan format email saya

119

Saya mengirim email menggunakan kerangka dotnet. Berikut adalah template yang saya gunakan untuk membuat pesan:

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%

Ketika pesan diterima dalam pandangan, pandangan memberitahu saya "Jeda baris tambahan dalam pesan ini telah dihapus". Dan pesannya ditampilkan seperti ini:

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

Perhatikan bagaimana Outlook salah menghapus jeda baris yang diperlukan setelah nama, EECoverageAmount, dll ...

Penting bagi penerima email untuk mendapatkan email yang diformat dengan benar, dan saya harus berasumsi bahwa beberapa dari mereka menggunakan outlook 2003. Saya juga tidak dapat berasumsi bahwa mereka akan cukup tahu untuk mematikan fitur autoclean agar pesan dapat diformat dengan benar.

Saya telah melihat pesan ini di klien email lain dan ditampilkan dengan benar

beberapa informasi lebih lanjut:

  • Saya menggunakan UTF-8 BodyEncoding (msg.BodyEncoding = System.Text.Encoding.UTF8)
  • Msg.Body sedang dibaca dari file teks berenkode UTF-8, dan setiap baris diakhiri dengan crlf.

Pertanyaan: Bagaimana cara mengubah format pesan untuk menghindari masalah ini?

Aheho
sumber
12
Meskipun kedua jawaban yang sangat disukai di bawah ini benar, lihat jawaban ini untuk daftar semua aturan.
Bobson
5
Mengapa "fitur" ini ada?
cabaiNUT
1
Cobalah baris Windows: \r\n. Itu berhasil untuk saya.
kevinarpe

Jawaban:

97

Mulailah setiap baris dengan 2 spasi dan pandangan akan "tertipu" untuk mempertahankan pemformatan Anda.

Jadi berubah

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%

untuk

  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

Inilah artikel yang saya temukan ketika meneliti masalah ini yang masuk ke dalam sedikit lebih dalam daripada jawaban saya.

Alex B
sumber
6
Berikut Regex yang berguna untuk menyelesaikannya:Regex.Replace(messageBody, @"^(?!\s\s)", " ", RegexOptions.Multiline);
Wilfred Knievel
2
Ok, di regex itu ada dua spasi tetapi ini adalah html hanya menampilkan satu!
Wilfred Knievel
Untuk email teks biasa yang dibuat dengan kode, ini adalah solusi terbaik.
Salvador Valencia
129

Anda juga dapat memasukkan karakter tab di akhir baris (tepat sebelum CR LF). Ruang putih ekstra ini akan berada di akhir baris dan karenanya tidak terlihat oleh pengguna. Anda mungkin lebih suka ini daripada harus menyisipkan spasi di sebelah kiri. Perhatikan bahwa satu spasi tidak cukup (meskipun mungkin banyak spasi akan membantu, saya tidak tahu.)

Jim Davis
sumber
14
Regex.Replace(messageBody, @"(?<!\t)((?<!\r)(?=\n)|(?=\r\n))", "\t", RegexOptions.Multiline)
Wilfred Knievel
Solusi sempurna untuk email yang dikirim dari Trac ke pengguna Outlook.
sfarbota
1
+1 Saya harus menggunakan 3 spasi alih-alih tab, tetapi pada dasarnya perbaikan ini berhasil untuk saya: Regex.Replace (messageBody, @ "(? <! \ T) ((? <! \ R) (? = \ N) | (? = \ r \ n)) "," ", RegexOptions.Multiline)
Ryan VandenHeuvel
dikonfirmasi! Berikut regex sebagai potongan php: $ re = '/ (? <! \ T) ((? <! \ R) (? = \ N) | (? = \ R \ n)) / m'; $ subst = ""; $ MailText = preg_replace ($ re, $ subst, $ MailText);
C4pt4inC4nn4bis
Berfungsi untuk Outlook tetapi merusak pesan teks di smartphone fpr klien email samsungs :(
C4pt4inC4nn4bis
26

Jawaban ini adalah tentang cara "menonaktifkan" fitur dari Klien Outlook.

  • Buka Alat -> "Opsi ..."
  • Di tab "Preferensi", klik "Opsi Email ..."
  • Hapus centang pada kotak "Hapus baris baru ekstra di pesan teks biasa."
  • Tekan OK

FYI: Saya menggunakan Outlook 2007

DHornpout
sumber
3
Saya juga tidak suka fitur ini. Antara lain, menyebabkan kode dalam email rusak dan pemeriksaan tanda tangan PGP gagal.
Brian Reiter
7
Dan di Outlook 2010: File> Opsi> Email> Gulir ke bawah ke bagian "Format pesan"> Hapus centang pada kotak "Hapus jeda baris tambahan di pesan teks biasa".
Peter Ford
2
Ini adalah solusi sisi klien. Jauh lebih baik jika metode yang dapat diandalkan untuk mencegah Outlook melakukan hal ini di sisi server, yaitu dengan memformat email dengan cara yang tidak mengganggu klien lain (karena Anda tidak tahu klien email mana yang akan digunakan penerima).
Tobias
7
Terima kasih - dan sekarang harap pandu 100.000+ penerima buletin kami untuk melakukan ini
Muleskinner
4

Saya selalu lebih beruntung dalam memformat email sebagai html. Anda mungkin masih memiliki masalah pengguna akhir karena harus mengatur klien untuk mengizinkan format html, tetapi mereka biasanya lebih akrab dengan ini karena begitu banyak email yang datang dengan format html. Anda juga memiliki sedikit pekerjaan untuk menambahkan tag html, tetapi hasil akhirnya jauh lebih dapat dikontrol.

@ephemient juga menyarankan: Kirim sebagai HTML dan teks biasa. Klien yang baik akan menunjukkan yang terakhir, Outlook akan menampilkan yang pertama, semua orang senang (kecuali programmer yang harus melakukan lebih banyak pekerjaan).

Doug L.
sumber
2
Kirim sebagai HTML dan teks biasa. Klien yang baik akan menunjukkan yang terakhir, Outlook akan menampilkan yang pertama, semua orang senang (kecuali programmer yang harus melakukan lebih banyak pekerjaan).
ephemient
BTW, s / http / html / g di jawaban Anda.
ephemient
4

Menambahkan "\ t \ r \ n" (\ t untuk TAB) alih-alih "\ r \ n" berhasil untuk saya di Outlook 2010.

supernova
sumber
Saya "memecahkan" ini menggunakan "\r\n "(dua spasi, tanpa tab) setelah baris baru sebagai peretasan serupa. Berfungsi di Outlook 2016. YMMV.
pengguna2864740
1

Memperluas jawaban Doug L , karena menurut saya perpesanan HTML bahkan lebih tersebar di mana-mana dan diterima sekarang daripada di tahun 2008 ketika jawaban itu diposting. Berikut ini sedikit cuplikan c # untuk membantu mengubah isi dan mengirim pesan dalam format HTML:

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);
Ho Ho Ho
sumber
0

Saya melihat masalah yang sama saat membuat email teks biasa dan kemudian membacanya dengan Outlook 2003 SP3. Tampaknya Anda dapat menghindari proses penghapusan dengan menjaga panjang baris di bawah 40 karakter. Mungkin tidak selalu praktis.


sumber
0

Letakkan teks di <pre>Tag dan pandangan akan memformat dan menampilkan teks dengan benar.

saya mendefinisikannya dalam CSS inline di HTML Body seperti:

CSS:

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

saya mendefinisikan font-family untuk mengatur font.

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>
Christian Casutt
sumber
1
Saya yakin pertanyaan asli merujuk pada email teks biasa, bukan HTML. Anda mencoba menggabungkan HTML sebagai solusinya.
Chris Peters
0

Pembersihan otomatis adalah fitur pandangan yang menghilangkan jeda baris ekstra. Anda bisa mencegahnya dengan dua cara.

  • Cara pertama adalah menambahkan setidaknya 2 spasi ekstra sebelum baris saat mengirim email melalui kode. Anda dapat menambahkan spasi ekstra ini hanya sebelum garis-garis yang secara otomatis dihapus oleh pandangan.

  • Cara kedua adalah mengubah pengaturan pandangan yang akan mencegah pandangan dari menghapus jeda baris tambahan.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Brijesh Kumar Tripathi
sumber
-1

Teks saya menyertakan '\ r \ n' tetapi Outlook 2010 tidak membuat jeda baris. Buat token baris yang dibatasi oleh '\ r \ n' dan token amplop dengan tag HTML Paragraph. Format email saya adalah HTML. Saya membuat Badan HTML untuk email saya dalam kode di bawah ini.

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();
     }
  }
Keyur Patel
sumber
-6

Ubah penghentian baris Anda dari crlf menjadi cr atau lf.

Saya menduga bahwa bagian atas email hanya menggunakan cr (atau lf), dan Outlook mengharapkan email lainnya mengikuti format yang sama.

seanyboy
sumber
Saya mencoba mengubah terminator baris menjadi CR. Itu tidak berhasil. Kemudian saya mencoba mengubahnya menjadi LF. Itu juga tidak berhasil.
Aheho
1
Diragukan. Outlook memiliki fitur yang sangat meragukan yang mencoba mengonversi email dengan jeda baris tegas menjadi teks mengalir. Tidak mengherankan, sering terjadi kesalahan seperti ini, seperti dalam kasus ini.
Daniel Cassidy