Outlook이 내 줄 바꿈을 자동 정리하고 내 이메일 형식을 망쳐 놓습니다.


119

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로 끝납니다.

질문 :이 문제를 방지하기 위해 메시지 형식을 어떻게 변경합니까?


12
아래의 두 가지 높은 찬성 답변이 옳지 만 모든 규칙 목록 은 이 답변 을 참조하십시오 .
Bobson 2013


5
이 "기능"이 존재하는 이유는 무엇입니까?
chiliNUT

1
Windows 줄 바꿈 : \r\n. 그것은 나를 위해 일했습니다.
kevinarpe

답변:


97

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

여기입니다 기사 내 대답보다 조금 더 깊이 들어가는이 문제를 연구 할 때 내가 찾은이.


6
다음은이를 분류하는 편리한 정규식입니다.Regex.Replace(messageBody, @"^(?!\s\s)", " ", RegexOptions.Multiline);
Wilfred Knievel

2
좋아, 그 정규식에는 두 개의 공백이 있지만 이것은 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

확인! 여기 정규식을 php snippet으로 : $ re = '/ (? <! \ t) ((? <! \ r) (? = \ n) | (? = \ r \ n)) / m'; $ subst = ""; $ MailText = preg_replace ($ re, $ subst, $ MailText);
C4pt4inC4nn4bis

Outlook에서 작동하지만 samsungs 메일 클라이언트 fpr 스마트 폰에서 텍스트 메일을 끊습니다. :(
C4pt4inC4nn4bis

26

이 대답은 Outlook 클라이언트에서 기능을 "비활성화"하는 방법에 대한 것입니다.

  • 도구-> "옵션 ..."으로 이동합니다.
  • "기본 설정"탭에서 "이메일 옵션 ..."을 클릭합니다.
  • "일반 텍스트 메시지에서 추가 줄 바꿈 제거"상자의 선택을 취소하십시오.
  • 확인을 누르십시오.

참고 : Outlook 2007을 사용하고 있습니다.


3
이 기능도 마음에 들지 않습니다. 무엇보다도 이메일의 코드가 손상되고 PGP 서명 검사가 실패합니다.
Brian Reiter

7
Outlook 2010에서는 파일> 옵션> 메일> "메시지 형식"섹션까지 아래로 스크롤 한 다음 "일반 텍스트 메시지에서 추가 줄 바꿈 제거"상자를 선택 취소합니다.
Peter Ford

2
이것은 클라이언트 측 솔루션입니다. Outlook이 서버 측에서이 작업을 수행하지 못하도록 방지하는 안정적인 방법이 훨씬 좋습니다. 즉, 다른 클라이언트를 방해하지 않는 방식으로 메일 형식을 지정하는 것입니다 (수신자가 어떤 메일 클라이언트를 사용할지 모르기 때문입니다).
Tobias

7
감사합니다. 이제 100.000+ 뉴스 레터 수신자를 안내해주세요
Muleskinner 2017 년

4

나는 항상 이메일을 html로 형식화하는 것이 더 행운이었습니다. html 형식을 허용하도록 클라이언트를 설정해야하는 최종 사용자 문제가 여전히있을 수 있지만, 많은 전자 메일이 html 형식으로 제공되기 때문에 일반적으로 이것에 더 익숙합니다. 또한 html 태그를 추가하는 데 약간의 작업이 필요하지만 최종 결과는 훨씬 더 제어 가능합니다.

@ephemient는 또한 다음을 제안합니다. HTML과 일반 텍스트로 전송합니다. 좋은 고객은 후자를, Outlook은 전자를, 모두가 행복합니다 (더 많은 일을해야하는 프로그래머를 제외하고).


2
HTML 및 일반 텍스트로 전송합니다. 좋은 고객은 후자를, Outlook은 전자를, 모두가 행복합니다 (더 많은 일을해야하는 프로그래머를 제외하고).
ephemient

답변에 BTW, s / http / html / g.
ephemient

4

Outlook 2010에서 "\ r \ n"대신 "\ t \ r \ n"(TAB의 경우 \ t)를 추가하면 저에게 효과적이었습니다.


나는 "\r\n "비슷한 핵으로 줄 바꿈 뒤에 (두 개의 공백, 탭 없음)을 사용하여 이것을 "해결"했습니다 . Outlook 2016에서 작동합니다. YMMV.
user2864740

1

Doug L 답변을 확장하면 HTML 메시징이 훨씬 더 보편화되어 있으며 해당 답변이 게시 된 2008 년보다 현재 수용되고 있습니다. 다음은 본문을 변환하고 메시지를 HTML 형식으로 보내는 데 도움이되는 작은 C # 스 니펫입니다.

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이 텍스트를 올바르게 형식화하고 표시합니다.

HTML 본문의 CSS 인라인에서 다음과 같이 정의했습니다.

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.