AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Problem mit Umlauten beim senden von Mails mit Indy
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Umlauten beim senden von Mails mit Indy

Ein Thema von mlspider · begonnen am 26. Jul 2009 · letzter Beitrag vom 28. Jan 2010
Antwort Antwort
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem mit Umlauten beim senden von Mails mit Indy

  Alt 26. Jul 2009, 15:57
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.
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
christophspaeth

Registriert seit: 7. Mär 2008
73 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Problem mit Umlauten beim senden von Mails mit Indy

  Alt 27. Jul 2009, 10:03
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
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
Christoph Späth
  Mit Zitat antworten Zitat
Rene K.

Registriert seit: 26. Jan 2005
Ort: Dresden
6 Beiträge
 
Delphi XE5 Enterprise
 
#3

Re: Problem mit Umlauten beim senden von Mails mit Indy

  Alt 2. Okt 2009, 10:19
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
  Mit Zitat antworten Zitat
Woodpecker

Registriert seit: 28. Jan 2010
1 Beiträge
 
#4

Re: Problem mit Umlauten beim senden von Mails mit Indy

  Alt 28. Jan 2010, 13:41
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...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz