ADMIN-Tipp: UTF-8 im E-Mail-Subject

Jede Woche erscheint in unserem Newsletter ein neuer ADMIN-Tipp. Eine Sammlung aller Tipps finden Sie im Archiv der ADMIN-Tipps.

Um E-Mail-Subjects zu verarbeiten, die in UTF-8 codiert sind, bedarf es besonderer Tricks, denn streng genommen gibt es so etwas gar nicht. 

Wir schreiben das Jahr 2013. Ganz Linux ist auf UTF-8 umgestellt. Ganz Linux? Nein. Einige Programme aus den Anfangszeiten des Internet haben immer noch ihre Schwierigkeiten mit allem, was sich außerhalb der ASCII-Welt bewegt. Dazu gehört insbesondere E-Mail, für die es einige Umwege gibt, um dennoch andere Zeichencodierungen wie UTF-8 zum Adressaten zu befördern.

Für den Mail-Body gibt es mittlerweile schon 8-Bit-Extensions, mit denen sich UTF-8-Mails direkt verschicken lassen (etwa "Content-Type: text/plain; charset=UTF-8"), aber beim Header geht das nicht, denn er darf nur ASCII-Zeichen enthalten. Deshalb gibt es dafür Verfahren, die UTF-8-Zeichen über MIME kodieren (siehe RFC 2047). Prinzipiell gibt es dafür zwei Wege: Quoted Printable und Base64. Der grundsätzliche Aufbau eines so codierten Subjects sieht so aus:

=?charset?encoding?text?=

Das Character Set ist dann "UTF-8", für das Encoding gibt es die beiden Abkürzungen B (Base64) und Q (Quoted Printable) (siehe RFC 1342). Die meisten Mail-Clients verarbeiten solche Kodierungen automatisch, sodass man meistens nur das Ergebnis zu sehen bekommt. Wer aber etwa mit Procmail das Mail-Subject verarbeiten will, muss dazu erst einmal den Inhalt dechiffrieren. Der Trick besteht dann darin, in einer Regel erst das MIME-Encoding zu matchen und das Subject entsprechend zu decodieren. Dann kann eine zweite Regel das Subject überprüfen. 

Für Base64 sieht der erste Teil einer Procmail-Regel so aus:

* ^Subject:.*=\?utf-8\?B\?\/.+\?=

Den Match der Regular Expression dekodiert man mit dem "base64"-Kommando und schreibt sie in eine Variable, die eine zweite Procmail-Regel dann auf das Suchmuster hin prüft:

DECODEDSUBJECT=`echo $MATCH | sed s/?=// | base64 -d`
* DECODEDSUBJECT ?? Suchmuster

Im Body der inneren Regel lässt sich die Mail wie gewohnt mit Procmail verarbeiten. Die komplette Konfiguration sieht dann so aus:

:0
* ^Subject:.*=\?utf-8\?B\?\/.+\?=
 {
    DECODEDSUBJECT=`echo $MATCH | sed s/?=// | base64 -d`
    :0
    * DECODEDSUBJECT ?? Suchmuster
    {
       :0c
       Mail/specialfolder
    }
}
04.06.2013
comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023