Lazarus 1.6 Indy smtp кириллица в subject

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

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

Lazarus 1.6 Indy smtp кириллица в subject

Сообщение gvido » 26.08.2016 22:54:14

Добрый вечер. Indy 10.2.0.3
Никак не могу победить поле subject. Чтобы не писал в subject всегда приходит в фиксированной кодировке. По умолчанию приходило письмо с темой в кодировке по моему KOI8-R, хотя текст изначально в теме в UTF-8. Пробовал перекодировать результат - один. Поправил LANG_RUSSIAN: Result := idcswindows_1251 в IdGlobalProtocols.pas - стало приходить всегда в UTF-8 (subject - Тест РёР· Lazarus).
Что касается тела, то там всегда приходит читабельный текст.
(Заголовок

Содержимое сообщения)

Код: Выделить всё
  txtpart,htmpart: TidText;
begin
      idsmtp1.Host:='exchange.host';
      idsmtp1.Port:=2526;
      idsmtp1.Username:='username';
      idsmtp1.Password:='password';
      idsmtp1.AuthType:=satDefault;

      idMessage1.Clear;
      idmessage1.From.Address:='support@host.com';
      idmessage1.Recipients.EMailAddresses:='me@host.com';
      //idmessage1.ContentTransferEncoding:='UTF-8';
      //idmessage1.CharSet:='UTF-8';
      idmessage1.Subject:='Тест из Lazarus';
      idmessage1.ContentType:='multipart/related; type="text/html"';

      txtpart:= TIdText.Create(IdMessage1.MessageParts);
      txtpart.ContentType := 'text/plain';
      txtpart := TIdText.Create(IdMessage1.MessageParts);
      txtpart.ContentType := 'multipart/related; type="text/html"';

      htmpart := TIdText.Create(IdMessage1.MessageParts, nil);
      htmpart.ContentType := 'text/html; charset=utf-8'; // Не забываем кодировку!!! Иначе получишь вопросики
      htmpart.Body.Add('<html>');
      htmpart.Body.Add('<head>');
      htmpart.Body.Add('</head>');
      htmpart.Body.Add('<body><h1>Заголовок</h1>');
      htmpart.Body.Add(Memo1.Text + '</body>');
      htmpart.Body.Add('</html>');
      htmpart.ParentPart := 1;

      IdSMTP1.Connect();
      IdSMTP1.Send(Form1.IdMessage1);
      IdSMTP1.Disconnect();


Где "собака порылась"?


Вопрос закрыт - нашел решение.
Код: Выделить всё
IdMessage1.ExtraHeaders.add('Subject:'+edit1.Text);
gvido
постоялец
 
Сообщения: 188
Зарегистрирован: 28.03.2012 11:35:31

Вернуться в Lazarus

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

Сейчас этот форум просматривают: Google [Bot], sunjob и гости: 61

Рейтинг@Mail.ru