eMail-Subjects in UTF-8 mit Ruby kodieren
Falls mal jemand außer mir in die Verlegenheit kommt, aus einem Ruby-Skript heraus eMails zu generieren, die im Header auch Umlaute/Sonderzeichen enthalten, dann wird dieser jemand wohl auch recht bald feststellen, dass das gar nicht so einfach ist.
Das erste Problem: Die entsprechenden RFC 822, 1652, 2821, etc. sind nämlich ein bisschen haarig zu lesen, außerdem gibt es so viele davon; nach meiner Zählung muss man sich bei der standard-konformen Implementierung von eMail-Funktionalität (sprich: SMTP) um mindestens 24 RFCs kümmern; wir sind ja nicht Microsoft und definieren unsere eigenen Standards …
Gut, worin liegt nun das eigentliche Problem? Kurz gefasst: eMail-Subjects sollen ausschließlich Zeichen des 7bit-ASCII enthalten. Für den englisch-sprachigen Raum mag das angehen, für Europa, Südamerika und Asien hingegen reicht das bei weitem nicht.
Also muss das Subjekt z.B. in einen UTF-8-Wrapper kodiert werden. Die Zeile
Subject: Vielen Dank für die Blumen!
sieht korrekt kodiert dann so aus:
Subject: =?utf-8?b?VmllbGVuIERhbmsgZsO8ciBkaWUgQmx1bWVuIQ==?=
Kann man gut lesen, oder?!
Wer das ganze als bequeme Ruby-Methode haben möchte, darf sich an folgendem Code bedienen:
def encodeSubject(subject) "=?utf-8?b?#{[subject].pack("m").delete("\n")}?=" end
Solchen Code sollte man typischerweise großflächig mit Warnhinweisen kommentieren, dass nur derjenige, der ihn auch wirklich versteht, zu Änderungen befugt ist …
Ähnliche Artikel in diesem Blog:
Tags: Open Source, OSS, Ruby








Am 17. Januar 2010 um 02:00 Uhr
hallo! und vielen dank für den hinweis.
nur wo bau ich diesen code ein?
ich hab da einen websever mit postfix magento egroupware
öfters bekomm ich die meldungen von den useren das solche kryptischen betreffs weggeschickt werden.
didi
Am 17. Januar 2010 um 15:58 Uhr
Hallo didiber,
der o.a. Code ist dazu gedacht, in einer typischen Ruby-Applikation (z.B. einer Rails-Applikation) bei der Versendung von eMails mit Umlauten in der Betreff-Zeile diese auch richtig einzukodieren.
Ich kenne jetzt Magento nicht und eine kurze Google-Suche scheint eher den Schluss zuzulassen, dass es sich dabei um eine Typo3-nahe Sache handelt. Sollte dies der Fall sein, dann bringt Dir diese Code-Zeile leider gar nichts.
Wenn Du die Probleme allerdings mit einem in Ruby geschriebenen Produkt haben solltest, dann kannst Du den Code dort einfügen, wo das Subject für die zu versendende eMail erzeugt wird.
Es wäre schön, wenn Dir damit geholfen wäre – auch wenn die Hilfe eventuell nur darin bestand zu klären, dass es in Deinem speziellen Fall leider nicht helfen wird.