У меня сегодня была интересная ошибка при отправке текстовых электронных писем из нашей системы. Мы форматируем сообщения так:
-1-е, что-то случилось, бла бла.
-2 и что-то еще случилось, блаб бла бла бла.
Сегодня у нас было письмо, которое выглядело так:
-1-е, что-то случилось, бла бла.
2-е что-то еще произошло блаб-бла-бла-бла $ 1000,00 -3-е Что-то случилось.
Итак, выше мы видим, что мы потеряли CrLf, но только в сообщении, которое не имело периода и завершилось 0. Я просмотрел код и обнаружил, что CrLf взломан до тех пор, пока мы не отправим письмо. Я проследил код ниже, я думаю, что это относится и к C #:
ПРИМЕЧАНИЕ : Мы используем Environment.NewLine
при построении строки для тела.
Построение строки:
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
Настройка кодировки электронной почты:
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
Я хочу знать, что произошло при переводе строки во время кодирования / декодирования UTF-8, которое удаляет CrLf?!
Проблема была в Outlook, см. Ниже:
Снимок экрана перспективы