Outlook ทำความสะอาดบรรทัดของฉันโดยอัตโนมัติและทำให้รูปแบบอีเมลของฉันแย่ลง


119

ฉันกำลังส่งอีเมลโดยใช้ dotnet framework นี่คือเทมเพลตที่ฉันใช้สร้างข้อความ:

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

คำถาม: ฉันจะเปลี่ยนรูปแบบของข้อความเพื่อหลีกเลี่ยงปัญหานี้ได้อย่างไร?


12
แม้ว่าคำตอบที่ได้รับการโหวตสูงทั้งสองด้านล่างจะถูกต้องโปรดดูคำตอบนี้สำหรับรายการกฎทั้งหมด
Bobson


5
เหตุใดจึงมี "คุณลักษณะ" นี้
ChiliNUT

1
ลองบรรทัดใหม่ของ \r\nWindows: มันได้ผลสำหรับฉัน
kevinarpe

คำตอบ:


97

เริ่มต้นทุกบรรทัดด้วยช่องว่าง 2 ช่องและแนวโน้มจะถูก "หลอก" ให้รักษาการจัดรูปแบบของคุณ

ดังนั้นเปลี่ยน

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 ที่มีประโยชน์ในการจัดการสิ่งนี้:Regex.Replace(messageBody, @"^(?!\s\s)", " ", RegexOptions.Multiline);
Wilfred Knievel

2
ตกลงใน regex นั้นมีช่องว่างสองช่อง แต่นี่คือ html มันแสดงเพียงช่องเดียว!
Wilfred Knievel

สำหรับรหัสที่สร้างอีเมลข้อความธรรมดานี่คือทางออกที่ดีที่สุด
Salvador Valencia

129

คุณยังสามารถแทรกอักขระแท็บที่ท้ายบรรทัด (ก่อน CR LF) ช่องว่างสีขาวพิเศษนี้จะอยู่ท้ายบรรทัดและด้วยเหตุนี้ผู้ใช้จึงมองไม่เห็น คุณอาจชอบที่จะต้องแทรกช่องว่างทางด้านซ้าย โปรดทราบว่าช่องว่างเดียวไม่เพียงพอ (แม้ว่าการเว้นวรรคอาจช่วยได้ แต่ฉันก็ไม่รู้)


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

โซลูชันที่สมบูรณ์แบบสำหรับอีเมลที่ส่งจาก Trac ไปยังผู้ใช้ Outlook
sfarbota

1
+1 ฉันต้องใช้ช่องว่าง 3 ช่องแทนแท็บ แต่โดยพื้นฐานแล้วการแก้ไขนี้ใช้ได้ผลกับฉัน: Regex.Replace (messageBody, @ "(? <! \ t) ((? <! \ r) (? = \ n) | (? = \ r \ n)) "," ", RegexOptions.Multiline)
Ryan VandenHeuvel

ยืนยัน! นี่ regex เป็น php snippet: $ re = '/ (? <! \ t) ((? <! \ r) (? = \ n) | (? = \ r \ n)) / m'; $ subst = ""; $ MailText = preg_replace ($ re, $ subst, $ MailText);
C4pt4inC4nn4bis

ใช้งานได้กับ Outlook แต่หยุดส่งข้อความบนสมาร์ทโฟนไคลเอ็นต์อีเมลของ samsungs fpr :(
C4pt4inC4nn4bis

26

คำตอบนี้คือวิธี "ปิดใช้งาน" คุณลักษณะจากไคลเอนต์ Outlook

  • ไปที่ Tools -> "Options ... "
  • ในแท็บ "ค่ากำหนด" คลิกที่ "ตัวเลือกอีเมล ... "
  • ยกเลิกการเลือกช่อง "ลบการขึ้นบรรทัดใหม่ในข้อความธรรมดา"
  • กดตกลง

FYI: ฉันใช้ Outlook 2007


3
ฉันไม่ชอบคุณสมบัตินี้เช่นกัน เหนือสิ่งอื่นใดคือทำให้โค้ดในอีเมลเสียและการตรวจสอบลายเซ็น PGP ล้มเหลว
Brian Reiter

7
และใน Outlook 2010 คือไฟล์> ตัวเลือก> จดหมาย> เลื่อนลงไปที่ส่วน "รูปแบบข้อความ"> ยกเลิกการเลือกช่อง "ลบบรรทัดพิเศษในข้อความธรรมดา"
Peter Ford

2
นี่คือโซลูชันฝั่งไคลเอ็นต์ วิธีที่ดีกว่ามากจะเป็นวิธีที่เชื่อถือได้ในการป้องกันไม่ให้ Outlook ทำเช่นนี้บนฝั่งเซิร์ฟเวอร์กล่าวคือโดยการจัดรูปแบบอีเมลในลักษณะที่ไม่รบกวนไคลเอ็นต์อื่น ๆ (เพราะคุณไม่รู้ว่าไคลเอ็นต์อีเมลใดที่ผู้รับจะใช้)
Tobias

7
ขอบคุณ - และตอนนี้โปรดแนะนำผู้รับจดหมายข่าวมากกว่า 100,000 รายการของเราในการทำสิ่งนี้
Muleskinner

4

ฉันโชคดีกว่าเสมอในการจัดรูปแบบอีเมลเป็น html คุณอาจยังคงมีปัญหาของผู้ใช้ปลายทางที่ต้องตั้งค่าไคลเอนต์ให้อนุญาตรูปแบบ html แต่โดยปกติแล้วพวกเขาจะคุ้นเคยกับสิ่งนี้มากกว่าเนื่องจากอีเมลจำนวนมากมีรูปแบบ html นอกจากนี้คุณยังต้องดำเนินการเพิ่มเติมเล็กน้อยในการเพิ่มแท็ก html แต่ผลลัพธ์สุดท้ายสามารถควบคุมได้มากกว่า

@ephemient ยังแนะนำ: ส่งเป็นทั้ง HTML และข้อความธรรมดา ลูกค้าที่ดีจะแสดงให้เห็นในภายหลัง Outlook จะแสดงอดีตทุกคนมีความสุข (ยกเว้นโปรแกรมเมอร์ที่ต้องทำงานมากขึ้น)


2
ส่งเป็นทั้ง HTML และข้อความธรรมดา ลูกค้าที่ดีจะแสดงให้เห็นในภายหลัง Outlook จะแสดงอดีตทุกคนมีความสุข (ยกเว้นโปรแกรมเมอร์ที่ต้องทำงานมากขึ้น)
ephemient

BTW, s / http / html / g ในคำตอบของคุณ
ephemient

4

การเพิ่ม "\ t \ r \ n" (\ t สำหรับ TAB) แทน "\ r \ n" ใช้ได้ผลกับฉันใน Outlook 2010


ฉัน "แก้ไข" สิ่งนี้โดยใช้"\r\n "(สองช่องว่างไม่มีแท็บ) หลังขึ้นบรรทัดใหม่เป็นแฮ็กที่คล้ายกัน ทำงานใน Outlook 2016. YMMV.
user2864740

1

การขยายคำตอบของDoug Lเนื่องจากฉันคิดว่าการส่งข้อความ HTML เป็นที่แพร่หลายและได้รับการยอมรับมากกว่าในปี 2008 เมื่อมีการโพสต์คำตอบนั้น นี่คือข้อมูลโค้ด c # เล็ก ๆ น้อย ๆ ที่จะช่วยแปลงเนื้อหาและส่งข้อความในรูปแบบ 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);

0

ฉันพบปัญหาเดียวกันเมื่อสร้างอีเมลข้อความธรรมดาแล้วอ่านด้วย Outlook 2003 SP3 ดูเหมือนว่าคุณสามารถหลีกเลี่ยงกระบวนการลบได้โดยให้ความยาวบรรทัดไม่เกิน 40 อักขระ อาจใช้ไม่ได้จริงเสมอไป


0

ใส่ข้อความใน<pre>แท็กแล้ว Outlook จะจัดรูปแบบและแสดงข้อความได้อย่างถูกต้อง

ฉันกำหนดไว้ใน CSS แบบอินไลน์ใน HTML Body เช่น:

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 เป็นโซลูชัน
Chris Peters

0

การทำความสะอาดอัตโนมัติเป็นคุณลักษณะของ Outlook ซึ่งจะลบการแบ่งบรรทัดเพิ่มเติม คุณสามารถป้องกันได้สองวิธี

  • วิธีแรกคือเพิ่มช่องว่างอย่างน้อย 2 ช่องก่อนบรรทัดในขณะที่ส่งอีเมลผ่านรหัส คุณสามารถเพิ่มช่องว่างเหล่านี้ก่อนบรรทัดที่ Outlook จะลบโดยอัตโนมัติเท่านั้น

  • วิธีที่สองคือการเปลี่ยนการตั้งค่า 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

1
น่าสงสัย Outlook มีคุณสมบัติที่น่าสงสัยอย่างมากซึ่งพยายามแปลงจดหมายที่มีการแบ่งบรรทัดยากเป็นข้อความต่อเนื่อง ไม่น่าแปลกใจที่มักจะเกิดความผิดพลาดเช่นในกรณีนี้
Daniel Cassidy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.