Использую 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;