Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   IDMessage und Umlaute in der Emailadresse (https://www.delphipraxis.net/209200-idmessage-und-umlaute-der-emailadresse.html)

gaisser 8. Nov 2021 14:03

IDMessage und Umlaute in der Emailadresse
 
Hi Zusammen,

wie stelle ich es an, kommt immer ne Fehlermeldung (Syntax Erro in paramters or arguments)

himitsu 8. Nov 2021 14:12

AW: IDMessage und Umlaute in der Emailadresse
 
Solche Zeichen "richtig" codieren?


punycode

gaisser 8. Nov 2021 14:23

AW: IDMessage und Umlaute in der Emailadresse
 
Mit UTF-8, ISO-8859-1 und windows-1252 geht es leider nicht.

Anbei ein Auszug

Delphi-Quellcode:
  try
    IdMessage.MessageParts.Clear;
    IdMessage.Date := Now;
    // IdMessage.CharSet := 'ISO-8859-1';
    IdMessage.CharSet := CbCharSet.Text;
    IdMessage.ContentType := 'multipart/related + multipart/mixed + text/plain ' +
      '+ text/html + multipart/alternative + application/pdf ';
    IdMessage.AttachmentTempDirectory := SysUtils.GetEnvironmentVariable('temp');
    SL := TStringList.Create;

    SL.Text := HTMLText;
    MailText := betreff;
    with TIdMessageBuilderHtml.Create do
    begin
      try
        // Wenn HTML Mail ist
        if frmEinstellungen.cbHTML.Checked = True then
        begin
          html.Text := SL.Text;
        end
        else // HTML Mails
          PlainText.Text := SL.Text;
        // Ende Images herausfinden
        // Normale Anhänge hinzufügen
        if FileExists(xAnhang) then
          Attachments.Add(xAnhang);
        if FileExists(frmHaupt.xFileName1) then
          Attachments.Add(frmHaupt.xFileName1);
        if FileExists(frmHaupt.xFileName2) then
          Attachments.Add(frmHaupt.xFileName2);
        if FileExists(frmHaupt.xFileName3) then
          Attachments.Add(frmHaupt.xFileName3);
        if FileExists(frmHaupt.xFileName4) then
          Attachments.Add(frmHaupt.xFileName4);
        if FileExists(frmHaupt.xFileName5) then
          Attachments.Add(frmHaupt.xFileName5);
        // Ende Normale Anhänge

        FillMessage(IdMessage);
      finally
        Free;
      end;
    end;
    IdMessage.Subject := MailText;
    IdMessage.From.Address := frmSetup.Email.Text;
    IdMessage.From.Name := EdName.Text;
    if EdReplayTo.Text <> '' then
      IdMessage.ReplyTo.EMailAddresses := EdReplayTo.Text
    else
      IdMessage.ReplyTo.EMailAddresses := frmSetup.Email.Text;
    IdMessage.CharSet := CbCharSet.Text;
    IdMessage.Recipients.EMailAddresses := empfaenger;
    if BCC <> '' then
      IdMessage.BccList.EMailAddresses := BCC;

    IdSMTP.Host := frmSetup.SMTPServer.Text;
    IdSMTP.Username := frmSetup.edtAccount.Text;
    IdSMTP.Password := frmSetup.edtPassword.Text;
    IdSMTP.Port := StrToInt(frmSetup.SMTPPort.Text);

    xAuthCange;

    IdSMTP.Connect;
    if IdSMTP.Authenticate then
    begin
      IdSMTP.Send(IdMessage);
    end
    else
      MessageDlg('Login fehlerhaft', mtError, [mbOk], 0, mbOk);

generic 8. Nov 2021 15:13

AW: IDMessage und Umlaute in der Emailadresse
 
Emailadressen sind immer ASCII.
D.h. wenn du Umlaute in der Emailadresse verwenden willst MUSST du punycode (https://de.wikipedia.org/wiki/Punycode) nutzen.

himitsu 8. Nov 2021 15:50

AW: IDMessage und Umlaute in der Emailadresse
 
Na ja, im Grunde hätte auch der Hersteller (Indy) innerhalb der Komponente dieses Encoding machen können.

Hat er aber nicht, also muß man selber ran.

gaisser 8. Nov 2021 15:59

AW: IDMessage und Umlaute in der Emailadresse
 
Das funktioniert leider auch nicht, was mach ich falsch?

Delphi-Quellcode:
    IdMessage.Subject := MailText;
    IdMessage.From.Address := StringReplace(Turi.UnicodeToIDNA(frmSetup.Email.Text),'xn--','',[rfReplaceAll]);
    IdMessage.From.Name := EdName.Text;
    if EdReplayTo.Text <> '' then
      IdMessage.ReplyTo.EMailAddresses := StringReplace(Turi.UnicodeToIDNA(EdReplayTo.Text),'xn--','',[rfReplaceAll])
    else
      IdMessage.ReplyTo.EMailAddresses := StringReplace(Turi.UnicodeToIDNA(frmSetup.Email.Text),'xn--','',[rfReplaceAll]);;
    IdMessage.CharSet := CbCharSet.Text;
    IdMessage.Recipients.EMailAddresses := StringReplace(Turi.UnicodeToIDNA(empfaenger),'xn--','',[rfReplaceAll]);
    if BCC <> '' then
      IdMessage.BccList.EMailAddresses := StringReplace(Turi.UnicodeToIDNA(BCC),'xn--','',[rfReplaceAll]);

Incocnito 9. Nov 2021 07:03

AW: IDMessage und Umlaute in der Emailadresse
 
Du musst doch das "xn--" nicht rausnehmen,
das kann ich mir echt nicht vorstellen.
War aber ewig her, dass ich Puny-Umsetzung gemacht habe.

gaisser 9. Nov 2021 07:32

AW: IDMessage und Umlaute in der Emailadresse
 
Kommt halt immer die Meldung das Mailbox nicht erreichbar ist, obwohl es diese Mailadresse gibt. Im Outlook kann ich ohne Probleme an die Mailadresse senden.
Das mit dem Replace hab ich im Web gefunden.

Blup 9. Nov 2021 10:20

AW: IDMessage und Umlaute in der Emailadresse
 
Ich vermute das man nur den Teil, der den Domainname repräsentiert (zwischen @ und Punkt), kodieren muss. Nicht die ganze Adresse und auch nicht alle Adressen gemeinsam bei mehreren Empfängern. Wie sollte ohne "xn--" erkannt werden, das es sich um eine kodierte Adresse handelt?

himitsu 9. Nov 2021 13:26

AW: IDMessage und Umlaute in der Emailadresse
 
Ja, alle teile einzeln kodiert
doamin, subdomain, mail/name und der Pfad nach der Domain (bei URLs) .... und das auch jeweils mit unterschiedlichen Codierungen.

Zitat:

Vermuten
Im Notfall kann man einfach mal eine eMail versenden/empfangen, welche soeinem Schema entspricht ... mit einem anderem Mailprogramm.

Dann via Indy nachsehn, also die Mail runterladen und gucken war überall in den Property drin steht.

generic 9. Nov 2021 14:09

AW: IDMessage und Umlaute in der Emailadresse
 
himitsu, dass du auch schon puny erwähnt hattest hab ich nicht gesehen. Sah aus wie eine Signatur/Unterschrift...

Ich hab Thunderbird mal ausprobiert.
Vor dem @ kann er es nicht und gibt einen Fehler aus.

abc@börse.blöde
wird zu
abc@xn--brse-5qa.xn--blde-6qa

gaisser 9. Nov 2021 14:30

AW: IDMessage und Umlaute in der Emailadresse
 
@Blub :Danke, dein Tipp war der richtige

mjustin 9. Nov 2021 19:18

AW: IDMessage und Umlaute in der Emailadresse
 
Für internationalisierte Emailadressen existiert ein RFC, der z.B. in Thunderbird auch vor einiger Zeit implementiert wurde.

In Indy ist ein Improvement erfasst, das aber noch nicht umgesetzt wurde.

https://github.com/IndySockets/Indy/issues/108

Damit können dann UTF-8 kodierte E-Mailadressen verwendet werden, natürlich nur mit Servern, die das unterstützen.

Zitat:

RFC 6530 provides for email based on the UTF-8 encoding, which permits the full repertoire of Unicode. RFC 6531 provides a mechanism for SMTP servers to negotiate transmission of the SMTPUTF8 content.
https://en.m.wikipedia.org/wiki/Email_address

mjustin 11. Nov 2021 09:43

AW: IDMessage und Umlaute in der Emailadresse
 
Zitat:

Zitat von gaisser (Beitrag 1497263)
Delphi-Quellcode:
   
    IdMessage.Recipients.EMailAddresses := StringReplace(Turi.UnicodeToIDNA(empfaenger),'xn--','',[rfReplaceAll]);

Vorsicht: die UnicodeToIDNA ist dazu da, den Hostnamen zu kodieren. Das ist der Teil der E-Mail-Adresse nach dem @-Zeichen, aber vor der Top-Level-Domäne (z.B. .de).
(Siehe https://docwiki.embarcadero.com/Libr....UnicodeToIDNA)
Der Teil davor darf nicht nach Punycode kodiert werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:20 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