Outlook, satır sonlarımı otomatik olarak temizliyor ve e-posta formatımı bozuyor


119

Dotnet çerçevesini kullanarak bir e-posta gönderiyorum. Mesajı oluşturmak için kullandığım şablon:

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%

Mesajlar görünümde alındığında, outlook bana "Bu mesajdaki fazladan satır sonları kaldırıldı" diyor. Ve mesaj şu şekilde görüntülenir:

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'un ad, EECoverageAmount, vb. Sonrasındaki gerekli satır sonlarını nasıl yanlış bir şekilde kaldırdığına dikkat edin.

E-posta alıcılarının doğru biçimde biçimlendirilmiş bir e-posta almaları önemlidir ve bazılarının Outlook 2003 kullandığını varsaymak zorundayım. Ayrıca, iletiyi düzgün biçimlendirmek için otomatik temizleme özelliğini kapatacak kadar bilgili olacaklarını da varsayamıyorum.

Bu iletileri diğer posta istemcilerinde görüntüledim ve doğru görüntüleniyorlar

biraz daha bilgi:

  • UTF-8 BodyEncoding kullanıyorum (msg.BodyEncoding = System.Text.Encoding.UTF8)
  • Msg.Body, UTF-8 kodlu bir metin dosyasından okunuyor ve her satır bir crlf ile sonlandırılıyor.

Soru: Bu sorunu önlemek için mesajın formatını nasıl değiştirebilirim?


12
Aşağıdaki her ikisi de yüksek oy alan cevaplar doğru olsa da, tüm kuralların bir listesi için bu cevaba bakın .
Bobson


5
Bu "özellik" neden var?
chiliNUT

1
, Windows satırsonlarını deneyin: \r\n. Benim için çalıştı.
kevinarpe

Yanıtlar:


97

Her satıra 2 boşlukla başlayın ve görünüm, biçimlendirmenizi korumak için "kandırılır".

Öyleyse değiştir

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%

için

  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

İşte cevabımdan biraz daha derinlere inen bu problemi araştırırken bulduğum makale .


6
İşte bunu çözmek için kullanışlı bir Regex:Regex.Replace(messageBody, @"^(?!\s\s)", " ", RegexOptions.Multiline);
Wilfred Knievel

2
Tamam, bu normal ifadede iki boşluk var ama bu html sadece bir tane gösteriyor!
Wilfred Knievel

Kodla oluşturulan düz metin e-postalar için bu en iyi çözümdür.
Salvador Valencia

129

Ayrıca satırın sonuna (CR LF'den hemen önce) bir sekme karakteri de ekleyebilirsiniz . Bu fazladan beyaz boşluk, satırın sonunda olacak ve dolayısıyla kullanıcı tarafından görülmeyecektir. Sol tarafa boşluk eklemek yerine bunu tercih edebilirsiniz. Tek bir alanın yeterli olmadığını unutmayın (belki birden çok boşluk yardımcı olabilir, bilmiyorum.)


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

Trac'ten Outlook kullanıcılarına gönderilen e-postalar için mükemmel çözüm.
sfarbota

1
+1 Bir sekme yerine 3 boşluk kullanmak zorunda kaldım, ancak temelde bu düzeltme benim için çalıştı: Regex.Replace (messageBody, @ "(? <! \ T) ((? <! \ R) (? = \ N) | (? = \ r \ n)) "," ",
RegexOptions.Multiline

onaylanmış! Burada php snippet olarak normal ifade: $ re = '/ (? <! \ T) ((? <! \ R) (? = \ N) | (? = \ R \ n)) / m'; $ alt = ""; $ MailText = preg_replace ($ re, $ subst, $ MailText);
C4pt4inC4nn4bis

Outlook için çalışıyor, ancak samsungs posta istemcisi fpr akıllı telefonlarında metin postalarını kesiyor :(
C4pt4inC4nn4bis

26

Bu yanıt, özelliğin Outlook İstemcisinden nasıl "devre dışı bırakılacağı" ile ilgilidir.

  • Araçlar -> "Seçenekler ..." e gidin.
  • "Tercihler" sekmesinde "E-posta Seçenekleri ..." seçeneğini tıklayın.
  • "Düz metin mesajlarındaki fazla satır sonlarını kaldır" kutusunun işaretini kaldırın.
  • Tamam'a basın

Bilginize: Outlook 2007 kullanıyorum


3
Ben de bu özelliği sevmiyorum. Diğer şeylerin yanı sıra, e-postalardaki kodun kırılmasına ve PGP imza kontrollerinin başarısız olmasına neden olur.
Brian Reiter

7
Ve Outlook 2010'da: Dosya> Seçenekler> Posta> Aşağı kaydırarak "Mesaj biçimi" bölümüne gidin> "Düz metin mesajlarındaki fazla satır sonlarını kaldır" kutusunun işaretini kaldırın.
Peter Ford

2
Bu, istemci tarafı bir çözümdür. Outlook'un bunu sunucu tarafında yapmasını engellemek için güvenilir bir yöntem daha iyidir, yani postayı diğer istemcileri rahatsız etmeyecek şekilde biçimlendirmek (çünkü alıcının hangi posta istemcisini kullanacağını bilmiyorsunuz).
Tobias

7
Teşekkürler - ve şimdi lütfen bunu yapmak için 100.000'den fazla haber bülteni alıcımıza rehberlik edin
Muleskinner

4

E-postaları html olarak biçimlendirme konusunda her zaman daha şanslıydım. Hala istemciyi html formatına izin verecek şekilde ayarlamak zorunda kalma gibi son kullanıcı sorunu yaşıyor olabilirsiniz, ancak çoğu e-posta html formatlı olarak geldiği için genellikle buna daha aşinadırlar. Ayrıca, html etiketlerini eklemek için biraz daha çalışmanız da var, ancak sonuç çok daha kontrol edilebilir.

@ephemient şunu da öneriyor: Hem HTML hem de düz metin olarak gönder. İyi müşteriler ikincisini gösterecek, Outlook ilkini gösterecek, herkes mutlu (daha fazla iş yapması gereken programcı hariç).


2
Hem HTML hem de düz metin olarak gönderin. İyi müşteriler ikincisini gösterecek, Outlook ilkini gösterecek, herkes mutlu (daha fazla iş yapması gereken programcı hariç).
ephemient

Cevabınızda BTW, s / http / html / g.
ephemient

4

Outlook 2010'da "\ r \ n" yerine "\ t \ r \ n" (\ t için TAB için) eklemek işe yaradı.


Bunu "\r\n "yeni satırdan sonra benzer bir hack olarak (iki boşluk, sekme yok) kullanarak "çözdüm" . Outlook 2016'da Çalışır. YMMV.
user2864740

1

Doug L cevabını genişletmek gerekirse , HTML mesajlaşmanın daha da yaygın olduğunu ve 2008'de bu cevabın yayınlandığı zamandan şimdi kabul edildiğini düşünüyorum. Burada, gövdeyi dönüştürmeye ve mesajı HTML biçiminde göndermeye yardımcı olacak küçük bir c # pasajı verilmiştir:

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

Düz metin e-posta oluştururken ve ardından Outlook 2003 SP3 ile okurken aynı sorunu görüyorum. Görünüşe göre satır uzunluğunu 40 karakterin altında tutarak kaldırma işlemini önleyebilirsiniz. Her zaman pratik olmayabilir.


0

Metni <pre>Etiketlere koyun ve outlook metni doğru şekilde biçimlendirecek ve görüntüleyecektir.

Bunu HTML Gövdesinde CSS satır içi olarak tanımladım:

CSS:

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

yazı tipi ailesini yazı tipi ayarına göre tanımladım.

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
Orijinal sorunun HTML değil, düz metin e-postalarla ilgili olduğuna inanıyorum. Çözüm olarak HTML ile karıştırmaya çalışıyorsunuz.
Chris Peters

0

Otomatik temizleme, fazladan satır sonlarını kaldıran bir görünüm özelliğidir. Bunu iki şekilde önleyebilirsiniz.

  • İlk yol , e-postayı kod aracılığıyla gönderirken satırlardan önce en az 2 ekstra boşluk eklemektir. Bu fazladan boşlukları yalnızca, görünümün otomatik olarak kaldırıldığı satırlardan önce ekleyebilirsiniz.

  • İkinci yol , görünümün fazladan satır sonlarını kaldırmasını önleyecek olan görünüm ayarını değiştirmektir.

görüntü açıklamasını buraya girin

görüntü açıklamasını buraya girin


-1

Metnim '\ r \ n' içeriyor ancak Outlook 2010 satır sonu oluşturmuyor. '\ R \ n' ile ayrılmış satırların jetonları ve HTML Paragraf etiketleriyle zarf jetonları oluşturun. E-posta formatım HTML'dir. Aşağıdaki kodda e-postam için HTML Gövdesi oluşturuyorum.

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

Satır sonunuzu crlf'den cr veya lf'ye değiştirin.

E-postanın üst kısmının yalnızca cr (veya lf) kullandığından şüpheleniyorum ve Outlook, e-postanın geri kalanının aynı biçimi izlemesini bekliyor.


Hat sonlandırıcısını CR olarak değiştirmeyi denedim. Bu işe yaramadı. Sonra onu bir LF olarak değiştirmeyi denedim. Bu da işe yaramadı.
Aheho

1
Şüpheli. Outlook, postaları sabit satır sonlarıyla akan metne dönüştürmeye çalışan oldukça şüpheli bir özelliğe sahiptir. Şaşırtıcı olmayan bir şekilde, bu durumda olduğu gibi sık sık bunu yanlış anlıyor.
Daniel Cassidy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.