Перейти к содержанию
Fire Monkey от А до Я
  • 0

Проблемы с кодировкой почты под Android


Юрий Гусач

Вопрос

Есть немного странная проблема!

Пытаюсь написать программу посылающую почту со смартфона.Используются Indy компоненты TIdSMTP,TIdMessage и TIdSSLIOHandlerSocketOpenSSL. Под Windows с компа все работает нормально.

но если тема, имя адресата или имя посылающего содержат русские буквы, то если посылать почту со смартфона, они появляются в пришедшем письме вопросиками. Понятно, что дело в кодировке. Не могу найти что менять. Само тело письма пишется с кодировкой UTF-8 и отображается везде по русски совершенно нормально. Имена и тема с русскими буквами с компьютера и Windows приходят правильно, со смартфона(при компиляции под Android) приходят неправильно. Перепробовал вроде почти все комбинации.

Почта со смартфона при наборе вручную тоже работает нормально. Дело по-видимому в конфигурации TIdMessage, а где не пойму.  Работаю в Delphi XE10, смартфон Samsung J3, Android 5.1.1  

Проще всего конечно не использовать в теме письма русские буквы, при  этом все работает,  но это не нравится, потому что непонятно почему так происходит. 

Изменено пользователем Юрий Гусач
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Компоненты TIdMessage, TIdSMTP, TIdSSLIOHandlerSocketOpenSSL просто устанавливаются на форму и их свойства в инспекторе объектов я не менял. Настройка идет при выполнении программы. Значения настроек взял из примера в Инете. Пароль я изменил соответственно

procedure TForm6.Button1Click(Sender: TObject);
begin
    // IO HANDLER SETTINGS //
    with IdSSLIOHandlerSocketOpenSSL1 do
    begin
        Destination := 'smtp.gmail.com:25';
        Host := 'smtp.gmail.com';
        MaxLineAction := IdGlobal.TIdMaxLineAction.maException;
        Port := 25;
        SSLOptions.Method := sslvTLSv1;
        SSLOptions.Mode := sslmUnassigned;
        SSLOptions.VerifyMode := [];
        SSLOptions.VerifyDepth := 0;
    end;

    // SETTING SMTP COMPONENT DATA //
    IdSMTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
    IdSMTP1.Host := 'smtp.gmail.com';
    IdSMTP1.Port := 25;
    IdSMTP1.Username := ' spirometer2018@gmail.com';
    IdSMTP1.Password := 'MyPassword';
    IdSMTP1.AuthType := satDefault;
    IdSMTP1.UseTLS := utUseExplicitTLS;


  IdMessage1.Recipients.Clear;
    with IdMessage1.Recipients.Add do
    begin
        name := 'Юра';
        Address := 'yura@mail.ru';
   end;
IdMessage1.CharSet:='UTF-8';
IdMessage1.From.Address := 'spirometer2018@gmail.com';
IdMessage1.From.Name :='Spirometer 2018';
IdMessage1.Subject :=UTF8Encode('Спирометр Test 25.03.2018');
IdMessage1.Body.Add(UTF8Encode('Тест спирометра на русском языке'));
IdMessage1.Priority := mpNormal;
 try
        IdSMTP1.Connect();
        IdSMTP1.Send(IdMessage1);
        ShowMessage('Email sent');
        IdSMTP1.Disconnect();
    except
        on e: Exception do
        begin
            ShowMessage(e.Message);
            IdSMTP1.Disconnect();
        end;
    end;
end;

 

Все под Windows работает нормально. После компиляции под Андроидом, в пришедшем письме, имя пославшего и тема, написанные русскими буквами отображаются знаками вопроса. Русское тело письма отображается нормально.
 

Изменено пользователем Юрий Гусач
косметические улучшения
Ссылка на комментарий
  • 0

Вот здесь в середине дискуссии автор Indy, показывает как правильно делать:

Форум где пишет автор Indy

Там правда показано для С++ Builder, но легко на Дельфи поменять...

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...