Почему в некоторых условиях электронное письмо, отправленное с помощью idSMTP, неправильно переходит на новую строку?

StackOverflow https://stackoverflow.com/questions/8895953

  •  29-10-2019
  •  | 
  •  

Вопрос

Я отправляю электронное письмо только в текстовом виде, используя TIdMessage и TIdSMTP.

Для Body Я использую простую объединенную строку, например

Body := SomeText + #13#10 +
          SomeOtherText + #13#10 +
          SomeMoreText + #13#10 +
          FinalText;

В любом случае, в сгенерированном электронном письме некоторые из "#13#10- не игнорируются.Я регистрирую Body переменная, и я вижу, что текст переходит на новую строку, во всяком случае, в электронном письме этого не происходит.Самое странное, что это происходит не в каждой строке, а только в некоторых.

У вас есть идея, почему это происходит?Можете ли вы предложить что-нибудь для проверки?Существует ли какой-то возможный конфликт между #13#10 а текстовое сообщение электронной почты в каких условиях?

Обновить

После дополнительного расследования (благодаря вашим комментариям) Я понял, что это проблема с визуализацией Outlook, в любом случае проблема мне все еще не ясна.

Это текст письма, открытого в NotePad ++ (я открыл файл msg, сохраненный из Outlook), где я также показываю разрывы строк (вы можете видеть #13 # 10 как CR LF.Я выделил красным и зеленым 2 перевода строк, которые являются проблематичными в Outlook (но вы можете видеть, что в NP ++ они выглядят так же, как и все остальные переводы строк):Email body in NotePad++

Электронное письмо в Outlook выглядит следующим образом (обратите внимание, что Outlook сообщает, что в сообщении есть дополнительные разрывы строк и что они были удалены, но он предлагает возможность их восстановить:EMail in Outlook displayin bad]

После выбора этой опции электронное письмо будет отправлено в порядке:enter image description here

Я не понимаю, почему это происходит только при некоторых разрывах строк.Помогает ли это вам лучше понять проблему?

Это было полезно?

Решение

Вы могли бы попробовать использовать IdMessage.NoEncode := True так что Тело не будет RCF 821 закодированный.

Или лучше использовать современную кодировку IdMessage.ContentType := 'text/html' и заменить #13#10 с <br>

Редактировать: Это проблема с Outlook Express.

Посмотри Здесь и Здесь.Обходным решением было бы добавить 2 пустых символа в начало каждой строки текста, чтобы Outlook не удалял разрывы.


Обратите внимание, что служба поддержки Microsoft также предлагает использовать формат HTML в качестве возможного обходного пути с Outlook Express:

Способ 2. Используйте HTML или формат расширенного текста При создании новых элементов вы можете использовать форматы HTML или Rich Text.Или вы можете изменить существующие записи на эти форматы.

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top