![]() |
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:
Ich verwende die Indy 9 Kompos. Leider werden Umlaute nur mit Fragezeichen dargestellt.
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; |
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:
einfügen oder wenn du deinen Text nach utf-8 umcodierst eben
idMessage.CharSet := 'ISO-8895-15';
Delphi-Quellcode:
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 ;-)
idMessage.CharSet('UTF-8');
... idMessage.Body:=AnsiToUtf8(Memo1.Lines); Chris |
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:
Die Funktion _MIMEConvert() wandelt die deutschen Sonderzeichen im String um:
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; 'Ä' wird zu '=?iso-8859-1?q?=C4?=' '€' wird zu '=?iso-8859-15?q?=A4?='. weitere Details zur Codierung unter ![]() Weitere Lösungsansätze gibt es auch unter ![]() |
Re: Problem mit Umlauten beim senden von Mails mit Indy
Ich nutze die folgende Routine fuer _MIMEConvert.
Delphi-Quellcode:
Hierbei sei angemerkt, dass bei mehreren aufeinanderfolgenden Umlauten die Ausgabe kuerzer erfolgen koennte...
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; |
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