Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Problem mit Umlauten beim senden von Mails mit Indy (https://www.delphipraxis.net/137680-problem-mit-umlauten-beim-senden-von-mails-mit-indy.html)

mlspider 26. Jul 2009 14:57


Problem mit Umlauten beim senden von Mails mit Indy
 
Hallöchen,

kurz und knapp:

folgenden simplen Code benutze ich zum senden von eMails.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 SMTP.Host:='smtp.strato.de';
 SMTP.Username:='info@xxx.de';
 SMTP.Password:='xxxxxxxxx';
 SMTP.Port:= 25;

 idMessage.From.Text := 'Name';
 idMessage.From.Address:= 'info@xxx.de';
 idMessage.Sender.Text := 'info@xxx.de';
 idMessage.Recipients.EMailAddresses := 'zzz@yyy.de';
 idMessage.Subject := 'Test';

 idMessage.Body.Clear;
 idMessage.Body:=Memo1.Lines;
 SMTP.Connect;
 SMTP.Send(idMessage);
 SMTP.Disconnect;
end;
Ich verwende die Indy 9 Kompos. Leider werden Umlaute nur mit Fragezeichen dargestellt.

christophspaeth 27. Jul 2009 09:03

Re: Problem mit Umlauten beim senden von Mails mit Indy
 
Hallo Spider,

ich würde mal tippen, dass dein Emailprogramm eine andere Zeichensatzcodierung annimmt (z.B. UTF-8) als du in die Mail reinschreibst.

Wenn du nichts explizit im Header angibst, wird glaube ich angenommen, dass es US-ASCII 7 bit ist.
D.h. du musst noch
Delphi-Quellcode:
idMessage.CharSet := 'ISO-8895-15';
einfügen oder wenn du deinen Text nach utf-8 umcodierst eben
Delphi-Quellcode:
idMessage.CharSet('UTF-8');
...
idMessage.Body:=AnsiToUtf8(Memo1.Lines);
Ich hab's jetzt nicht nachgestellt, sondern nur theoretisch rausgesucht - bin aber grad auch nicht so tief in Indy drinnen. Hoffe trotzdem dass es hilft ;-)

Chris

Rene K. 2. Okt 2009 09:19

Re: Problem mit Umlauten beim senden von Mails mit Indy
 
Ich habe mit RAD2009 und Indy ein ähnliches Problem gehabt und es wie folgt gelöst.

Delphi-Quellcode:
procedure TForm.IdMessage_InitializeISO(var VHeaderEncoding: Char; var VCharSet: string);
begin
  VHeaderEncoding := 'B';
  VCharSet := 'ISO-8859-1';
end;
 
procedure TForm.SendMail;
var IdMessage1: TIdMessage;
    SubjectStr, BodyText: string;
begin
  ...
  IdMessage1.ContentTransferEncoding := 'BASE64';
  IdMessage1.OnInitializeISO := IdMessage_InitializeISO;
  IdMessage1.ContentType    := 'text/plain';
  IdMessage1.CharSet        := 'ISO-8859-1';
  IdMessage1.Subject        := _MIMEConvert(true, SubjectStr);
  IdMessage1.Body.Text      := BodyText;
  ...
end;
Die Funktion _MIMEConvert() wandelt die deutschen Sonderzeichen im String um:
'Ä' wird zu '=?iso-8859-1?q?=C4?='
'€' wird zu '=?iso-8859-15?q?=A4?='.
weitere Details zur Codierung unter http://de.wikipedia.org/wiki/ISO_8859-1. Diese Umwandlung ist allerdings nur für den Mail-Header notwendig. Mit o.g. Einstellungen kann im Mail-Body beliebiger Text als String mit Umlauten übergeben werden.

Weitere Lösungsansätze gibt es auch unter https://forums.codegear.com/thread.jspa?threadID=7019

Woodpecker 28. Jan 2010 12:41

Re: Problem mit Umlauten beim senden von Mails mit Indy
 
Ich nutze die folgende Routine fuer _MIMEConvert.

Delphi-Quellcode:
function _MIMEConvert(s : String) : String;
var i : Integer;
begin
    Result := '';
    for i := 1 to Length(s) do begin
        if s[i] = '€' then begin
            Result := Result + '?=ISO-8859-15?Q?=A4?='
        end else if Ord(s[i]) > $99
            then Result := Result + '=?ISO-8859-1?Q?=' + Format('%x',[Ord(s[i])]) + '?='
            else Result := Result + s[i];
    end;

end;
Hierbei sei angemerkt, dass bei mehreren aufeinanderfolgenden Umlauten die Ausgabe kuerzer erfolgen koennte...


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz