Кодировка indy10 под Linux

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

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

Кодировка indy10 под Linux

Сообщение san7667 » 20.07.2023 07:51:10

Добрый день!
Есть программка где сообщение отправляется по SMTP на mail.ru почту из под Linux.
Но имеется проблема с кодировкой в IdMessage1.Subject

Если я указывают тему письма на кириллице, то письмо приходит <без темы>? если же на латинице, то все нормально.

пробовал различные варианты:
Код: Выделить всё
idMessage1.СharSet:='windows-1251'
...
idMessage1.Subject:=UTF8ToAnsi('ТемаПисьма');
...
IdMessage1.ContentType:='text/plain; charset=windows-1251';

Все безуспешно, проблема только при компиляции и запуске в Linux

на windows все нормально..

Подскажите пожалуйста, в чем может быть проблема?
san7667
новенький
 
Сообщения: 42
Зарегистрирован: 18.06.2023 17:57:37

Re: Кодировка indy10 под Linux

Сообщение Снег Север » 20.07.2023 13:10:05

Довольно странно говорить о "кодировке indy". Кодировки есть у лазаруса и у мейлсервера. Чтобы избежать проблем, используйте чарсет в письмах UTF8 и никогда не перекодируйте их в Ansi.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2997
Зарегистрирован: 27.11.2007 16:14:47

Re: Кодировка indy10 под Linux

Сообщение san7667 » 21.07.2023 07:58:01

Снег Север писал(а):Довольно странно говорить о "кодировке indy". Кодировки есть у лазаруса и у мейлсервера. Чтобы избежать проблем, используйте чарсет в письмах UTF8 и никогда не перекодируйте их в Ansi.


Подскажите куда копать?
факт в том, что тот же самый проект скомпилированный на windows дружит с кириллицей
компилирую этот проект на линуксе - в теме письма кириллицу не распознает

В чем может быть причина, может в библиотеках openssl?
Если в них, то где найти библиотеки поддерживающие кириллицу?
san7667
новенький
 
Сообщения: 42
Зарегистрирован: 18.06.2023 17:57:37

Re: Кодировка indy10 под Linux

Сообщение jsa » 21.07.2023 09:16:22

поднимал похожую тему viewtopic.php?f=5&t=43051
посмотрите может там на мысль какую-нибудь наткнетесь
jsa
постоялец
 
Сообщения: 261
Зарегистрирован: 28.11.2017 13:46:04

Re: Кодировка indy10 под Linux

Сообщение Снег Север » 21.07.2023 09:23:14

Что вы называете "кирилицой"? В старом виндовс это была кодировка 1251, в старом линуксе - koi8. Сейчас всюду - кодировка UTF8. Не понимаю вашей проблемы. У вас что, текст письма из консоли читается??? Что именно не распознаёт кирилицу у вас? openssl наверняка ни при чем, она шифрует побайтово, ей любые кодировки фиолетовы.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2997
Зарегистрирован: 27.11.2007 16:14:47

Re: Кодировка indy10 под Linux

Сообщение san7667 » 21.07.2023 10:59:11

Снег Север писал(а):Что вы называете "кирилицой"? В старом виндовс это была кодировка 1251, в старом линуксе - koi8. Сейчас всюду - кодировка UTF8. Не понимаю вашей проблемы. У вас что, текст письма из консоли читается??? Что именно не распознаёт кирилицу у вас? openssl наверняка ни при чем, она шифрует побайтово, ей любые кодировки фиолетовы.


Скажу проще говоря
Один и тот же проект компилирую на win и линукс
c виндны запускаю exe пишу в теме письма : "тема письма", на почту приходит все нормально - "тема письма"
запускаю с линукса пишу в теме письма: "тема письма", на почту приходит <без темы>
запускаю с линукса пишу в теме письма: "tema pisma", на почту приходит <tema pisma>

Добавлено спустя 3 минуты 37 секунд:
jsa писал(а):поднимал похожую тему viewtopic.php?f=5&t=43051
посмотрите может там на мысль какую-нибудь наткнетесь


дело в том, что на винде у меня все хорошо отпарвляется)
Проблема с linux :(

Добавлено спустя 7 секунд:
jsa писал(а):поднимал похожую тему viewtopic.php?f=5&t=43051
посмотрите может там на мысль какую-нибудь наткнетесь


дело в том, что на винде у меня все хорошо отпарвляется)
Проблема с linux :(
san7667
новенький
 
Сообщения: 42
Зарегистрирован: 18.06.2023 17:57:37

Re: Кодировка indy10 под Linux

Сообщение Снег Север » 21.07.2023 12:55:41

Если всюду выставить charset в utf8 что получите? В винде и линухе? Что может быть проще - проверить, чем гадать что в каком месте криво перекодируется.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2997
Зарегистрирован: 27.11.2007 16:14:47

Re: Кодировка indy10 под Linux

Сообщение san7667 » 21.07.2023 19:17:24

Снег Север писал(а):Если всюду выставить charset в utf8 что получите? В винде и линухе? Что может быть проще - проверить, чем гадать что в каком месте криво перекодируется.


Не работает...
san7667
новенький
 
Сообщения: 42
Зарегистрирован: 18.06.2023 17:57:37

Re: Кодировка indy10 под Linux

Сообщение Снег Север » 21.07.2023 22:27:24

Код: Выделить всё
    IdMessage1 : TIdMessage;
    IdSMTP1 : TIdSMTP;
    IdSSLIOHandlerSocketOpenSSL1 : TIdSSLIOHandlerSocketOpenSSL;
...
var
  subj, body :RawByteString;

// только для windows-1251
      subj := UTF8ToCP1251(subj, true);
       body := UTF8ToCP1251(body, true); 
       IdMessage1.From.Address := ****;
       IdMessage1.Recipients.EMailAddresses := ****;
       IdMessage1.Subject := subj;
       IdMessage1.Body.Text := body;
       IdMessage1.CharSet := 'windows-1251';
       IdMessage1.ContentTransferEncoding := 'base64';
       IdMessage1.ContentType := 'text/plain'+'; charset='+IdMessage1.CharSet;
       IdMessage1.Date := Now();


Всё. Назначайте данные коннекта к вашему SMTP серверу и отправляйте - всё будет работать. Для utf8, разумеется, ничего перекодировать не надо и чарсет ставите utf8.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2997
Зарегистрирован: 27.11.2007 16:14:47

Re: Кодировка indy10 под Linux

Сообщение san7667 » 22.07.2023 09:47:12

Снег Север писал(а):Всё. Назначайте данные коннекта к вашему SMTP серверу и отправляйте - всё будет работать. Для utf8, разумеется, ничего перекодировать не надо и чарсет ставите utf8.

Тоже самое....(((
У вас нет необходимых прав для просмотра вложений в этом сообщении.
san7667
новенький
 
Сообщения: 42
Зарегистрирован: 18.06.2023 17:57:37

Re: Кодировка indy10 под Linux

Сообщение Снег Север » 22.07.2023 10:44:03

У меня - работает... Что я делаю не так? Может быть еще косяк в настройках вашего SMTP сервера. Уж и не знаю... Кстати, на вашем скрине не увидел строчки
IdMessage1.ContentTransferEncoding := 'base64';
А она принципиально важна.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2997
Зарегистрирован: 27.11.2007 16:14:47

Re: Кодировка indy10 под Linux

Сообщение san7667 » 22.07.2023 10:52:28

Снег Север писал(а):У меня - работает... Что я делаю не так? Может быть еще косяк в настройках вашего SMTP сервера. Уж и не знаю... Кстати, на вашем скрине не увидел строчки
IdMessage1.ContentTransferEncoding := 'base64';
А она принципиально важна.


Она там присутствует..
Не могли бы вы скинуть библиотеки openssl? Может в них косяк, виндовые и линуксоидные же разные библиотеки..
san7667
новенький
 
Сообщения: 42
Зарегистрирован: 18.06.2023 17:57:37

Re: Кодировка indy10 под Linux

Сообщение Снег Север » 22.07.2023 11:42:06

Линуксовые - те, что в дистрибутиве и в обновлениях, у меня wattOS х64 (на основе дебиан) сомневаюсь, что подойдет вам. виндовые - последние с сайта openssl.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2997
Зарегистрирован: 27.11.2007 16:14:47

Re: Кодировка indy10 под Linux

Сообщение san7667 » 22.07.2023 12:02:08

Снег Север писал(а):Линуксовые - те, что в дистрибутиве и в обновлениях, у меня wattOS х64 (на основе дебиан) сомневаюсь, что подойдет вам. виндовые - последние с сайта openssl.

И все же, может быть произойдет чудо)
san7667
новенький
 
Сообщения: 42
Зарегистрирован: 18.06.2023 17:57:37

Re: Кодировка indy10 под Linux

Сообщение delphius » 26.07.2023 14:09:01

san7667 писал(а):И все же, может быть произойдет чудо)

Чудо произошло? :roll:

Код: Выделить всё
uses IdCoderMIME;
...
function EncodeSubj(instr:string):string;
var
  IdEncoderMIME: TIdEncoderMIME;
begin
  IdEncoderMIME := TIdEncoderMIME.Create;
  Result := '=?'+'Windows-1251'+'?B?'+IdEncoderMIME.Encode(instr)+'?=';
  IdEncoderMIME.Free;
end;
...
IdMessage1.Subject :='';
IdMessage1.ExtraHeaders.Add('Subject: '+EncodeSubj('Тема письма на русском или английском языке'));
...


Но это касалось проблем с неправильной кодировкой, а не с полным отсутствием заголовка.
Но это "костыль", как я понял, а правильный способ с обработкой OnInitISO включен в этот пример
delphius
постоялец
 
Сообщения: 122
Зарегистрирован: 18.03.2020 13:40:11

След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru