Разрывы строк игнорируются при отправке почты в виде обычного текста

У меня есть текст вроде "Привет, rn это тест R n Спасибо" я отправляю почту с помощью класса MailMessage. Я установил для свойства "IsBodyHtml" значение false. Вопрос в том, что я получаю письма без разрывов. Ты можешь сказать мне, чего мне не хватает?

8 ответов


использовать Environment.NewLineв MSDN вместо \r\n.


У нас была та же проблема, но если вы определяете свое сообщение сразу в строка, а не StringBuilder, вы можете определить свое сообщение следующим образом:

string message = string.Format(
@"First Line: {0}
Second Line: {1}
ThirdLine: {2}", firstValue, secondValue, thirdValue);

определение тела сообщения, как это, и установка IsBodyHtml = false, даст вам новые строки, которые вы хотите.

в противном случае, используйте StringBuilder

var sb = new StringBuilder();
sb.AppendLine("FirstLine");
sb.AppendLine("SecondLine");

Если Вы читаете свои письма из Outlook, это может быть Outlook, который удаляет разрывы строк, думая, что они являются дополнительными разрывами строк. Вы пробовали читать свои письма из другого программного обеспечения - или, может быть, веб-почты?


Это функция в Outlook, вы можете отключить ее в Outlook. Перейдите в раздел Параметры-почта - и в разделе "формат сообщения" снимите флажок "удалить дополнительные разрывы строк в текстовых сообщениях".

другое решение-добавить три пробела в конце каждой строки при отправке почты. Это, похоже, заставляет Outlook признать, что это не дополнительный разрыв строки.


чтобы иметь возможность включать разрывы строк, а не просто простой тест в вашей почте, вам нужно будет установить HTML-код тела в true, я думаю.


более сложная причина, по которой это может произойти, что мне просто пришлось иметь дело с:

  • ваш почтовый сервер манипулирует исходящими сообщениями и добавляет html-версию к вашему текстовому сообщению

У меня была аналогичная проблема, когда большинство моих разрывов не работал, но никого не было. Если я нажму ответить на письмо, которое не показывало разрывы строк, исходный текст электронной почты под ответом покажет разрыв строки (так что это указывает на проблему outlook). Я попробовал рекомендуемый ответ среды.NewLine и это ничего не изменило. В моем случае добавление точки в конце оператора, где я хотел новую строку, а затем ввод a \r\n, сделало трюк. В предыдущая ссылка, которую я опубликовал в этом обсуждении, Outlook использует некоторые правила для фильтрации фидов строк, и в вопросе, который начал это обсуждение, я заметил, что у вас нет точки в конце предложения.


Я отправлял уведомление по электронной почте через сценарий PowerShell, а также не получал разрывов строк при просмотре почты в Outlook. Для меня решение в том .ps1 файл был такой:

$emailMessage.Body = "First Line" + "`r`n" + "Second Line"