O2Popper

Diese Seite beschreibt den Einsatz der Freeware O2Popper als POP3-Proxy in Verbindung mit Exchange Online, damit sehr alte Programme weiterhin per POP3 ein Exchange Online Postfach abrufen können.

Diese Funktion ist nicht erforderlich und nicht ratsam, wenn ihre Applikation schon OAUTH unterstützt (wie z.B. Thunderbird) oder sie nur per SMTP eine Mail versenden wollen.

Auf meinem Windows 11 Client konnte ich die Software noch nicht zum laufen bekommen. Sie beschwert sich immer, dass ein TCP-Port nur einmal verwendet werden kann, obwohl der Port frei ist. Aber Es gibt mindestens einen MSXFAQ-Leser, der mit O2Popper einen Abruf von Exchange Online bereitgestellt hat. Daher habe ich die Seite, wenngleich unvollständig, schon veröffentlicht.

Hintergründe

Anfang Oktober 2022 hat Microsoft die lange angekündigte Änderung durchgesetzt und u.a. BasicAuth für POP3/IMAP4 in Exchange Online abgeschaltet. Erst dann haben einige Administratoren gemerkt, was sie die letzten Jahre geflissentlich ignoriert haben. Bis zum 31.12. 2022 können diese Firmen temporär wieder "BasicAuth" aktivieren aber danach müssen Sie ihre Lösungen umgestellt haben.

Auf der Seite BasicAuth Ende mit POP3/IMAP4 umgehen habe ich die verschiedenen Alternativen aufgezeigt, mit denen Sie alte Programme ohne OAUTH-Support auch ohne Proxy-Server weiter betreiben können. Nur wenn diese anderen Wege nicht möglich sind, sollten Sie über den Einsatz einer Proxy-Servers wie O2Popper nachdenken.

Funktionsweise

O2Popper ist ein Windows-Programm, welches ein Anwender in der Regel auf seinem eigenen PC installiert, unter seinem Benutzernamen gestartet wird und sich in der Tray-Leiste einnistet. Es öffnet lokal die Ports 8110/8025, so dass sich dann ein klassischer Mailclient über das Protokoll POP3 auf "localhost:8110" eine Verbindung startet und sich mit "Username+Kennwort" anmeldet. Der Proxy nutzt diese Daten dann, um sich per OAUTH an dem in O2POPPER hinterlegten Server per OAUTH anzumelden und ab dann "transparent" die Daten durchzureichen.

O2Popper nimmt nur Verbindungen von "Localhost" an und kann daher nicht ohne Tricks dazu genutzt werden, einen Service für einen anderen Client bereit zu stellen. O2Popper läuft auf Windows.

Es gibt in Windows die Funktion eines "Port Forwarding", welches mit NETSH konfiguriert werden kann. Damit wäre es dann noch möglich eine eingehende Verbindung auf eine im Lan erreichbare IP-Adresse auf "localhost" weiter zu leiten. Das habe ich nicht getestet und es ist nicht anzuraten, da die Anmeldedaten nicht per SSL/TLS gesichert sind.

Theoretisch könnten Sie OpenSSL/STUNNEL noch einen TLS-Tunnel davor schalten aber das ändert nichts an der grundlegenden Funktionsweise eines POP3-Proxy

O2Popper ist auch ein SMTP-Server, der eine Basic-Authentication auf OAUTH umsetzt. Das ist für Google-Mail erforderlich aber aktuell noch nicht für Exchange Online. Eine Einlieferung per SMTP über Port 587/TLS erzwingt aktuell noch keine OAUTH-Anmeldung.

Einrichtung

Dieser Abschnitt könnte recht kurz ausfallen, da der Autor die Software als EXE-Installer zum Download anbietet und sogar eine sehr ausführliche Installationsanleitung im Stiel einer PowerPoints-Foliensammlung als PDF bereit stellt.

Download
https://www.nips.ac.jp/~murata/o2popper/downloads/
Windows 64bit https://www.nips.ac.jp/~murata/o2popper/downloads/o2popper-2.0.0.exe  12MB

O2Popper User’s Guide
Windows: https://www.nips.ac.jp/~murata/o2popper/doc/o2popper-2.0.0-guide-win-en.pdf
Mac  https://www.nips.ac.jp/~murata/o2popper/doc/o2popper-2.0.0-guide-mac-en.pdf

Ich habe die Version 2.0.0 einfach mit dem Standumfang nach "C:\Program Files\O2Popper" installiert und gestartet. Das Programm selbst ist wohl in Python geschrieben und daher auch für MacOS verfügbar.

Kurz darauf erschien in der Trayleiste das Symbol mit einem Kontextmenü:

Die Einstellungen zeigen, dass der Programm primär für die Verbindung zu GoogleMail gedacht ist:

Konfiguration für Office 365

In der GUI können Sie zwar eine eigene ClientID und ClientSecret einstellen aber nicht die ServerURLs. Das geht über eine Parameterdatei, von denen der Autor aber auch einige Beispiele bereit gestellt hat:

Beispiele
https://www.nips.ac.jp/~murata/o2popper/downloads/client_secret_samples.zip

Die Dateien in dem Archiv haben leider die Erweiterung .js, obwohl es keine JavaScript-Dateien sind.

Der Inhalt der Datei "client_secret_microsoft.js" enthält die passenden Einstellungen für Exchange Online:

{"installed":
   {
      "client_id":"*",
      "auth_uri":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
      "token_uri":"https://login.microsoftonline.com/common/oauth2/v2.0/token",
      "client_secret":"*",
      "_scopes":[
         "offline_access",
         "https://outlook.office.com/POP.AccessAsUser.All",
         "https://outlook.office.com/IMAP.AccessAsUser.All",
         "https://outlook.office.com/SMTP.Send"
      ],
      "_pop_server":"outlook.office365.com:995",
      "_smtp_server":"smtp.office365.com:587"
   }
}

Es ist eine JSON-Datei Ich habe bei mir daher die Datei "client_secret_microsoft.js" im Programmverzeichnis mit der Extension ".json" abgespeichert und dann eingebunden. Allerdings musste ich die Änderung erst einmal speichern und den Dialog neu öffnen, um die neuen Werte zu sehen.

Allerdings war da das Feld "Client ID" und "Client Secret" noch leer.

App einrichten

Bei der "Modern Authentication" ist es erforderlich, dass sich nicht nur der Benutzer mit einem Namen und Kennwort anmeldet sondern auch die Applikation selbst gegenüber den Authenticationserver ausweist. Dazu ist es erforderlich, die Applikation mit einer "Client ID" und einem "Client Secret" einzurichten. Hier gibt es nun zwei Optionen:

  • Eigene App einrichten
    Dazu müssen Sie AzureAD Admin in ihrem Tenant sein und eine neue App-Registration für die Anwendung O2Popper anlegen. In dem Zuge erstellt das AzureAD eine AppID in Form einer GUID und sie müssen ein ClientSecret als Kennwort anfordern und beide Werte in O2Popper eintragen.
    Das ist der "saubere" Weg, mit dem sie als Administrator, z.B. die App dann auch auf Geräte und Konten beschränken (Conditional Access) und auch in den Anmeldeprotokollen die Nutzung sehen können.
  • Hijacking von Thunderbird
    Wen Sie nun kein AzureAD Administrator sind aber dennoch mittels O2Popper eine eigene Software per POP3 einbinden wollen, dann können Sie natürlich schauen, welche Applikationen es in einem AzureAD schon gibt. Hier kommt dann Mozilla Thunderbird ins Spiel, welches OAUTH unterstützt und dazu im Sourcecode natürlich eine ClientID samt Client-Secret hinterlegt hat.
"login.microsoftonline.com",
  [
    "08162f7c-0fd2-4200-a84a-f25a4db0b584", // Application (client) ID
    "TxRBilcHdC6WGBee]fs?QR:SJ8nI[g82", // @see App registrations | Certificates & secrets
    // https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-protocols#endpoints
    "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
    "https://login.microsoftonline.com/common/oauth2/v2.0/token",
],

Aus meiner Sicht ist der Missbrauch der Thunderbird-App-Registration nicht wünschenswert aber kann nur verhindert werden, indem der AzureAD Administrator die Thunderbird-Registrierung entzieht.

Ich hätte ja gerne eine App in meinem Tenant angelegt, die die gleichen Rechte verwendet, die auch Thunderbird nutzt. Allerdings habe ich diese nicht Rechte nicht sofort im Azure-Portal gefunden.

Die Beschreibung liefert aber nur eine Beschreibung, wie eine "Application Permission" eingerichtet wird. Ich möchte aber nicht, dass eine App ohne Mithilfe des Benutzers die rechte hat. Für die Einrichtung einer "Delegated"-Berechtigung hat dann eine Suche im Internet folgenden Seiten geliefert:

Die "Delegated Permission für IMAP" findet sich im Graph und natürlich sollte ich einen AdminConsent gewähren:

Ob diese Berechtigungen ausreichend sind, habe ich noch nicht verifizieren können.

Monitor-Mode

Der Fehler ist bei mir auch nicht im "Monitor"-Mode verschwunden, bei der die Software ein schönes Bild mit allen per IMAP übertragenen Daten anzeigt.

Sie sehen hier, dass O2Popper schon sauber die beiden auf meinem PC konfigurierten Ports 8025 und 8110 geöffnet hat und sogar auf Port 8110 ein Protokoll möglich war. Allerdings hat das Programm es dann gar nicht erst versucht per POP/IMAP sich zu Exchange Online zu verbinden und dann per HTTP ein OAUTH-Ticket zu besorgen.

Unattended starten

Vom Design her läuft O2Popper auf dem PC, auf dem auch der Anwender interaktiv angemeldet ist. So kann er auch seine Zugangsdaten oder Zustimmung im Browser bestätigen und die eigentliche POP3-Software verbindet sich auf Localhost. Das reicht natürlich nicht, wenn die Client ein Serverprozess ist und auf der Konsole niemand angemeldet ist.

Sie können O2Popper so konfigurieren, dass beim Aufruf direkt die Dienste gestartet werden. Zumindest ein Leser hat über NSSM als Service Manager es geschafft, O2Popper als Dienst zu starten. Mit "SRVANY" scheint es nicht zu funktionieren. Ich könnt mir auch vorstellen, dass O2Poopper auch über den Windows Taskmanager z.B. beim Start des Computers gestartet werden kann.

Einschätzung

Ich bin unentschlossen, ob ich für O2Popper eine Empfehlung aussprechen soll. Die Software scheint bei einigen Personen zu funktionieren aber ich konnte nicht den Fehler bei meinem Client finden. O2Popper wurde als "Anwender-Applikation" entworfen und entspricht daher nicht so meinem Anspruch an eine Serversoftware. Auch die Thematik mit der App-Registration ist befremdlich.

Aber ich verstehe auch, dass es seit dem 3. Okt 2022 durchaus Prozesse gibt, die nun nicht mehr per POP3 und Exchange Online funktionieren und selbst mit der "Verlängerung" bis zum 31.12.2022 nicht abgelöst werden können. Da ist die Not natürlich groß und O2Popper kann der Strohhalm sein. Das müssen Sie aber selbst ermitteln.

Weitere Links