Кодировка UTF-8 тела письма idSMTP

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Кодировка UTF-8 тела письма idSMTP

Сообщение jsa » 03.07.2020 09:42:01

Здравствуйте.
Использую indy10
Не могу разобраться как отсылать почту в кодировке UTF-8

Сделал процедуру. Работает.
Когда указана кодировка windows-1251 то тело письма отображается нормально.
Но если указать utf-8 то приходят кракозябры.
при этом "тема" письма, всегда отображается нормально.

Подскажите пожалуйста, что не так.

Код: Выделить всё
procedure Send_mail_SMTP();
var clSMTP : TIdSMTP;
    sTXT : string;
begin
     clSMTP := TIdSMTP.Create(nil);                                             
     clSMTP.Host := MsgOper.smtp;
     clSMTP.Port := MsgOper.smtp_port;
     clSMTP.Username := MsgOper.login;
     clSMTP.Password := MsgOper.Password;
     clSMTP.AuthType := satDefault;

     if MsgOper.smtp_encryption='SSL/TLS' then
        begin
        clSMTP.IOHandler := sOpenSSL;
        clSMTP.UseTLS := utUseExplicitTLS;                                     
        end;

     sMessage.From.Address := FromAddress;                                     
     sMessage.Recipients.EMailAddresses := Msg.dest_email;                     
     sMessage.Subject := UTF8Encode(Msg.msg_subject);                           
     sMessage.ContentType := 'text/plain';
     sMessage.CharSet := MsgOper.charset;
     if MsgOper.charset='windows-1251'
        then sTXT := UTF8ToWinCP(Msg.msg_text)
        else if MsgOper.charset='utf-8'
             then sTXT := UTF8Encode(Msg.msg_text)
             else sTXT := Msg.msg_text;                                       
     sMessage.Body.Text := sTXT;                                               
     sMessage.Date:= now;                                                     
     sMessage.IsEncoded:=true;

     try
        clSMTP.Connect();                                                     
        clSMTP.Send(sMessage);                                                 
        Msg.msg_id:=0;
        Msg.msg_cnt_part:=1;
        Msg.msg_cost:=0;
        Msg.msg_status:='отправлено';
        Msg.msg_done:=1;
     except
        writelog.WrLog( 'ОШИБКА!!! Подключение к SMTP серверу не удалось. ');
        Msg.msg_id:=0;
        Msg.msg_cnt_part:=0;
        Msg.msg_cost:=0;
        Msg.msg_status:='Нет подключения';
        Msg.msg_done:=0;
        exit;
     end;
     sleep(10);                                                               
     clSMTP.Disconnect;                                                         
     clSMTP.Destroy;                                                         

end;                                                             
jsa
постоялец
 
Сообщения: 160
Зарегистрирован: 28.11.2017 13:46:04

Re: Кодировка UTF-8 тела письма idSMTP

Сообщение Снег Север » 03.07.2020 11:36:27

Никогда не устанавливал indy в лазарь, а в делфи TIdSMTP использовал много раз, там никакой перекодировки для utf-8 не требовалось в sMessage.Subject и sMessage.Body.
А sTXT ваш, случайно, не html со своим CharSet?
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2604
Зарегистрирован: 27.11.2007 16:14:47

Re: Кодировка UTF-8 тела письма idSMTP

Сообщение jsa » 03.07.2020 12:23:58

Нет, там тестовое сообщение

так приходит в widows-1251
ТЕСТ--БОНУС Первый Иванович Это тестовая смска 15.

так в utf-8
ТЕСТ--БОНУС Первый Иванович Это тестовая смска 15.

без указания кодировки тоже делал, получается 2й вариант.
jsa
постоялец
 
Сообщения: 160
Зарегистрирован: 28.11.2017 13:46:04

Re: Кодировка UTF-8 тела письма idSMTP

Сообщение Снег Север » 03.07.2020 13:38:04

Хм... как-то влом ставить indy для проверки... А с synapse такая же проблема?
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2604
Зарегистрирован: 27.11.2007 16:14:47

Re: Кодировка UTF-8 тела письма idSMTP

Сообщение jsa » 16.07.2020 14:51:40

не использую synapse
пока обхожусь кодировкой win1251
Но вопрос остается открытым
jsa
постоялец
 
Сообщения: 160
Зарегистрирован: 28.11.2017 13:46:04

Re: Кодировка UTF-8 тела письма idSMTP

Сообщение Seenkao » 17.07.2020 00:26:34

Всё в норме, выводить сообщение так же надо в UTF-8.
Seenkao
новенький
 
Сообщения: 43
Зарегистрирован: 01.04.2020 03:37:12

Re: Кодировка UTF-8 тела письма idSMTP

Сообщение Снег Север » 17.07.2020 09:20:18

test_smtp1.zip

У меня всё работает. Лазарь 2.0.10, indy ставил через OPM. Письма отправлял на gmail через smtp.mail.ru
ЗЫ. У меня всюду основная кодировка utf-8, поэтому для теста я перекодировал из неё в windows-1251, а не наоборот, как у топикстартера.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2604
Зарегистрирован: 27.11.2007 16:14:47

Re: Кодировка UTF-8 тела письма idSMTP

Сообщение jsa » 21.07.2020 16:18:20

Снег Север писал(а):ЗЫ. У меня всюду основная кодировка utf-8, поэтому для теста я перекодировал из неё в windows-1251,


Так и у меня работает. Проект по умолчанию в utf-8, а письмо посылаю в windows-1251.
а не наоборот, как у топикстартера.

Я такого не писал.
Нигде не упоминал про кодировку по умолчанию. А она таковая какую ставит по умолчанию Lazarus
Выше я писал только про кодировку указываемую в письме.
"Сделал процедуру. Работает.
Когда указана кодировка windows-1251 то тело письма отображается нормально.
Но если указать utf-8 то приходят кракозябры."
jsa
постоялец
 
Сообщения: 160
Зарегистрирован: 28.11.2017 13:46:04

Re: Кодировка UTF-8 тела письма idSMTP

Сообщение Снег Север » 21.07.2020 17:23:59

jsa, я вас перестал понимать. Вы отправляете текст в windows-1251, а кодировку указываете utf-8??? И что, кроме кракозябр, вы рассчитываете получить???
Посмотрите мой пример - там можно выбирать кодировку, тест с заголовком будут отправлены именно в выбранной кодировке, и обе отправляются и показываются правильно.

"По умолчанию" - это кодировка файла модуля в лазарусе и кодировка винды 10.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2604
Зарегистрирован: 27.11.2007 16:14:47


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru