Почему в некоторых случаях электронное письмо, отправленное с помощью idSMTP, не переходит на новую строку? - PullRequest
4 голосов
/ 17 января 2012

Я отправляю текстовое электронное письмо, используя 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 разрывов строк, которые проблематичны в перспективе (но вы можете видеть, что в NP ++ они выглядят как все остальные разрывы строк): Email body in NotePad++

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

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

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

Ответы [ 2 ]

6 голосов
/ 17 января 2012

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

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

EDIT: Это проблема Outlook Express.

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


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

Метод 2. Использование формата HTML или Rich Text Вы можете использовать форматы HTML или Rich Text при создании новых элементов. Или вы можете изменить существующие сообщения на эти форматы.

1 голос
/ 18 января 2012

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

...