Seite 1 von 3

Umlaute in E-Mail Adressen kodieren (IDNA)

Verfasst: 12.05.2016 15:17
von dige
Hallo,

habe gerade das Problem eine E-Mail mit Umlauten nicht versenden zu können.
Nach langer Suche habe ich herausgefunden, dass diese IDNA kodiert werden
muss. Stichwort: punycode

Hier mal ein Online Converter: http://idnaconv.net/try-it.html

Hat dazu schon mal jemand was in Purebasic gemacht oder hat einen Tipp für eine Lib?

Ciao dige

Re: Umlaute in E-Mail Adressen kodieren (IDNA)

Verfasst: 12.05.2016 15:29
von NicTheQuick
Den Online-Konverter verstehe ich nicht. Wenn ich da einen Umlaut angeben, kommt das hier: "We are sorry, but something went terribly wrong. Error Message: NAMEPREP: Prohibited input U+00000020". Und zwar als einzelner Text ohne Seitenlayout oder sowas.

Re: Umlaute in E-Mail Adressen kodieren (IDNA)

Verfasst: 12.05.2016 15:37
von dige
Probier mal den hier: https://www.charset.org/punycode.php

Hab jetzt noch eine Dll gefunden, die zwar für mIRC gedacht ist,
der aber auch der Quellcode beiliegt: http://xise.nl/mirc/idna.zip

Kommt aber nix gescheites zurück :-(

Code: Alles auswählen

;==========================================================================
; Generated with PureDLLHelper, Copyright ©2011 by Thomas <ts-soft> Schulz
;==========================================================================

Prototype  LoadDll(a)
Prototype  decode(a, b, c, d, e, f)
Prototype  encode(a, b, c, d, e, f)

Global LoadDll.LoadDll
Global decode.decode
Global encode.encode

Procedure.i idna_LoadDLL()
  Protected hDLL.i

  hDLL = OpenLibrary(#PB_Any, "idna.dll")
  If hDLL <> 0
    LoadDll = GetFunction(hDLL, "LoadDll")
    decode = GetFunction(hDLL, "decode")
    encode = GetFunction(hDLL, "encode")

    ProcedureReturn hDLL
  EndIf

  ProcedureReturn #False
EndProcedure

Define.s dummy.s = "-" + Space(255)

If idna_LoadDLL()
  OpenWindow(0, 0, 0, 100, 100, "" )
  Debug encode (WindowID(0), 0, @"abc@Übergröße.de", @dummy, 1, 1)
  Debug dummy
EndIf



Re: Umlaute in E-Mail Adressen kodieren (IDNA)

Verfasst: 12.05.2016 15:43
von CodeBurg
NicTheQuick hat geschrieben:Den Online-Konverter verstehe ich nicht. Wenn ich da einen Umlaut angeben, kommt das hier: "We are sorry, but something went terribly wrong. Error Message: NAMEPREP: Prohibited input U+00000020". Und zwar als einzelner Text ohne Seitenlayout oder sowas.
Bei mir funktioniert es. Das denke ich zumindest, da ich ein Ergebnis erhalte, das ich allerdings Mangels Kenntnis der IDNA-Kodierung nicht verifizieren kann.

Aber die Zeichenfolge "äÄöÖüÜß" ergibt "xn--zcaja6ea0ba" nach IDNA-2008 und "xn--ss-uiaa4ga6ba" nach IDNA-2003.

Und "däsüsöhTäst@try.com" ergibt "xn--dsshtst-5wae1poc@try.com" (diesmal nur nach 2008).

Falls es zur Fehlerfindung beträgt: Windows 7 Pro (natürlich aktueller Patchlevel) mit Chrome 50.0.2661.102m.

@dige:
Sorry für OT, aber bei deinem Problem kann ich nicht helfen.

Re: Umlaute in E-Mail Adressen kodieren (IDNA)

Verfasst: 12.05.2016 16:23
von NicTheQuick
Vielleicht solltest du beim Prototype mal die richtigen Typen angeben. Möglicherweise brauchst du auch die Pseudotypen, die automatisch utf8, utf16 oder ascii an die DLL weitergeben.

Re: Umlaute in E-Mail Adressen kodieren (IDNA)

Verfasst: 13.05.2016 17:52
von edel
Der String wird in den gleichen Puffer geschrieben, alle anderen Parameter werden ignoriert.
Versuch es mal so (unicode):

Code: Alles auswählen

If idna_LoadDLL()
  OpenWindow(0, 0, 0, 100, 100, "" )
  encode(0, 0, @dummy, 0, 0, 0)  
  Debug dummy
  decode(0, 0, @dummy, 0, 0, 0)  
  Debug dummy
EndIf

Re: Umlaute in E-Mail Adressen kodieren (IDNA)

Verfasst: 13.05.2016 17:56
von NicTheQuick
Wer es selbst schreiben will. Im Standard findet man eine Beispiel-Implementierung in C: Punycode: A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA)

Re: Umlaute in E-Mail Adressen kodieren (IDNA)

Verfasst: 13.05.2016 18:44
von JMaker
@Nic: Dann fang an :allright:

Re: Umlaute in E-Mail Adressen kodieren (IDNA)

Verfasst: 13.05.2016 18:58
von NicknameFJ
NicTheQuick hat geschrieben:Den Online-Konverter verstehe ich nicht. Wenn ich da einen Umlaut angeben, kommt das hier: "We are sorry, but something went terribly wrong. Error Message: NAMEPREP: Prohibited input U+00000020". Und zwar als einzelner Text ohne Seitenlayout oder sowas.
@NicTheQuick:
Ich glaube es liegt daran dass Du ein Leerzeichen mit im Text hast

U+00000020 als Hex Wert für 32 = das Leerzeichen

NicknameFJ

Re: Umlaute in E-Mail Adressen kodieren (IDNA)

Verfasst: 17.05.2016 08:07
von dige
edel hat geschrieben:Der String wird in den gleichen Puffer geschrieben, alle anderen Parameter werden ignoriert.
Versuch es mal so (unicode):

Code: Alles auswählen

If idna_LoadDLL()
  OpenWindow(0, 0, 0, 100, 100, "" )
  encode(0, 0, @dummy, 0, 0, 0)  
  Debug dummy
  decode(0, 0, @dummy, 0, 0, 0)  
  Debug dummy
EndIf
Yeah!!! :D Funktioniert! Danke Edel!!!