Freitag, 16. Juli 2010

Zugriff auf Postfächer anderer Benutzer mit IMAP und Exchange Server

Hat mich heute eine Weile gekostet, um das herauszufinden - und entweder hatte ich die falschen Suchbegriffe, oder Google findet einfach nichts.

Problem: ich muß mit Perl auf einen Exchange-Server zugreifen, um dort via IMAP Mails abzuholen, diese zu parsen, und dann je nach Inhalt weiterzuverarbeiten. Natürlich kommen die Mails nicht bei mir "privat" an, sondern in einem Sammelpostfach. Dessen User/Passwort bekomme ich aber nicht, sondern nur das Recht, das Postfach von meinem User aus anzusehen.

Eigentlich gibt es ja in imap namespaces, um genau das zu tun - Zugriff auf fremde Inboxen. Wenn man aber die Namespaces abfragt, dann ist der für die fremden Postfächer leer:

$ telnet imapserver imap
Trying 10.199.138.136...
Connected to imapserver.my.domain (10.199.138.136).
Escape character is '^]'.
* OK Microsoft Exchange Server 2003 IMAP4rev1 server version 6.5.7638.1 (imapserver.my.domain) ready.
1 login "guntram.blohm@my.mail.domain" "secret"
1 OK LOGIN completed.
2 namespace
* NAMESPACE (("" "/")) NIL (("Public Folders/" "/"))
2 OK NAMESPACE completed.
3 logout
* BYE Microsoft Exchange Server 2003 IMAP4rev1 server version 6.5.7638.1 signing off.
3 OK LOGOUT completed.
Connection closed by foreign host.

Man kommt also anscheinend nicht über Namespaces ran. Aber wenn man den Mailboxnamen der Mailbox, die man ansprechen will, mit / getrennt an den Benutzernamen anhängt, dann bekommt man Zugriff auf die Postfächer jenes Benutzers. Also:

$ telnet imapserver2 imap
Trying 10.199.138.140...
Connected to imapserver2.my.domain (10.199.138.140).
Escape character is '^]'.
* OK Microsoft Exchange Server 2003 IMAP4rev1 server version 6.5.7638.1 (imapserver2.my.domain) ready.
1 login "guntram.blohm@my.mail.domain/33333" "secret"
1 OK LOGIN completed.
2 logout
* BYE Microsoft Exchange Server 2003 IMAP4rev1 server version 6.5.7638.1 signing off.
2 OK LOGOUT completed.
Connection closed by foreign host.

Die 33333 ist hier tatsächlich der Name des Postfachs, er entspricht der Telefonnummer der Hotline deren Mails auch gelesen werden sollen ...

Und das ganze geht natürlich nur wenn man auch die Rechte hat; mit beliebigen "Opfern" geht es natürlich nicht:

$ telnet imapserver3 imap
Trying 10.199.2.135...
Connected to imapserver3.my.domain (10.199.2.135).
Escape character is '^]'.
* OK Microsoft Exchange Server 2003 IMAP4rev1 server version 6.5.7638.1 (imapserver3.my.domain) ready.
1 login "guntram.blohm@my.mail.domain/peter.maier" "secret"
1 NO The requested item could not be found.
2 logout
* BYE Microsoft Exchange Server 2003 IMAP4rev1 server version 6.5.7638.1 signing off.
2 OK LOGOUT completed.