Andrés Blog

Krams. Und so.


IMAP über SSH (in claws-mail)

Ich hab mal wieder unverhältnismäßig Lange nach einer Lösung für ein eigentlich simples Problem gesucht. Und diese Lösung möchte ich hier verewigen, um anderen Suchenden (und natürlich meinem zukünftigen Ich) Zeit bei der Suche zu sparen.

TL;DR: “Use command to communicate with server” -> ssh -q ssh.server.com nc localhost 143

Zunächst möchte ich mich bei meinem aktuellen Mail-Setup bedanken, welches dieses Problem überhaupt erst möglich gemacht hat. ;) Das Setup besteht primär aus einem IMAP-Server, welcher via fetchmail mit den Mails verschiedener Konten versorgt wird. Diese werden vorher durch Spamassassin gejagd und via Sieve grob sortiert (nur grob, da eine feine Sortierung Zeit kostet, und das Suchen erschwert). Um von überall Zugriff auf meine Mails zu haben, habe ich mich für das Webmailfrontend Roundcube entschieden. Roundcube ermöglicht es außerdem, Mails über einen SMTP-Server zu verschicken. So kann ich nicht nur problemlos von einem Server mit dynamischer IP-Adresse aus Mails verschicken, sondern hab sogar meine Mailadresse als Absender ;) Genauer gesagt eine meiner Mailadressen. Für den meisten Mailverkehr nutze ich zwar ohnehin die Mailadresse der Uni, dennoch verspüre mittlerweile das Bedürfnis, bei der Beantwortung diverser Mails mit der entsprechenden Adresse zu antworten. Und genau dort lag mein Problem.

Nun gibt es verschiedene Wege, dieses Problem anzugehen.

  • Roundcubes Config jedes mal ändern
  • Webmailfrontends der anderen Anbieter
  • Roundcube Plugin schreiben
  • claws-mail mit SMTP only Konten

Das Ändern der Konfiguration vorm Versenden scheidet offensichtlich aus.

Die Webmailfrontends der anderen Konten nutzen ist aus meiner Sicht ebenfalls umständlich. Außerdem löscht meine fetchmail-Konfiguration alle Mails nach dem Abrufen, so dass IDs beim Reply verloren gehen würden.

Ein Plugin für Roundcube habe ich sogar mal geschrieben, welches mir die Einstellung eines SMTP-Servers für jede Identität innerhalb eines Roundcube-Logins (man kann dort beliebig viele angeben) ermöglicht. Leider ist dieses Plugin mehr ein sehr fieser Hack gewesen als ein sauberes Plugin. Daher nutze ich das nicht mehr. (Ich glaube, die Sourcen hab ich auch verlegt. Sollte ich diese wiederfinden und dran denken, werde ich die hier nachträglich verlinken…) Man könnte nun sicherlich ein neues Plugin schreiben, welches diese Funktionalität bietet und schöner geschrieben ist, jedoch fehlts da gerade an Motivation.

Und als letzte Lösung - gleichzeitig ein Schritt in Richtung des ursprünglich angekündigten Problems - bietet die Nutzung von einem Mail-Client wie z.B. claws-mail, welcher Mail-Konten als SMTP only unterstützt. Somit rufe ich die Mails über IMAP ab und habe pro gewünschter, ausgehender Mailadresse ein SMTP only Konto.

claws-mail lässt sich zwar nicht wie ein Webfrontend von überall aus aufrufen, dieses Manko nehme ich aber in Kauf, da ich zum einen eh meistens mein Laptop griffbereit habe und andererseits das Webfrontend mit meiner UniMail als Absender für den meisten Mailverkehr weiterhin erreichbar ist. Ein anderes, größeres Problem sehe ich im externen Zugriff auf IMAP, denn irgendwie muss claws-mail ja auch an die Daten kommen. Auch von unterwegs. Laut der claws-mail features Seite unterstützt der Client von Haus aus IMAP over SSH Tunnel. Super! Damit muss ich keinen zusätzlichen Port öffnen. Und verschlüsselt wird auch direkt! Nur wo zum Henker findet sich diese Option? Und warum wird das Feature weder im Manual noch im Wiki erwähnt?

Daher hier für Mitleidende die Lösung, die ich zur Zeit verwende: Unter den Account-Preferences in claws-mail findet sich unter Advanced ein Punkt “Use command to communicate with server”. Hier trägt man einen ssh-Befehl wie z.B. dem folgenden ein: ssh -q ssh.server.com nc localhost 143 Dazu sollte der IMAP-Server natürlich auch unter localhost auf Port 143 erreichbar sein. Außerdem sollte die Verbindung zum Server ohne Passwortabfrage funktionieren (wobei ich es nicht mit probiert habe - gehe aber nicht davon aus, dass claws-mail dann nach dem Passwort fragt). Das kann man mithilfe von SSH-Keys erreichen. Sofern man dem Key ein Passwort gibt, kann man diesen per ssh-agent bereitstellen, um das Passwort nicht für jede Verbindung eingeben zu müssen.

Ich hoffe, das ich dem ein oder anderen hiermit die Suche nach der “IMAP over SSH tunnel”-Option vereinfache und vielleicht sucht ja auch jemand nach ein paar Anregungen für ein eigenes Mail-Setup ;)