Wie relevant ist UTF-7 beim Parsen von E-Mails?


8

Ich habe kürzlich eingehende E-Mails für eine Anwendung implementiert und Junge, habe ich die Tore der Hölle geöffnet? Seitdem kommt jeden zweiten Tag eine E-Mail an, die dazu führt, dass die App auf andere Weise fehlschlägt.

Eines dieser Dinge sind E-Mails, die als UTF-7 codiert sind. Die meisten E-Mails kommen als ASCII, einige der lateinischen Kodierungen oder zum Glück als UTF-8.

Hotmail-Fehlermeldungen (wie E-Mail-Adresse nicht vorhanden oder Kontingent überschritten) scheinen als UTF-7 zu kommen. Leider ist UTF-7 keine Kodierung, die Ruby versteht:

> "hello world".encode("utf-8", "utf-7")
Encoding::ConverterNotFoundError: code converter not found (UTF-7 to UTF-8)

> Encoding::UTF_7
 => #<Encoding:UTF-7 (dummy)> 

Meine Anwendung stürzt nicht ab, sie verarbeitet die E-Mail tatsächlich recht gut, sendet mir jedoch eine Benachrichtigung über den möglichen Fehler.

Ich habe einige Zeit gegoogelt und kann niemanden finden, der die Konvertierung implementiert hat, zumindest nicht als Ruby 1.9.3 Encoding :: Converter.

Meine Frage ist also, wie relevant ist diese Codierung, da ich in UTF-7 nie eine E-Mail mit tatsächlichem Inhalt von einer tatsächlichen Person erhalten habe? kann ich es sicher ignorieren?


3
UTF-7 wird kaum verwendet , außer in E-Mail-Protokollen wie IMAP
Charles Salvia

Antworten:


10

Das einzige relevante Merkmal von UTF-7 (zum Beispiel über UTF-8) ist, dass es eine 7-Bit-Codierung ist, genau wie es gutes altes ASCII ist. Das bedeutet, dass es über ein System funktioniert, das nicht 8-Bit sauber ist .

Das einzige große System, bei dem dies heute noch wichtig ist, sind Mailserver (fragen Sie mich nicht, warum sie dieses Problem vor 10 bis 20 Jahren nicht behoben haben, die meisten Server haben es getan, aber einige haben es angeblich immer noch nicht getan).

Also: UTF-7 wird nur in E-Mail-Systemen relevant sein. Überall sonst ist UTF-8 die bessere Wahl.


2
Nun, ich analysiere E-Mails, die meisten E-Mails sind UTF-8, meine Frage ist, wie viele E-Mails ich als UTF-7 erwarten soll.
Pupeno

7

Dank des Kommentars von Charles Salvia habe ich im IMAP-Modul eine Methode gefunden, die mir geholfen hat:

require "net/imap"
Net::IMAP.decode_utf7(mail_body)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.