![]() |
Indy-TidSMTP und deutsche Umlaute
Hallo community,
ich scheitere im Moment daran, über Indys TIdSMTP-Komponente Mails mit deutschen Umlauten (Betreff und Body) zu versenden. Die Sonderzeichen (äöü߀...) werden immer zerhackt dargestellt. Auch der Versuch, das entsprechende CharSet anzugeben, funktioniert nicht. Umgebung: Delphi 2009, Indy IndyTiburon vom 21.06.2010 Hat vielleicht jemand ein Beispiel, wie das klappen könnte? Ich habe alle möglichen Varianten ausprobiert: CharSet:="iso-8859-1" oder ContentTransferEncoding := base64... nichts hat geholfen (auch schon alles weggelassen etc.). Lediglich, wenn ich das Subject per Mime von Hand kodiere, bekomme ich im Betreff Umlaute angezeigt, im Body klappt das aber nicht. Es muss doch irgendwie möglich sein, z.B. utf-8 kodierungen hinzubekommen? Den Artikel: ![]() Vielen Dank Sebastian
Code:
procedure TMailer.IdMessage_InitializeISO(var VHeaderEncoding: Char; var VCharSet: string);
begin VHeaderEncoding := 'B'; VCharSet := 'utf-8'; end;
Code:
function TMailer.SendIndyMail: Boolean;
var i: Integer; Email: TIdEMailAddressItem; bodyText: TStringList; begin FSMTP.Host := FSMTPHost; FSMTP.Port := FMailPort; FSMTP.Username := FSMTPLogin; FSMTP.Password := FSMTPPassword; // *** setup mail message *** FMailMessage.From.Address := FSender; FMailMessage.Subject := UTF8Encode(FSubject); Email := FMailMessage.Recipients.Add; Email.Address := "max@mustermann.de"; FMailMessage.OnInitializeISO := IdMessage_InitializeISO; FMailMessage.CharSet := 'utf-8'; FMailMessage.ContentTransferEncoding := '8bit'; // attachment if AttachmentsExists then begin FMailMessage.ContentType := 'multipart/mixed'; with TIdText.Create(FMailMessage.MessageParts) do begin Body.Text := FBody; CharSet:= 'utf-8'; ContentType := 'text/plain' end; for I := 0 to FAttList.Count - 1 do begin with TIdAttachmentFile.Create(FMailMessage.MessageParts, FAttList[i]) do begin FileName := ExtractFileName(FAttList[i]); ContentType := FMimeTable.GetFileMIMEType(FileName); end; end; end // *** send mail *** try try FSMTP.Connect; FSMTP.Send(FMailMessage); Result := True; except on E:Exception do if not FShutUpOnErr then MessageDlg('TMailer.SendIndyMail: ' + E.Message, mtError, [mbOK], 0); end; finally if FSMTP.Connected then FSMTP.Disconnect; end; end; |
AW: Indy-TidSMTP und deutsche Umlaute
Hallo smay,
hab mich vor einiger Zeit auch mit dem Thema Emails per IdSMTP versenden beschäftigt und bin auf genau das Problem gestoßen. Um die Umlaut im Betreff der Email richtig darzustellen musst du den Betrefftext "von Hand" in das MIME-Format umwandeln. Das kannst du mit dieser Funktion:
Delphi-Quellcode:
Bei den Umlauten im Betreff wird das ganze schon entwas kniffeliger:
function TSendMailExt.MIMEConvert(s: String): String;
var i: Integer; begin Result := '=?ISO-8859-15?Q?'; for i := 1 to Length(s) do begin if s[i] = '€' then begin Result := Result + '=A4'; continue; end; if ord(s[i]) > $99 then Result := Result + Format('=%x', [Ord(s[i])]) else Result := Result + s[i]; end; Result := Result + '?='; end; Zunächst musst du für den Mail-Body einen einen TIdText erstellen
Delphi-Quellcode:
Self.FMail ist die TIdMessage-Komponente.
uses ..., IdText;
[...] procedure SendMail(...); var plainText: TIdText; begin ... plainText := TIdText.Create(Self.FMail.MessageParts); plainText.Body.Text := MailBody; plainText.ContentType := 'text/plain'; plainText.CharSet := 'ISO-8859-1'; plainText.ContentTransfer := 'BASE64'; plainText.ContentDisposition := 'inline'; ... Solltest du auch noch HTML-Emails verschicken wollen, musst du zusätzlich zu dem PlainText (in dem auch schon der HTML Code steht) noch einen weiteren TIdText erstellen, der dann den HTML-Text darstellt:
Delphi-Quellcode:
Hoffe das hilft dir ein wenig weiter.
uses ..., IdText;
[...] procedure SendMail(...); var htmlText: TIdText; begin ... htmlText := TIdText.Create(Self.FMail.MessageParts); htmlText.Body.Text := MailBody; htmlText.ContentType := 'text/html'; htmlText.CharSet := 'ISO-8859-1'; htmlText.ContentTransfer := 'BASE64'; htmlText.ContentDisposition := 'inline'; ... end; Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:44 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