Wysyłanie maila - Kodowanie znaków

0

Witam.

Próbuję w aplikacji dodać wysyłanie powiadomień na maila.
Samo wysyłanie działa dobrze (korzystam z Indy), lecz mam problem z kodowaniem polskich znaków.
Jak bym nie kombinował w mailu wyświetlają mi się "krzaczki".
Jak temu zaradzić ?

Kod odpowiedzialny za wysyłkę:

 tresc:='treść maila z polskimi znakami';

IdMessage1.Clear;
IdMessage1.Body.Append(tresc);
IdMessage1.From.Name := Mail;
IdMessage1.From.Address :=  Mail;
IdMessage1.Recipients.EMailAddresses := [email protected];
IdMessage1.Subject := 'POWIADOMIENIE';
IdSMTP1.UserName := Mail;
IdSMTP1.Password  := MailPass;
IdSMTP1.Host :='smtp.poczta.pl';
IdSMTP1.Port := 587;
IdSMTP1.Connect;

TRY
      IdSMTP1.Send(IdMessage1);
FINALLY
      IdSMTP1.Disconnect;
END;                                              
0

Znalazłem :).

Trzeba dodać:

IdMessage1.ContentType:='text/plain; charset=UTF-8';

dodanie znacznika <code class="delphi"> - furious programming

1

Ustaw kodowanie UTF-8

  IdMessage1.Body.Append(AnsiToUTF8('TREŚĆ MAILA'));
  IdMessage1.ContentType:= 'text/html';
  IdMessage1.CharSet:= 'UTF-8';
  IdMessage1.ContentTransferEncoding:= 'BASE64';

i zdarzenie InitializeISO IdMassage

procedure TForm1.IdMessage1InitializeISO(var VHeaderEncoding: Char;
  var VCharSet: String);
begin
  VHeaderEncoding := 'B'; //base64
  VCharSet := 'UTF-8';
end;
0

@hipekk i @kAzek - Lazarus domyślnie korzysta ze strony kodowej UTF-8, więc każdy literał podawany w edytorze kodu jest zgodny z tym kodowaniem; Dlatego też wystarczy tak jak podał @kAzek ustawić odpowiednią stronę kodową, ale użycie funkcji AnsiToUtf8 nie jest konieczne, bo nie zmieni rozmiaru literału;

Tym bardziej, jeśli treść wiadomości czy jej tytuł przepisywana jest z komponentów - LCL także domyślnie korzysta z kodowania UTF-8.

0

Dla testu wstawiłem kod który podał @kAzek i na maila przyszły "krzaczki".
Dodając samo IdMessage1.ContentType:='text/plain; charset=UTF-8' przy tworzeniu wiadomości rozwiązuje problem (na maila przychodzi wiadomość z polskimi znakami)

0

Nie wiem jak jest teraz, w każdym razie z Indy korzystałem dawno temu i pod Delphi7;

Jeśli znalezione przez Ciebie rozwiązanie działa prawidłowo, to widać jest lekka różnica między implementacją Indy w Delphi, a w Lazarusie; W każdym razie kluczem do rozwiązania Twojego problemu jest ustawienie odpowiedniego kodowania wiadomości, a sam tekst jest już kodowany w UTF-8, bez względu na to czy podajesz literał, czy pobierasz wartości z komponentów.

0

Okazało się, że nie jest do końca prawidłowo...

W programie pocztowym (sprawdzałem w Thunderbird) wszystko jest ok, natomiast w przeglądarce (Chrome) wchodząc na pocztę przez www treść wiadomości jest w porządku natomiast w temacie są krzaczki zamiast polskich znaków... Informacja o kodowaniu tematu/nadawcy znajduje się gdzieś indziej ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1