Sonntag, 16. November 2008

Exchange Message Header Gedanken

Ich habe mich gefragt, wie ich eine Exchange Mailbox verwenden kann, ohne dass Exchange dabei für die Email Domain verantwortlich ist.

Ein Beispiel mit Google Mail:

Ich habe eine Google Mailbox, nennen wir sie “googleMB@gmail.de”. Ich habe eine Domain bei einem Provider liegen, sagen wir “huelsenfruechte.de”. Beim Provider lege ich eine Mail Adresse an: Bohne@huelsenfruechte.de

Für Selbige richte ich eine Mail Weiterleitung an googleMB@gmail.de ein. Auf meinem Google Account richte ich ausserdem eine neue Reply Adresse ein Bohne@huelsenfruechte.de. Damit versende und empfange ich unter Bohne@huelsenfruechte.de – verwende aber die Google Webmail Applikation.

Nun könnten die von der Spamerplage sensibilisierten Exchange Admins eine Gänsehaut bei obiger Beschreibung bekommen > “Dieses Konstrukt muss doch im Spamfilter landen – oder!?”

Nein, landet es nicht. Die Message Header der von Google versendeten Mails sehen folgendermaßen aus:

From: Bohne <bohne@huelsenfruechte.de>
Sender: <googleMB@gmail.com>
To:
empfaenger@woauchimmer.de
Received-SPF: Pass (mail.woauchimmer: domain of goobleMB@google.de)

Laut RFC 2822 ist “Sender” der eigentliche Sender. Z.B. in einem Sekretärin/Chef Konstrukt, wenn die Sekretärin “on-behalf-of” ihrem Chef versendet, taucht ihre email unter “Sender” auf und die ihres Chefs unter “From”. Der SPF Lookup wird auf das Sender Feld gemacht. Damit gibt es mit dem beschriebenen Konstrukt keinerlei Probleme mit SPF.

Exchange macht das ebenso: Wenn man dem UserA “send-on-behalf” Rechte auf der Mailbox von UserB gibt, taucht UserA unter Sender auf, sobald er im Namen von UserB versendet.

Ganz anders sieht es aus, wenn man UserA “Send-As” Rechte auf der Mailbox von UserB gibt. In diesem Fall wird keine “Sender-Line” in den Message Header geschrieben. Der eigentliche Sender taucht nicht in der Mail auf.

Das alles gilt aber nur, wenn man sich per Mapi bzw. RPC über HTTP mit dem Mailbox Server verbindet. Bei IMAP sieht das ganze schonwieder anders aus. Hier wird die Primary Email Adresse im AD komplett ignoiert. Dafür kann im Outlook Profile eine “Reply-To” Adresse gesetzt werden. Im Message Header sieht das dann so aus:

Reply-To: UserA@Domain.de
From: UserB@Domain.de
To: wemauchimmer@Domain.de

Drückt man auf diese Mail “Reply”, wird an UserA@Domain.de geschrieben.

Kommen wir also zu unserer Ursprungsfrage zurück: Wie können wir das Google-Reply-Szenario in Exchange realisieren?

Eine Möglichkeit wäre –wie wir gezeigt haben – IMAP oder POP zu benutzen und im Outlook Profile eine Reply-To Adresse zu setzen. IMAP und POP bieten aber nicht alle Features, die wir gerne hätten. Für eine MAPI/RPC over HTTP Lösung müssen wir also die Primary SMTP Adresse unserer Beispielsmailbox ändern.

Wie wir gesehen haben setzt Google im Message Header das Feld “Sender” (wie Exchange im “send on behalf” Fall). Dadurch wird der SPF Lookup auf den Wert des Feldes “Sender” und nicht auf den des Feldes “From” gemacht. Und so erhalten wir ein “SPF: Pass”.

In Exchange scheint es hierfür keine geeignete Lösung zu geben. Man kann zwar einen X-Header per Transport Rule setzen, jedoch wird dieser nicht für den SPF Lookup herangezogen.

Client

Auf Client Seite sieht es nicht viel anders aus. Outlook erlaubt zwar per “direct-replys” eine Reply Adresse zu setzen, jedoch muss dies dann in jeder mail, die versendet wird explizit getan werden – was nicht gerade komfortabel ist. Eine andere Möglichkeit bestünde darin, einen Mail Contact mit der externen Adresse anzulegen und dem Exchange User “Send-on-behalf-of” Rechte auf diesen Contact zu geben. So könnte man in Outlook die Email Adresse des Mail Contacts in das From Feld eintragen – auch diese Lösung kann man nicht gerade “user-freundlich” nennen.

Lösung

Die einzige Möglichkeit die bleibt um eine halbwegs komfortable Lösung zu erreichen, ist dem Exchange User eine externe Primary Email Address zu geben. Solange es für die Domain der externen Email Adresse keinen SPF Eintrag gibt, sollte dies auch kein Problem darstellen. Die SPF Analyse ergibt hier ein NONE.

Am einfachsten wäre es, wenn man entweder auf Client oder auf Server Seite die “Sender” Zeile in den Header bekäme. Per Telnet geht das – über Outlook ist mir kein Weg bekannt:

telnet mailserver 25
####
Das ist der Envelope Header:
####
mail from:me@me.de
rcpt to: you@you.de
####
Das ist der Mail Header:
####
data
from:me@me.de
to:you@you.de
sender:extern@extern.de
subject: Betreff
Body-Text
.