2011-02-24 7 views
0

오늘 우리 시스템에서 일반 텍스트 전자 메일을 보낼 때 흥미로운 버그가있었습니다. 다음과 같은 형식으로 메시지를 형식화합니다.MailMessage.Body가 Encoding.UTF8로 CrLf를 잃었습니다.

-1 번 blab bla가 발생했습니다.
-2 번째 다른 일이 blab blab blaa bla 발생했습니다.

-1 뭔가 수다 즐 무슨 일이 있었 :

오늘 우리는이 안쪽의 이메일을했다.
-2 번째 다른 일이 있었다 blab blab blaa bla $ 1000.00 -3rd 뭔가가 발생했습니다.

위와 같이, 위와 같이 마침표가없고 0으로 끝난 메시지에 대해서만 CrLf를 잃어버린 것을 볼 수 있습니다. 코드를 살펴본 후 전자 메일을 보낼 때까지 CrLf가 들어간 것으로 나타났습니다.

참고 : 몸의 캐릭터를 구축 할 때 우리는 Environment.NewLine을 사용 나는 내가 그것뿐만 아니라 C#을 적용 추측하고, 아래로 아래의 코드를 추적.

If Not errorList Is Nothing Then 
    If errorList.Count > 0 Then 
     strBldrBody.Append(EMailHelper.CrLf) 
     strBldrBody.Append(EMailHelper.CrLf) 
     strBldrBody.Append("Response Error List:") 
     For Each itm As String In errorList 
     strBldrBody.Append(EMailHelper.CrLf) 
     strBldrBody.Append(DataHelper.DASH) 
     strBldrBody.Append(itm) 
     Next 
    End If 
End If 

이메일 인코딩 설정 :

문자열 구축 I는 UTF-8 인코딩/디코딩시 문자열 변환에 무슨 일이 있었는지 알고 싶어

Try 
    If Not String.IsNullOrEmpty(recipient) Then 
     Using mailMsg As MailMessage = New MailMessage() 

      mailMsg.From = New MailAddress(_configHelper.EmailFrom) 
      mailMsg.Subject = subject 
      mailMsg.Body = body 
      mailMsg.BodyEncoding = Encoding.UTF8 

      EMailHelper.SetToAddress(recipient, mailMsg) 

      Dim smtpClient As SmtpClient = New SmtpClient(_configHelper.EmailRelayServer) 

      smtpClient.Send(mailMsg) 
     End Using 
    End If 

Catch ex As System.Exception 
    'logs error 
End Try 

을 그 CrLf를 제거합니까?! outlook screen shot

+0

'압정에'그가 의미는 '그대로'하지 '압정까지에 "아무것도 의미하지 않는다. 코드 스 니펫은 문제를 재현 할 수 없습니다. –

+0

@ 한스 : 그는 "그 때까지는 ..."이라고 생각했습니다. –

답변

1

우리는 방금 이와 비슷한 문제가 있었지만 바이트 스트림에서 문자열로 변환 한 것으로 나타났습니다. 나는 또한 인코딩이 섞일 때 이런 일이 일어나는 것을 보았습니다. 게시 된 코드에서이 문제가 어떻게 발생하는지 알 수 없습니다. 아, 그리고 한스에

-

+0

정확합니다. 불가능합니다. Outlook에서 "여분의 줄 바꿈"이 제거되었습니다. –

1

당신은 메시지가 메시지를 보내는 시점까지 (즉, 줄 바꿈 포함) 그대로라고하지만, 메시지가 수신되었을 때하지 않았다 :

문제는 아웃룩은 아래를 참조했다 개행을 포함합니까? 이 오류를 복제 할 수 있습니까?

컨트롤이 어떻게 든 개행을 잃어 버렸을 가능성이 있지만, 중계 서버 중 하나가 번역에서 어딘가에서 번역본을 잃어 버렸거나 이메일 클라이언트가 올바르게 렌더링하지 못했을 가능성이 있습니다.

메시지는 서버간에 엄청난 수의 서로 다른 변환 단계를 거치며 그 중 일부는 엄격하게 디버깅 된 것보다 적습니다. 특히 quoted-printable encoding에는 많은 구현이 정확하지 않은 몇 가지 흥미로운 사례가 있습니다.

귀하의 릴레이 서버가 로컬 인 경우, 귀하가받은 메시지 사본을 저장할 수 있도록 로깅을 켜는 것이 좋습니다. 수신 측에서는 클라이언트 소프트웨어에 의한 번역없이 메시지의 실제 비트 (가능한 경우)를 가져옵니다.

관련 문제