SMTP Auth 365 Connector – SMTP/POP3-Proxy für Microsoft Graph
SMTP Auth 365 Connector – SMTP-/POP3-Anbindung für Microsoft 365
Zweck
PHXSMTPProxySMTP Auth 365 Connector ermöglicht einer älteren Anwendung den Mailversand über
Microsoft 365,365 und den Abruf des Posteingangs über POP3, obwohl die Anwendung
selbst kein OAuth2 unterstützt.
Alte Anwendung
│ SMTP AUTH LOGIN/PLAIN
▼
PHXSMTPProxySMTP Auth 365 Connector Windows-Dienst
│ persistente lokale Warteschlange
▼
Microsoft Graph mit App-only-OAuth2
│ POSTklein: /users/{Postfach}/sendMail
│ groß: Entwurf + Anhänge + /send
▼
Exchange Online
Für den Abruf gilt die umgekehrte Richtung:
Alter POP3-Client
│ USER = vollständige Postfachadresse
│ PASS = gemeinsames lokales Kennwort
▼
SMTP Auth 365 Connector Windows-Dienst
│ Microsoft Graph: Inbox auflisten und MIME über /$value abrufen
▼
Exchange Online
Es wird keine SMTP-Verbindung zu Exchange Online aufgebaut. Der Ausgang erfolgt ausschließlich über HTTPS und Microsoft Graph.
Systemvoraussetzungen
- Windows Server beziehungsweise RDS-Server
- .NET Framework 4.8
- Visual Studio 2022 zum Kompilieren
- Microsoft-365-Mandant mit Exchange Online
- Berechtigung zum Erstellen einer Entra-App
- Ausgehender HTTPS-Zugriff auf Port 443
- Zugriff auf
login.microsoftonline.comund,graph.microsoft.comund für große Anhänge auf die von Graph gelieferte Upload-URL unteroutlook.office.com
Funktionsweise der Warteschlange
Nachrichten werden zuerst dauerhaft gespeichert:
%ProgramData%<Programmordner>\Phoenix_Data_Systems\PHXSMTPProxy\Queue
├── Incoming
├── Pending
└── DeadLetter
Erst danach erhält die alte Anwendung 250 Queued. Ist Graph kurzzeitig nicht
erreichbar oder antwortet mit 429 Too Many Requests, erfolgt ein späterer
Versuch. Ein von Graph gesendeter Retry-After-Wert wird berücksichtigt.
Nach dauerhaften Graph-Fehlern oder zu vielen Versuchen wird die Nachricht nach
DeadLetter verschoben. Dieser Ordner muss überwacht werden.
1. Anwendung in Microsoft Entra anlegen
- Microsoft Entra Admin Center öffnen.
- App-Registrierungen öffnen.
- Eine mandanteninterne Anwendung
erstellen.PHXSMTPProxySMTP Auth 365 Connector - Anwendungs-ID (Client-ID) notieren.
- Verzeichnis-ID (Tenant-ID) notieren.
- Unter Zertifikate und Geheimnisse ein Client Secret erstellen.
- Den Secret-Wert sicher notieren.
Das Client Secret wird später DPAPI-verschlüsselt gespeichert und niemals in
App.config eingetragen.
2. Globale Graph-Berechtigung vergeben
In der Entra-App:
- API-Berechtigungen öffnen.
- Berechtigung hinzufügen wählen.
- Microsoft Graph auswählen.
- Anwendungsberechtigungen auswählen.
Mail.Sendhinzufügen.Mail.ReadWritehinzufügen.
Mail.Send als Anwendungsberechtigung erlaubt den Versand ohne angemeldeten BenutzerBenutzer. Mail.ReadWrite ist
für den Großnachrichtenweg und giltden POP3-Abruf erforderlich: Der Dienst legt
Entwürfe an, liest MIME-Nachrichten, setzt auf Wunsch den Gelesen-Status und
führt bestätigte POP3-Löschungen aus. Beide globalen
Anwendungsberechtigungen gelten standardmäßig für alle Postfächer. Der Dienst
verwendet jedoch nur Absender aus AllowedSenderAddresses beziehungsweise der
optionalen Domänenfreigabe.Domänenfreigabe und POP3-Postfächer aus AllowedPop3Mailboxes oder
AllowedPop3MailboxDomains.
Der Graph-Aufruf erfolgt immer exakt über dieses Postfach:
From: test@kunde.de
→ POST /users/test@kunde.de/sendMail
Die aus From: gelesene Adresse wird als Graph-Zielpostfach verwendet und erneut
als MIME-Absender eingesetzt. Microsoft Graph speichert die versendete Nachricht
automatisch im Ordner Gesendete Elemente dieses Postfachs.
Microsoft: Graph-Berechtigungen – Mail.Send und Mail.ReadWrite
3. Empfohlene Einschränkung auf ein Postfach
Die globale Entra-Berechtigung ist einfach einzurichten, besitzt aber einen sehr großen Berechtigungsumfang. Für eine zukunftsorientierte Least-Privilege- Konfiguration empfiehlt Microsoft Role Based Access Control for Applications in Exchange Online. Dieses Verfahren ersetzt die älteren Application Access Policies.
Microsoft: RBAC for Applications in Exchange Online
Wichtig: Berechtigungen aus Entra und Exchange-RBAC wirken additiv. Wenn du eine
echte Postfachbeschränkung über Application RBAC verwendest, mussmüssen die globaleglobalen
Mail.Send-Anwendungsberechtigung und Mail.ReadWrite-Anwendungsberechtigungen in Entra anschließend
entfernt werden. Im Exchange-RBAC-Scope müssen dann beide Rollen vergeben sein.
Schematisches Beispiel:
Connect-MgGraph -Scopes "Application.Read.All"
Connect-ExchangeOnline
$clientId = "CLIENT-ID-DER-APP"
$mailbox = "smtp@firma.at"
$entraServicePrincipal = Get-MgServicePrincipal `
-Filter "appId eq '$clientId'"
New-ServicePrincipal `
-AppId $clientId `
-ObjectId $entraServicePrincipal.Id `
-DisplayName "PHXSMTPProxy"SMTP Auth 365 Connector"
Set-Mailbox -Identity $mailbox -CustomAttribute15 "PHXSMTPProxy"SMTPAuth365Connector"
New-ManagementScope `
-Name "PHXSMTPProxy-SMTPAuth365Connector-Mailbox" `
-RecipientRestrictionFilter "CustomAttribute15 -eq 'PHXSMTPProxy'SMTPAuth365Connector'"
New-ManagementRoleAssignment `
-Name "PHXSMTPProxy-SMTPAuth365Connector-Mail.Send" `
-App $entraServicePrincipal.Id `
-Role "Application Mail.Send" `
-CustomResourceScope "PHXSMTPProxy-SMTPAuth365Connector-Mailbox"
New-ManagementRoleAssignment `
-Name "SMTPAuth365Connector-Mail.ReadWrite" `
-App $entraServicePrincipal.Id `
-Role "Application Mail.ReadWrite" `
-CustomResourceScope "SMTPAuth365Connector-Mailbox"
Test-ServicePrincipalAuthorization `
-Identity $entraServicePrincipal.Id `
-Resource $mailbox
Prüfe vorher, ob CustomAttribute15 bereits anderweitig verwendet wird.
RBAC-Änderungen können wegen Zwischenspeicherung verzögert wirksam werden.
Bei mehreren erlaubten Absendepostfächern muss das gewählte Attribut bei jedem
dieser Postfächer gesetzt werden, damit alle im Management Scope enthalten sind.
4. Anwendung konfigurieren
In App.config mindestens anpassen:
<add key="TenantId" value="TENANT-ID" />
<add key="ClientId" value="CLIENT-ID" />
<add key="AllowedSenderAddresses"
value="test@kunde.de,rechnung@kunde.de,bestellung@kunde.de" />
<add key="AllowedSenderDomains" value="" />
<add key="OAuthScope" value="https://graph.microsoft.com/.default" />
<!-- Leer = Ordner der laufenden SMTPAuth365Connector.exe -->
<add key="DataPath" value="" />
Bei leerem DataPath liegen die Daten standardmäßig direkt im Programmordner:
<Programmordner>
├── Logs
├── Pop3State
├── Queue
└── Secrets
Ein explizit eingetragener abweichender Pfad bleibt weiterhin möglich. Bei der Dienstinstallation richtet das Programm die erforderlichen Rechte für das Dienstkonto ein. Schreibrechte erhält es gezielt nur auf den veränderlichen Daten-Unterordnern.
POP3 wird unabhängig vom SMTP-Port konfiguriert:
<add key="Pop3Enabled" value="true" />
<add key="Pop3ListenAddress" value="127.0.0.1" />
<add key="Pop3ListenPort" value="2110" />
<add key="AllowedPop3Mailboxes"
value="test@kunde.de,rechnung@kunde.de" />
<add key="AllowedPop3MailboxDomains" value="" />
<add key="Pop3RequireStartTls" value="false" />
<add key="Pop3MaxMessages" value="1000" />
<add key="Pop3MaxMessageBytes" value="52428800" />
<add key="Pop3MarkAsReadOnRetrieval" value="true" />
<add key="Pop3DeleteTransferredMessages" value="false" />
Der POP3-Benutzername ist immer die vollständige Mailadresse des gewünschten Postfachs. Das Kennwort ist dasselbe gemeinsame lokale Kennwort wie beim SMTP- Eingang. Es handelt sich nicht um das Microsoft-365-Kennwort.
Ein Postfach ist erlaubt, wenn seine vollständige Adresse in
AllowedPop3Mailboxes steht oder seine Domain in
AllowedPop3MailboxDomains enthalten ist. Mehrere Einträge werden durch Komma
getrennt. Domains werden ohne @ eingetragen und gelten nur exakt; die Freigabe
von kunde.de schließt beispielsweise tochter.kunde.de nicht automatisch ein.
Beispiel: Alle POP3-Postfächer von kunde.de erlauben:
<add key="AllowedPop3Mailboxes" value="" />
<add key="AllowedPop3MailboxDomains" value="kunde.de" />
Einzeladressen und Domains können auch gemeinsam verwendet werden:
<add key="AllowedPop3Mailboxes" value="sonderpostfach@firma.at" />
<add key="AllowedPop3MailboxDomains" value="kunde.de,kunde.com" />
Nach dem Kompilieren heißt die aktive Datei .PHXSMTPProxy.SMTPAuth365Connector.exe.config
Betrieb auf demselben RDS-Server
<add key="ListenAddress" value="127.0.0.1" />
<add key="ListenPort" value="2525" />
<add key="AllowedClientAddresses" value="127.0.0.1,::1" />
<add key="RequireStartTls" value="false" />
Zugriff aus dem LAN
<add key="ListenAddress" value="0.0.0.0" />
<add key="AllowedClientAddresses" value="192.168.10.25" />
<add key="RequireStartTls" value="true" />
<add key="TlsCertificateThumbprint" value="ZERTIFIKAT-FINGERABDRUCK" />
Das Zertifikat muss mit privatem Schlüssel unter LocalMachine\My liegen. Das
Dienstkonto NETWORK SERVICE benötigt Leserechte auf den privaten Schlüssel.
Unterstützt wird STARTTLS, aber kein implizites SMTPS auf Port 465.
5. Absender und Empfänger
Microsoft Graph ermittelt Empfänger aus den MIME-Kopfzeilen, klassisches SMTP
dagegen aus RCPT TO. Der Proxy gleicht beide Verfahren an:
- Das Graph-Absendepostfach wird dynamisch aus dem MIME-Header
From:ermittelt. - Es muss genau eine gültige
From:-Adresse vorhanden sein. - Die Adresse muss in
AllowedSenderAddressesfreigegeben sein. - Für alle erlaubten Absender wird dasselbe lokale SMTP-Kennwort verwendet.
- Nur mit
RCPT TOangenommene Empfänger werden an Graph übergeben. - Passende ursprüngliche
To- undCc-Empfänger bleiben sichtbar. - Verdeckte Empfänger werden als
Bcceingesetzt. - Andere Empfängerangaben in MIME-Headern werden nicht ungeprüft übernommen.
- Der MIME-Absender wird auf die geprüfte dynamische
From:-Adresse gesetzt.
Beispiel:
From: rechnung@kunde.de
→ POST /users/rechnung@kunde.de/sendMail
→ Gesendete Elemente von rechnung@kunde.de
Ist AllowedSenderAddresses nicht leer, hat diese Liste Vorrang. Nur wenn sie
leer ist, wird AllowedSenderDomains als weniger strenger Fallback verwendet.
6. Größenlimit und große Anhänge
DerDie DienstStandardgrenze sendetfür die vollständigekomplette eingehende SMTP-/MIME-Nachricht base64-kodiertbeträgt
an25 sendMail:MiB:
<add key="MaxMessageBytes" value="2800000"26214400" />
FürDer größereVersandweg wird automatisch gewählt:
Schlägt ein Anhang-Upload fehl, wird ein noch nicht gesendeter Entwurf nach
Möglichkeit entfernt. Der normale Warteschlangenmechanismus startet beim nächsten
Versuch einen mehrstufigen Ablauf mitneuen Entwurf und lädt die Anhänge erneut hoch.
MaxMessageBytes darf in dieser Version zwischen 1 KiB und 100 MiB liegen. Die
Einstellung ist die Größe der gesamten SMTP-Nachricht, nicht nur eines Anhangs.
Base64 und MIME-Header verursachen zusätzlichen Platzbedarf. Zusätzlich gelten
die Größenlimits von Exchange Online und dem jeweiligen Postfach. Microsoft
Graph unterstützt über Upload SessionSessions vor.einzelne Anhänge bis 150 MB; das
Standardlimit des Dienstes ist bewusst niedriger.
Für den Großnachrichtenweg sind Mail.ReadWrite und Mail.Send als
Anwendungsberechtigungen erforderlich. Microsoft weist außerdem auf ein
bekanntes Problem bei großen Anhängen in freigegebenen oder delegierten
Postfächern hin. Dieser benötigtFall einesollte vollständigemit Zerlegungdem tatsächlich verwendeten Postfach
getestet werden.
Der Großnachrichtenweg übernimmt Betreff, HTML- oder Textinhalt, To, Cc, Bcc,
Reply-To, normale Dateianhänge und eingebettete CID-Inhalte. Kryptografisch
signierte oder verschlüsselte S/MIME-Nachrichten sollten unterhalb der direkten
MIME-NachrichtGrenze bleiben und istmüssen ingesondert Versiongetestet 1.4 nicht enthalten. Erhöhe das Limit daher nicht ungetestet.werden.
Microsoft: Große Anhänge mit Upload Sessions
7. Kompilieren und installieren
Schneller Test mit Klartextparametern
Für Tests steht TestConfiguration.vb zur Verfügung. Dort zuerst aktivieren:
Public Const Enabled As Boolean = True
Anschließend können alle relevanten Werte direkt im Modul eingetragen werden:
Public Const SmtpUsername As String = "alte-anwendung"
Public Const SmtpPassword As String = "lokales-testkennwort"
Public Const AllowedSenderAddresses As String =
"test@kunde.de,rechnung@kunde.de"
Public Const Pop3Enabled As Boolean = True
Public Const Pop3ListenPort As Integer = 2110
Public Const AllowedPop3Mailboxes As String =
"test@kunde.de,rechnung@kunde.de"
Public Const AllowedPop3MailboxDomains As String = ""
Public Const Pop3DeleteTransferredMessages As Boolean = False
Public Const TenantId As String = "Tenant-ID"
Public Const ClientId As String = "Client-ID"
Public Const ClientSecret As String = "Client-Secret"
Public Const DebugLogging As Boolean = True
Bei aktiviertem Testmodus werden die entsprechenden Werte aus App.config und
die DPAPI-Dateien nicht verwendet. DieDer TestwarteschlangeDatenpfad liegt standardmäßig in:im Ordner
der laufenden SMTPAuth365Connector.exe:
%LocalAppData%\Phoenix_Data_Systems\PHXSMTPProxy-Test<Programmordner>
Das Programm kann in Visual Studio gestartet oder direkt im Konsolenmodus ausgeführt werden:
.\PHXSMTPProxy.SMTPAuth365Connector.exe --console
Ein normaler Start öffnet grundsätzlich die Windows-Oberfläche. --console
bleibt aus Kompatibilitätsgründen gleichbedeutend mit einem normalen GUI-Start.
Nur --nogui startet den Connector als unsichtbaren lokalen Prozess. Der bei
der Dienstregistrierung eingetragene Parameter --service ist ausschließlich
für den Windows-Dienst bestimmt.
Der bisherige Text-Konsolenmodus wurde durch eine Windows-Oberfläche ersetzt. Das Produkticon wird als Programmsymbol, im Fenstertitel, in der Taskleiste und links im Kopfbereich der Oberfläche angezeigt. Sie besteht aus drei Bereichen:
********; dieser Platzhalter wird nicht als neues Kennwort gespeichert.
Live-Protokoll: Aktualisierung ungefähr alle 650 Millisekunden, farbliche
Kennzeichnung von Fehlern, Warnungen und Debugmeldungen sowie Pause,
automatisches Scrollen und Öffnen des Logordners.
Auf der Übersichtsseite stehen zusätzlich die Aktionen Dienst installieren, Dienst neu starten und Dienst deinstallieren bereit. Installation und Deinstallation lösen die Windows-Administratorabfrage aus. Die Installation registriert die aktuell laufende EXE direkt an ihrem vorhandenen Speicherort und startet den Dienst. Programm, Konfiguration, Warteschlange, Protokolle und DPAPI-Geheimnisse bleiben dadurch gemeinsam in diesem Ordner. Der Ordner darf nicht verschoben oder gelöscht werden, solange der Dienst installiert ist. Es sollte ein eigener Programmordner verwendet werden, weil das Programm dem Dienstkonto dort die erforderlichen Lese- und Ausführungsrechte erteilt.
Wenn der Windows-Dienst bereits läuft, startet die Oberfläche keine zweite
lokale Instanz auf denselben Ports. Änderungen werden zunächst in
SMTPAuth365Connector.exe.config gespeichert. Der Dienst übernimmt sie nach Betätigung
von Windows-Dienst neu starten. Unter Program Files sind dafür in der Regel
Administratorrechte erforderlich.
Hinweis zum Klartext-Testmodus: Bei
TestConfiguration.Enabled=Truehaben die einkompilierten Werte Vorrang. Die Oberfläche zeigt in diesem Modus die tatsächlich verwendeten Werte ausTestConfiguration.vban. Das Speichern in der GUI ist deaktiviert, weil diese fest einkompilierten Werte zur Laufzeit nicht geändert werden können. Für die Konfiguration über die Oberfläche mussEnabled=Falsegesetzt und das Programm neu kompiliert werden.
Während des Starts erscheint eine Warnung und im Log wird der unsichere Testmodus vermerkt.
Wichtig: Das Client Secret und die Kennwörter stehen im Klartext im Quellcode und auch in der kompilierten EXE. Vor der produktiven Kompilierung
Enabledwieder aufFalsesetzen und alle echten Geheimnisse ausTestConfiguration.vbentfernen.
Produktive Kompilierung und Installation
in Visual Studio 2022 öffnen.PHXSMTPProxy.SMTPAuth365Connector.sln
Release und Any CPU auswählen.
Projektmappe erstellen ausführen.
SMTPAuth365Connector.exe Die Dienstinstallation erfolgt vollständig im Programm über die native
Windows-Dienstverwaltung. PowerShell und Set-ExecutionPolicyInstallUtil.exe-Scopewerden Processnicht
Bypassverwendet. .\Install-Service.ps1
Das Skriptgemeinsame fragtlokale verdeckt nach dem lokalen SMTP-SMTP/POP3-Kennwort und demdas Entra Client Secret. Beide WerteSecret
werden über die GUI erfasst und mit Windows DPAPI verschlüsselt gespeichert:
%ProgramData%<Programmordner>\Phoenix_Data_Systems\PHXSMTPProxy\Secrets\smtp-password.bin
%ProgramData%<Programmordner>\Phoenix_Data_Systems\PHXSMTPProxy\Secrets\oauth-client-secret.bin
Die Speicherung ist fehlersicher ausgeführt: Vor dem Ändern hält das Programm den bisherigen Stand der Konfiguration und der betroffenen Geheimnisdateien im Speicher. Schlägt das Schreiben oder die anschließende vollständige Prüfung fehl, wird der vorherige Stand wiederhergestellt und die lokale Instanz mit diesem Stand erneut gestartet. Eine fehlgeschlagene Dienstinstallation entfernt einen eventuell nur teilweise angelegten Dienst ebenfalls wieder.
Fehler beim erneuten Start der lokalen Instanz
Die Meldung
Diese Instanz hat bereits mindestens eine Anforderung gestartet.
Eigenschaften können nur vor dem Senden der ersten Anforderung geändert werden.
stammte in älteren Projektständen von einem gemeinsam wiederverwendeten HTTP-Client. Nach der ersten OAuth- oder Graph-Anfrage durfte dessen Timeout beim Neustart nicht erneut geändert werden. Ab Version 2.3.1 besitzt jede gestartete Proxy-Instanz einen eigenen, genau einmal konfigurierten HTTP-Client. Bei einem Startfehler werden SMTP, POP3, Warteschlangenverarbeitung und HTTP-Verbindungen vollständig freigegeben. Das Programm muss deshalb nach einem normalen Startfehler nicht mehr beendet werden.
8. Alte Anwendung einstellen
SMTP-Versand
| Einstellung | Wert |
|---|---|
| SMTP-Server | 127.0.0.1 |
| Port | 2525 |
| Authentifizierung | SMTP AUTH LOGIN oder PLAIN |
| Benutzer | Wert aus SmtpUsername |
| Kennwort | Ein gemeinsames Kennwort für alle erlaubten Absender |
| TLS | entsprechend RequireStartTls |
POP3-Abruf
127.0.0.1
Port
2110 oder der Wert aus Pop3ListenPort
Benutzer
vollständige Postfachadresse, zum Beispiel test@kunde.de
Kennwort
dasselbe gemeinsame lokale Kennwort wie für SMTP
Verschlüsselung
STLS entsprechend Pop3RequireStartTls
POP3S/implizites TLS
nicht unterstützt
Falls der alte Client ausschließlich Port 110 unterstützt, kann
Pop3ListenPort auf 110 gesetzt werden. Bei Zugriff aus dem LAN müssen
Listen-Adresse, AllowedClientAddresses, Windows-Firewall und TLS entsprechend
abgesichert werden.
Verhalten des POP3-Abrufs
UIDL basiert auf unveränderlichen Graph-Nachrichten-IDs und bleibt für die
Lebensdauer einer Nachricht im Postfach stabil.
RETR lädt den originalen MIME-Inhalt über Graph /$value.
STAT und LIST verwenden vor dem Abruf die von Exchange bereitgestellte
ungefähre MAPI-Nachrichtengröße (PidTagMessageSize, 0x0E08). Nach RETR
verwendet die laufende Sitzung die exakte Größe des übertragenen MIME-Inhalts.
Bei Pop3MarkAsReadOnRetrieval=true wird die Nachricht nach erfolgreichem
RETR in Microsoft 365 als gelesen markiert. TOP markiert sie nicht gelesen.
Bei Pop3DeleteTransferredMessages=false bleiben Nachrichten in Microsoft
365. Nach einem vollständig ausgegebenen RETR speichert der Dienst die UIDL
dauerhaft und bietet diese Nachricht bei späteren Anmeldungen nicht mehr an.
Der Übertragungsstatus liegt je Postfach standardmäßig unter
<Programmordner>\Pop3State. Das gilt auch für den Testmodus, sofern dort
kein eigener DataPath angegeben wurde.
Bei Pop3DeleteTransferredMessages=true werden erfolgreich mit RETR
übertragene sowie explizit mit DELE markierte Nachrichten zur Löschung
vorgemerkt. Erst ein sauberes QUIT führt die Graph-Löschung aus.
Bei einem Verbindungsabbruch vor QUIT werden im Löschmodus keine Löschungen
ausgeführt; die Nachrichten werden bei der nächsten Anmeldung erneut angeboten.
RSET hebt alle Löschvormerkungen der aktuellen Sitzung wieder auf.
TOP gilt nicht als vollständige Übertragung und verändert weder den lokalen
Übertragungsstatus noch die automatische Löschvormerkung.
Beim späteren Wechsel vom Behalten- in den Löschmodus bleibt die vorhandene
Übertragungsliste wirksam. Bereits früher übertragene Mails werden dadurch
nicht plötzlich nochmals angeboten oder automatisch gelöscht.
Pop3MaxMessages begrenzt die Zahl der je Anmeldung angebotenen Nachrichten.
Berücksichtigt werden die neuesten Nachrichten; innerhalb dieser Auswahl wird
von alt nach neu nummeriert.
Pop3MaxMessageBytes begrenzt die Größe einer einzelnen heruntergeladenen
MIME-Nachricht; der Standard beträgt 50 MiB.
Microsoft: MIME-Inhalt einer Nachricht abrufen
Microsoft: Unveränderliche Outlook-IDs
Lokaler Anmeldungstest ohne TLS:
.\Test-Pop3Proxy.ps1 -Mailbox "test@kunde.de"
Das Skript zeigt STAT und die UIDL-Liste an, ruft aber keine Mail ab und
löscht nichts. Es ist für einen lokalen Funktionstest gedacht. Für LAN-Betrieb
mit erzwungenem STLS verwendest du anschließend den tatsächlichen alten Client.
Sicherheitshinweis: Wer das gemeinsame Kennwort kennt und von einer freigegebenen Client-IP zugreift, kann jedes in
AllowedPop3Mailboxeseingetragene Postfach und jedes Postfach einer inAllowedPop3MailboxDomainseingetragenen Domain öffnen, sofern die Entra-App darauf zugreifen darf. Halte die Freigaben deshalb so klein wie möglich und aktiviere im LAN zwingend STLS. Eine Domainfreigabe ist deutlich weitreichender als die Freigabe einzelner Adressen.
9. Testnachricht
.\Test-SmtpProxy.ps1 `
-From "smtp@firma.at" `
-To "empfaenger@firma.at"
Bei lokal aktiviertem STARTTLS zusätzlich -EnableSsl verwenden.
Test mit einem oder mehreren Anhängen:
.\Test-SmtpProxy.ps1 `
-From "smtp@firma.at" `
-To "empfaenger@firma.at" `
-AttachmentPath "C:\Temp\Test-10MB.pdf"
Protokollierung und Zustellstatus
%ProgramData%<Programmordner>\Phoenix_Data_Systems\PHXSMTPProxy\Logs
Mit der Einstellung
<add key="DebugLogging" value="true" />
werden zusätzliche Diagnoseinformationen geschrieben, unter anderem angenommene Verbindungen, SMTP-/POP3-Befehlsnamen, Queue-Prüfungen, Graph-HTTP-Statuswerte, OAuth-Ablaufzeit und bei Fehlern Stacktraces. Kennwörter, SMTP-AUTH-Inhalte, Nachrichtentexte, Client Secrets und OAuth-Tokens werden auch im Debugmodus nicht protokolliert. Nach einer Änderung muss die lokale Instanz oder der Windows-Dienst neu gestartet werden.
Graph bestätigt sendMail mit 202 Accepted. Das bedeutet Annahme, aber noch
keine endgültige Zustellbestätigung. Exchange-Transportregeln, Spamprüfung und
Empfängergrenzen gelten weiterhin.
Nach der Annahme wird eine Kopie im Ordner Gesendete Elemente des dynamisch
aus From: ermittelten Postfachs gespeichert. EineFür zusätzlichekleine Nachrichten genügt
hierfür Mail.Send; der implementierte Großnachrichtenweg benötigt zusätzlich
Mail.ReadWrite-Berechtigung istzum dafürAnlegen nichtund erforderlich.Bearbeiten des Entwurfs.
In einem seltenen Grenzfall kann eine Nachricht doppelt versendet werden, wenn Microsoft sie annimmt, aber die HTTP-Antwort den Proxy nicht mehr erreicht.
Sicherheit
- SMTP-Port niemals öffentlich ins Internet stellen.
- POP3-Port niemals öffentlich ins Internet stellen.
AllowedClientAddresses=* nicht produktiv verwenden.
AllowedPop3MailboxDomains nur verwenden, wenn wirklich alle Postfächer der
betreffenden Domain über das gemeinsame Kennwort erreichbar sein dürfen.
Im LAN STARTTLS und Windows-Firewall-Regeln verwenden.
Client Secret rechtzeitig erneuern.
Wenn möglich Exchange Application RBAC statt globalem Mail.Send und
Mail.ReadWrite verwenden.
Dead-Letter-Ordner und Logs überwachen.
Deinstallation
.\Uninstall-Service.ps1In
der GUI auf Übersicht die Aktion Dienst deinstallieren auswählen und die Sicherheitsabfrage sowie die Windows-Administratorabfrage bestätigen.AuchProgrammdateien, Einstellungen, verschlüsselte Geheimnisse entfernen:
.\Uninstall-Service.ps1 -RemoveSecrets
Programmdateien,Geheimnisse, Warteschlange und
Logs werden nicht automatisch gelöscht.