Outlook tự động làm sạch ngắt dòng của tôi và sửa định dạng email của tôi


119

Tôi đang gửi email bằng khuôn khổ dotnet. Đây là mẫu mà tôi đang sử dụng để tạo thông báo:

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%

Khi nhận được tin nhắn trong outlook, outlook cho tôi biết "Các ngắt dòng bổ sung trong thư này đã bị xóa". Và thông báo hiển thị như sau:

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

Lưu ý cách Outlook loại bỏ không chính xác các ngắt dòng cần thiết sau tên, EECoverageAmount, v.v.

Điều quan trọng là người nhận email phải nhận được email được định dạng chính xác và tôi phải giả định rằng một số người trong số họ sử dụng outlook 2003. Tôi cũng không thể cho rằng họ có đủ kiến ​​thức để tắt tính năng autoclean để thư được định dạng đúng cách.

Tôi đã xem những thư này trong các ứng dụng thư khác và chúng hiển thị chính xác

một số thông tin thêm:

  • Tôi đang sử dụng UTF-8 BodyEncoding (msg.BodyEncoding = System.Text.Encoding.UTF8)
  • Msg.Body đang được đọc từ tệp văn bản được mã hóa UTF-8 và mỗi dòng được kết thúc bằng một crlf.

Câu hỏi: Làm cách nào để thay đổi định dạng của thư để tránh sự cố này?


12
Mặc dù cả hai câu trả lời được ủng hộ cao bên dưới đều đúng, hãy xem câu trả lời này để biết danh sách tất cả các quy tắc.
Bobson


5
Tại sao "tính năng" này thậm chí còn tồn tại?
ớtNUT

1
Hãy thử dòng mới Windows: \r\n. Nó đã làm việc cho tôi.
kevinarpe

Câu trả lời:


97

Bắt đầu mỗi dòng với 2 dấu cách và triển vọng sẽ bị "lừa" để giữ định dạng của bạn.

Vì vậy, hãy thay đổi

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%

đến

  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

Đây là bài viết tôi tìm thấy khi nghiên cứu vấn đề này đi sâu hơn một chút so với câu trả lời của tôi.


6
Dưới đây là một Regex tiện dụng để sắp xếp này ra:Regex.Replace(messageBody, @"^(?!\s\s)", " ", RegexOptions.Multiline);
Wilfred Knievel

2
Ok, trong regex đó có hai khoảng trắng nhưng đây là html, nó chỉ hiển thị một!
Wilfred Knievel

Đối với các email văn bản thuần túy được tạo mã, đây là giải pháp tốt nhất.
Salvador Valencia

129

Bạn cũng có thể chèn một ký tự tab vào cuối dòng (ngay trước CR LF). Khoảng trắng thừa này sẽ nằm ở cuối dòng và do đó người dùng không nhìn thấy. Bạn có thể thích điều này hơn là phải chèn khoảng trắng ở bên trái. Lưu ý rằng một khoảng trắng là không đủ (mặc dù có lẽ nhiều khoảng trắng sẽ hữu ích, tôi không biết).


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

Giải pháp hoàn hảo cho các email được gửi từ Trac đến người dùng Outlook.
sfarbota

1
+1 Tôi đã phải sử dụng 3 dấu cách thay vì một tab, nhưng về cơ bản, bản sửa lỗi này phù hợp với tôi: Regex.Replace (messageBody, @ "(? <! \ T) ((? <! \ R) (? = \ N) | (? = \ r \ n)) "," ", RegexOptions.Multiline)
Ryan VandenHeuvel

đã xác nhận! Ở đây regex dưới dạng đoạn mã php: $ re = '/ (? <! \ T) ((? <! \ R) (? = \ N) | (? = \ R \ n)) / m'; $ subst = ""; $ MailText = preg_replace ($ re, $ subst, $ MailText);
C4pt4inC4nn4bis

Công trình cho Outlook nhưng mail phá vỡ văn bản trên máy khách Samsungs email fpr smartphone :(
C4pt4inC4nn4bis

26

Câu trả lời này là về cách "vô hiệu hóa" tính năng từ Máy khách Outlook.

  • Đi tới Công cụ -> "Tùy chọn ..."
  • Trong tab "Tùy chọn", nhấp vào "Tùy chọn Email ..."
  • Bỏ chọn hộp "Xóa các ngắt dòng thừa trong tin nhắn văn bản thuần túy".
  • Nhấn OK

FYI: Tôi đang sử dụng Outlook 2007


3
Tôi cũng không thích tính năng này. Trong số những thứ khác, nó khiến mã trong email bị hỏng và việc kiểm tra chữ ký PGP không thành công.
Brian Reiter

7
Và trong Outlook 2010, đó là: Tệp> Tùy chọn> Thư> Cuộn xuống phần "Định dạng thư"> Bỏ chọn hộp "Loại bỏ ngắt dòng thừa trong tin nhắn văn bản thuần túy".
Peter Ford

2
Đây là một giải pháp phía khách hàng. Tốt hơn nhiều sẽ là một phương pháp đáng tin cậy để ngăn Outlook thực hiện điều này ở phía máy chủ, tức là bằng cách định dạng thư theo cách không làm phiền các máy khách khác (vì bạn không biết người nhận sẽ sử dụng ứng dụng thư nào).
Tobias

7
Cảm ơn - và bây giờ hãy hướng dẫn hơn 100.000 người nhận bản tin của chúng tôi thực hiện điều này
Muleskinner ngày

4

Tôi luôn gặp may mắn hơn khi định dạng e-mail dưới dạng html. Bạn vẫn có thể gặp vấn đề với người dùng cuối khi phải đặt máy khách cho phép định dạng html, nhưng họ thường quen thuộc hơn với điều này vì rất nhiều e-mail được định dạng html. Bạn cũng phải thực hiện thêm một số công việc nữa là thêm các thẻ html, nhưng kết quả cuối cùng có thể kiểm soát được nhiều hơn.

@ephemient cũng gợi ý: Gửi dưới dạng cả HTML và plaintext. Khách hàng tốt sẽ hiển thị cái sau, Outlook sẽ hiển thị cái trước, mọi người đều vui vẻ (trừ lập trình viên phải làm nhiều việc hơn).


2
Gửi dưới dạng cả HTML và bản rõ. Khách hàng tốt sẽ hiển thị cái sau, Outlook sẽ hiển thị cái trước, mọi người đều vui vẻ (trừ lập trình viên phải làm nhiều việc hơn).
ephemient 29/10/08

BTW, s / http / html / g trong câu trả lời của bạn.
ephemient 29/10/08

4

Thêm "\ t \ r \ n" (\ t cho TAB) thay vì "\ r \ n" đã hiệu quả với tôi trên Outlook 2010.


Tôi đã "giải quyết" điều này bằng cách sử dụng "\r\n "(hai dấu cách, không có tab) sau dòng mới như một vụ hack tương tự. Hoạt động trong Outlook 2016. YMMV.
user2864740

1

Mở rộng câu trả lời Doug L , vì tôi nghĩ tin nhắn HTML thậm chí còn phổ biến hơn và được chấp nhận nhiều hơn so với năm 2008 khi câu trả lời đó được đăng. Đây là một đoạn mã c # nhỏ để giúp chuyển đổi nội dung và gửi thông báo ở định dạng 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

Tôi gặp sự cố tương tự khi tạo email văn bản thuần túy và sau đó đọc nó bằng Outlook 2003 SP3. Có vẻ như bạn có thể tránh quá trình xóa bằng cách giữ độ dài dòng dưới 40 ký tự. Có thể không phải lúc nào cũng thực tế.


0

Đặt văn bản trong <pre>Thẻ và outlook sẽ định dạng và hiển thị văn bản một cách chính xác.

tôi đã định nghĩa nó bằng nội tuyến CSS trong HTML Body như:

CSS:

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

tôi đã xác định font-family phải đặt 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>

1
Tôi tin rằng câu hỏi ban đầu đề cập đến các email văn bản rõ ràng, không phải HTML. Bạn đang cố gắng kết hợp HTML như một giải pháp.
Chris Peters

0

Tự động làm sạch là một tính năng triển vọng giúp loại bỏ các ngắt dòng thừa. Bạn có thể ngăn chặn nó bằng hai cách.

  • Cách đầu tiên là thêm ít nhất 2 khoảng trắng thừa trước các dòng trong khi gửi email thông qua mã. Bạn chỉ có thể thêm những khoảng trắng thừa này trước khi những dòng mà triển vọng tự động xóa.

  • Cách thứ hai là thay đổi cài đặt triển vọng, điều này sẽ ngăn triển vọng xóa các dấu ngắt dòng thừa.

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


-1

Văn bản của tôi bao gồm '\ r \ n' nhưng Outlook 2010 không hiển thị ngắt dòng. Tạo mã thông báo các dòng được phân tách bằng '\ r \ n' và mã thông báo phong bì bằng các thẻ Đoạn văn HTML. Định dạng Email của tôi là HTML. Tôi đang tạo HTML Body cho email của mình trong đoạn mã bên dưới.

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

Thay đổi kết thúc dòng của bạn từ crlf thành cr hoặc lf.

Tôi nghi ngờ rằng phần trên cùng của email chỉ sử dụng cr (hoặc lf) và Outlook hy vọng phần còn lại của email sẽ theo cùng một định dạng.


Tôi đã thử thay đổi dấu chấm hết dòng thành CR. Điều đó đã không hoạt động. Sau đó, tôi đã thử thay đổi nó thành LF. Điều đó cũng không hoạt động.
Aheho 29/10/08

1
Nghi ngờ. Outlook có một tính năng rất đáng ngờ, cố gắng chuyển đổi thư có ngắt dòng cứng thành văn bản dòng. Không có gì đáng ngạc nhiên, nó thường xuyên mắc lỗi này, như trong trường hợp này.
Daniel Cassidy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.