Indy: TidMessage удаляет все диакритические знаки. Как это отключить?

Я отправляю электронные письма, используя компоненты indy TidSMTP и TidMessage.

Я получаю письма без акцентов.

Если я сделаю, например:

MyTIdMessage.Body.Text := 'Tèst';

Когда я получаю электронное письмо, я вижу «Тест» вместо «Тест».

Есть ли способ сказать TIdMessage не игнорировать акценты или это ошибка?

Примечание. Я использую Indy 10.5.8.0.


person LaBracca    schedule 22.11.2010    source источник
comment
какую версию делфи вы используете? Я только что сделал тест с Delphi XE/Indy 10.5.7, и он работает очень хорошо, отправляя через сервер обмена (игнорируя версию) на gmail.   -  person jachguate    schedule 22.11.2010
comment
Акценты требуют использования Unicode, который не поддерживался в VCL/RTL до Delphi 2009. Indy приходится преодолевать множество дополнительных ручных обручей, чтобы поддерживать Unicode в Delphi 2007 и более ранних версиях, поэтому всегда возможно, что мы что-то упустили. здесь и там.   -  person Remy Lebeau    schedule 23.11.2010
comment
Акцентам AFAIK не нужен Unicode - просто кодировка передачи контента и кодировка, которая их поддерживает. Например, с charset=iso-8859-1 и Content-Transfer-Encoding: quoted-printable   -  person    schedule 23.11.2010
comment
Конечно, символы за пределами 7-битного диапазона должны быть правильно закодированы с использованием формата кодирования передачи, то есть использование più с кавычками для печати становится pi=F9. Правильно ли Indy кодирует сообщение? Надеюсь, что так.   -  person    schedule 23.11.2010


Ответы (2)


Обязательно установите правильные Enconding, ContentTransferEncoding и CharSet. Будучи одним из старейших протоколов, почта предназначена для использования компьютерами, использующими только 7 бит, поэтому символы, отличные от US-ASCII, необходимо кодировать. Есть несколько разных способов (quoted-printable, etc.)

Также проверьте событие OnInitializeISO.

person Community    schedule 22.11.2010
comment
Спасибо, решение было MyIdMessage.Encoding := meDefault; - person LaBracca; 23.11.2010

Убедитесь, что вы установили правильный CharSet, выполнив это

MyIdMessage.CharSet := 'US-ASCII';

строковые значения перечислены в массиве IdCharsetNames.

person Mike Taylor    schedule 22.11.2010
comment
US-ASCII выглядит не самым подходящим для акцента набором символов. Для большинства западноевропейских языков я бы использовал ISO-8859-1 или ISO-8859-15 (евро и полная поддержка финского/французского языков), если использование UTF-8 невозможно. Windows-1252 почти похожа на ISO-8859-1, но также включает -15 символов (с другими кодовыми точками). Для других языков требуются другие наборы символов (или UTF). - person ; 23.11.2010
comment
«US-ASCII» был только примером того, как его установить, я предполагал, что они будут использовать набор символов, соответствующий их потребностям. - person Mike Taylor; 23.11.2010