jollyjumper83
Goto Top

SMTP Error: Could not authenticate

Hallo liebe IT-Gemeinde,

ich habe ein wirklich nerviges Problem.
Wir verwenden für ein internes Händlerportal einen phpMailer aktuellster Version. Bis vor einigen Wochen und mit einer alten Versender-E-Mail völlig problemlos. Nun hatten wir durch eine Domainänderung neue E-Mailpostfächer / E-Mailadressen erhalten, sodass auch die verantwortliche Versender-E-Mail geändert werden musste.
Ab da begannen die Probleme.
SMTP Authentifizierung schlägt fehl (Office365).
Ok soweit verstanden. Die Basisauthentifizierung wurde durch Microsoft eingestellt / abgeschafft wie auch immer. Somit habe ich mich um eine OAuth2 inkl. moderner Authentifizierung gekümmert. Klar ganz schöner Aufwand wenn man das noch nie gemacht hat, aber bis dahin alles ok. Tokens werden ausgetauscht erneuert usw.
Die "App" ist registriert send.SMTP hat die erforderliche Berechtigung. Der Benutzer hat die Erlaubnis erteilt bekommen "authentifiziertes SMTP" unter Admin Center - E-Mail.
Also kurz um, ich habe alles eingestellt und 3x gechecked, aber ich bekomme immer und immer wieder die Meldung SMTP Error: Could not authenticate.
Ich weiß an dieser Stelle einfach nicht weiter. Ich kann es mir einfach nicht erklären, was hier noch falsch laufen soll.
Ich habe mittlerweile soviele Beiträge, Lösungsansätze und Microsoft Handlungsempfehlungen durchsucht, das mir jetzt einfach keine Idee mehr übrig bleibt. Selbst ChatGPT will nicht mehr mit mir über dieses Thema reden.

Ich hoffe von euch hat noch jemand eine Ahnung oder einen Tipp was es sein könnte und ich wette es ist wieder ein kleiner Hacken im hintersten Eck der Einstellungskiste.

Ich würde mich wirklich über Hilfe freuen!

Content-ID: 669887

Url: https://administrator.de/contentid/669887

Printed on: December 7, 2024 at 17:12 o'clock

Vision2015
Vision2015 Nov 30, 2024 at 05:28:14 (UTC)
Goto Top
Moin...
Selbst ChatGPT will nicht mehr mit mir über dieses Thema reden.

ich frage dann in der regel meine frau, die weiß es in der regel besser!
allerdings würden uns die smtp logs und vor allem der name des uns unbekanten phpMailer auch etwas helfen.
Frank
StefanKittel
StefanKittel Nov 30, 2024 at 07:55:35 (UTC)
Goto Top
Moin,
ich empfehle wir solche Web-Apps kein direktes SMTP zu verwenden und wenn dann schon gar nicht mit Winzig-Weich.

Ich schicke Mails mit der API von https://mailtrap.io/.
SPF und DKIM Einträge ergänmzen und fertig.

Stefan
Xaero1982
Xaero1982 Nov 30, 2024 at 19:21:16 (UTC)
Goto Top
Du musst SMTP für den Tenant aktivieren per Powershell. Sonst wird das nichts. Ist zumindest meine Erfahrung.

Versuchs gerne zunächst per PS damit:

Set-CASMailbox -Identity max.mustermann@contoso.com -SmtpClientAuthenticationDisabled $false

Ansonsten eben:

Set-TransportConfig -SmtpClientAuthenticationDisabled $false

Da brauchst du auch kein oAuth, sondern simples SMTP. Das Konto darf dann natürlich keine aktive 2FA haben.
Geht auch mit einer Shared Mailbox.

Was für einen SMTP Server benutzt du? Adresse? Port? Verschlüsselung?
JollyJumper83
JollyJumper83 Nov 30, 2024 updated at 23:21:03 (UTC)
Goto Top
Ja das hatte ich mir bereits angeschaut und überlege wirklich, auch schon aus anderen Gründen, ob ich mir das nicht mal genauer zur Brust nehme. Also ist das, so wie ich verstehe eine Empfehlung? @StefanKittel
JollyJumper83
JollyJumper83 Nov 30, 2024 at 23:20:01 (UTC)
Goto Top
Ja das war eines der ersten Schritte die ich unternommen habe. Funktioniert leider bei diesem Postfach nicht. Ich habe mittlerweile ein anderes Postfach erstellt, welches ich heute zum laufen gebracht habe. Warum auch immer, da funktioniert es.
Was ich nicht wusste, dass es auch mit einem geteilten Postfach möglich ist. Das werde ich mir nochmal genauer anschauen.
Vielleicht könnte das die Lösung schon sein, da ich dieses dann nur auf diesen Zweck auslegen kann.
Dani
Dani Dec 01, 2024 at 07:57:21 (UTC)
Goto Top
Moin,
Du musst SMTP für den Tenant aktivieren per Powershell. Sonst wird das nichts. Ist zumindest meine Erfahrung.
Noch ist das möglich... aber das Ende kommt: Exchange Online to retire Basic auth for Client Submission (SMTP AUTH)


Gruß,
Dani
JollyJumper83
Solution JollyJumper83 Dec 01, 2024 at 19:32:36 (UTC)
Goto Top
Ok ich habe heute nach wirklich intensiver Suche und viel Initiative den Fehler ausfindig gemacht.
Grundsätzlich war alles richtig, die Einstellungen usw.

Das Problem war einzig die Authentifizierung am SMTP von Office365.

Im PHPMailer und dem Composer League muss ein Scope mit angegeben werden.

'scope' => 'offline_access SMTP.Send'  

In allen Anleitungen zum Verfahren wird dieser so wie oben beschrieben angegeben. Leider verfehlt dieser aber sein Ziel, da es nicht ausreichend beschrieben wird. Es bedarf nur eine kleine Erweiterung und es funktioniert.

'scope' => 'offline_access https://outlook.office.com/SMTP.Send'  

Nach dieser Anpassung funktioniert es wie ein Uhrwerk.

Ich habe mal den gesamten Code mit aufgeführt, den ich zum testen verwendet habe. Vieleicht kann wer anderes diesen ebenfalls verwenden.

<?php
ini_set('display_errors', 1);  
ini_set('display_startup_errors', 1);  
error_reporting(E_ALL);

require $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php';  

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\OAuth;
use League\OAuth2\Client\Provider\GenericProvider;
use League\OAuth2\Client\Provider\Exception\IdentityProviderException;

// OAuth2-Provider-Konfiguration
$provider = new GenericProvider([
    'clientId'                => 'XXXX', // Deine Client-ID  
    'clientSecret'            => 'XXXX', // Dein Client-Secret  
    'redirectUri'             => 'https://deine_domain.de/callback.php', // Die registrierte Redirect-URI  
    'urlAuthorize'            => 'https://login.microsoftonline.com/XXXXX/oauth2/v2.0/authorize', // URL für die Autorisierung  
    'urlAccessToken'          => 'https://login.microsoftonline.com/XXXXX/oauth2/v2.0/token', // URL für den Token-Abruf  
    'urlResourceOwnerDetails' => '', // Nicht benötigt, daher leer  
]);

try {
    // Lade das gespeicherte Refresh Token
    $refreshTokenFile = $_SERVER['DOCUMENT_ROOT'] . '/functions/email/refresh_token.txt';  
    if (!file_exists($refreshTokenFile)) {
        throw new Exception('Das Refresh Token wurde nicht gefunden. Führen Sie die Einrichtung aus.');  
    }

    $refreshToken = file_get_contents($refreshTokenFile);
	
	echo '<br><br>Altes Refresh-Token: ' . $refreshToken;  
    
	// Erneue das Access Token
    $accessTokenResponse = $provider->getAccessToken('refresh_token', [  
        'refresh_token' => $refreshToken,  
		'scope' => 'offline_access https://outlook.office.com/SMTP.Send', // Hier wird der Scope definiert  
    ]);

    $accessToken = $accessTokenResponse->getToken();
    $newRefreshToken = $accessTokenResponse->getRefreshToken();
	
	echo '<br><br>Neues Refresh-Token: ' . $newRefreshToken;  

    // Aktualisiere das gespeicherte Refresh Token
    file_put_contents($refreshTokenFile, $newRefreshToken);

    // Konfiguriere PHPMailer
    $mail = new PHPMailer(true);
    $mail->isSMTP();
    $mail->Host = 'smtp.office365.com';  
    $mail->Port = 587;
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->SMTPAuth = true;
    $mail->AuthType = 'XOAUTH2';  

    // OAuth2-Konfiguration
    $mail->setOAuth(new OAuth([
        'provider' => $provider,  
        'clientId' => 'XXXX', // Deine Client-ID  
        'clientSecret' => 'XXXXX', // Dein Client-Secret  
        'refreshToken' => $newRefreshToken,  
        'userName' => 'deine@email.de', // Die E-Mail-Adresse des Benutzers  
    ]));

    // Absender und Empfänger
    $mail->setFrom('absender@email.de', 'Absender Name');  
    $mail->addAddress('empfaenger@email.de', 'Empfänger Name');  

    // Inhalt der E-Mail
    $mail->Subject = 'Test E-Mail';  
    $mail->Body    = 'Dies ist eine Testnachricht.';  
    $mail->AltBody = 'Dies ist eine Testnachricht im Nur-Text-Format.';  

    // E-Mail senden
    $mail->send();
    echo 'E-Mail erfolgreich gesendet!';  
} catch (IdentityProviderException $e) {
    // Fehler bei der Token-Erneuerung
    echo "Fehler beim Abrufen des Tokens: " . htmlspecialchars($e->getMessage()) . "<br>";  

    $responseBody = $e->getResponseBody();
    if (is_array($responseBody) || is_object($responseBody)) {
        echo "Antwort vom Server (Debug):<br><pre>" . print_r($responseBody, true) . "</pre>";  
    } else {
        echo "Antwort vom Server: " . htmlspecialchars($responseBody) . "<br>";  
    }
    exit;
} catch (Exception $e) {
    // Allgemeine Fehler
    echo "<h3>Fehlerbericht:</h3><br>";  
	echo $mail->ErrorInfo;

    // Zeige den Access Token, falls verfügbar
    echo '<br><strong>Access-Token (Falls verfügbar):</strong> ' . htmlspecialchars($accessToken ?? 'Kein Access-Token') . '<br>';  

    // Detaillierte Fehlermeldung
    echo '<strong>Fehlermeldung:</strong> ' . htmlspecialchars($e->getMessage()) . '<br>';  

    // Wenn verfügbar, stack trace für tiefergehende Analyse
    echo '<strong>Fehlercode:</strong> ' . $e->getCode() . '<br>';  
    echo '<strong>Datei:</strong> ' . $e->getFile() . '<br>';  
    echo '<strong>Zeile:</strong> ' . $e->getLine() . '<br>';  

    // Stacktrace für Debugging anzeigen (optional, nur in Entwicklung nutzen!)
    echo '<strong>Stack Trace:</strong><pre>' . htmlspecialchars($e->getTraceAsString()) . '</pre>';  

    // Exit-Skript
    exit;
}
?>
Mr-Gustav
Mr-Gustav Dec 02, 2024 at 14:11:08 (UTC)
Goto Top
erst mal danke für die Lösung.
Vielleicht hilft es ja dem ein oder anderen Weiter der zufällig auf diese Seite gelangt


Ich hatte die Tage ein ähnliches Problem.
War ein Wordpress und der Webentwickler hat ein Postfach benötigt. Kunde war bei M365.
Also Postfach angelegt und Zugangsdaten übermittelt. Vorher MFA ausgeschaltet usw.....
Ordentliches Kennwort verwendet......
geht nicht. Mhhh..... Ich kann mich anmelden mit Benutzer und Passwort....... komische Sache.
Mitgeteilt das alles OK ist. Es kommt keine, wie der Programmierer vermutet hatte, MFA Registrierung usw.
Also dann mal aus Testgründen, damit beim übermitteln keine Fehler entstehen, ein ganz einfaches Passwort genommen alla´ 123Test und siehe da - Klappt auf Anhieb. Dann ein anderes Passwort mit 14 Zeichen ( max Sonderzeichen Characters = !$?#) genommen und siehe da alles OK.
Zum Schluss stellte sich raus das entweder das Wordpress Plugin bestimmte Sonderzeichen im Passwort nicht
richtig "verarbeiten" oder übergeben konnte und/oder das der Exchange Online hier Probleme mit der Länge und /oder den Sonderzeichen hatte.
Also Kennwort
Xaero1982
Xaero1982 Dec 02, 2024 at 14:19:59 (UTC)
Goto Top
Zitat von @Dani:

Moin,
Du musst SMTP für den Tenant aktivieren per Powershell. Sonst wird das nichts. Ist zumindest meine Erfahrung.
Noch ist das möglich... aber das Ende kommt: Exchange Online to retire Basic auth for Client Submission (SMTP AUTH)


Gruß,
Dani

Ui, na das wird spannend mit den ganzen MFP Geräten. Die können das ja alle nicht.

Grüße
Lochkartenstanzer
Lochkartenstanzer Dec 02, 2024 at 14:36:39 (UTC)
Goto Top
Zitat von @Xaero1982:

Ui, na das wird spannend mit den ganzen MFP Geräten. Die können das ja alle nicht.


Deswegen noch schnell einen Vorrat an Pis oder virtuellen Maschinen zulegen bevor die ausverkauft sind. Die können dann Gateway spielen. face-wink

lks
Mr-Gustav
Mr-Gustav Dec 02, 2024 at 14:46:32 (UTC)
Goto Top
Tja das wird in der Tat lustig. Hat bei meinem Kunden die ich betreue schon zu den Lustigsten Work arounds geführt.....

Einer meiner Kunden, bei dem ich nur Netzwerk, Virtualisierung und AD mache, hat sich von seinem Office/Microsoft365 Betreuer einen MiniPC ( Intel Nuc ) andrehen lassen auf dem ein Windows Server 2019/2022 läuft mit Installierter SMTP Rolle welcher sich um die ausgehenden Mails Richtung Exchange Online kümmert.
Der kleine SMTP Relay nimmt die Mails der Drucker, Appliances, TK Anlage, FAX usw.... entgegen und leitet diese nach Exchange Online weiter.
Ich finde Offene Relays, auch im lokalen LAN, immer ein bisschen heikel aufgrund von Sicherheit usw.....
Super Sache wenn die Mailware dann versucht massenhaft Spammails zu versenden face-smile Perfekte Infrastruktur. Ohne Begrenzug auf bestimmte IP´s usw......
Der Knaller war mal das der Dienstleister meine ich soll mal eine SMTP Verbindung aus der DMZ Richtung seines Mail Relay Servers aufmachen damit irgendeine Webseite Statusmails und anderen Mist versenden kann. Die Software konnte partou nicht mit EXO bzw. Office365 arbeiten. War auch schon älter face-smile
Man hat sich dann mit Googlemail Accounts beholfen weil ich mich geweigert habe einfach mal so fast alles und jeden ohne Authentifizierung per SMTP Mails über O365 versenden zu lassen.

Ich meine man hätte das auch anders und kostengünstiger regeln/lLösen können aber nun ja der Dienstleisters nacgt mit seinem Office365 Lizenzen ja sowieso am Hungertuch face-smile
Lochkartenstanzer
Lochkartenstanzer Dec 02, 2024 updated at 15:54:31 (UTC)
Goto Top
Zitat von @Mr-Gustav:

Tja das wird in der Tat lustig. Hat bei meinem Kunden die ich betreue schon zu den Lustigsten Work arounds geführt.....

Einer meiner Kunden, bei dem ich nur Netzwerk, Virtualisierung und AD mache, hat sich von seinem Office/Microsoft365 Betreuer einen MiniPC ( Intel Nuc ) andrehen lassen auf dem ein Windows Server 2019/2022 läuft mit Installierter SMTP Rolle welcher sich um die ausgehenden Mails Richtung Exchange Online kümmert.

Ersetze Server2022 durch ein llinux Deiner Wahl und richte einen einfaches mail-gateway Mit Paßwortauthentifizierung ein. face-smile

lks

PS: https://blog.admin-intelligence.de/mailversand-ueber-exchange-online-bei ...
Dani
Dani Dec 03, 2024 at 08:29:54 (UTC)
Goto Top
Moin,
Einer meiner Kunden, bei dem ich nur Netzwerk, Virtualisierung und AD mache, hat sich von seinem Office/Microsoft365 Betreuer einen MiniPC ( Intel Nuc ) andrehen lassen auf dem ein Windows Server 2019/2022 läuft mit Installierter SMTP Rolle welcher sich um die ausgehenden Mails Richtung Exchange Online kümmert.
kann man machen. Aber auch das SMTP Feature ist mit Windows Server 2025 abgekündigt. Natürlich bis 2035 im Windows Server 2025 verfügbar und grundsätzlich nutzbar. Aber ich gehe davon aus, dass vorher alle SMTP Produkte vermutlich auf modere Authentifizierung umgestellt haben.


Gruß,
Dani
Mr-Gustav
Mr-Gustav Dec 03, 2024 at 09:40:40 (UTC)
Goto Top
Na ja aber bei einem Linux und dann auch noch auf dem vSphere System konnte der Dienstleister ja doch nichts verdienen...... Der Nagt ja sowieso schon am Hungertuch weil der Audi Q7 so viel Sprit und Leasing kostet.

Ich weiß das man das so machen kann - Ich hatte es eben mit einem Linux in der minimal Installation getan und vorallem nicht ohne Authentifizierung face-smile

Zitat von @Dani:

Aber ich gehe davon aus, dass vorher alle SMTP Produkte vermutlich auf modere Authentifizierung umgestellt haben.

Nun bei neuerer Software wird dem wohl so sein aber bei älterer in die Jahre gekommener wird das ganze dann schon deutlich schwieriger zumal es jetzt schon schwierig ist da einen Supportter für die zwei Appliances zu finden. Das ganze geht in Richtung AS400 - glaube aber ist ein bisschen neuer aber lässt sich, so der aktuelle Dienstleister,auf garkeinen Fall virtualisieren .......

Ach ja der Betreuer dieses Art AS/400 ist auch der wo die Office/Microsoft Lizenzen verkauft und den Desktop Support übernimmt.
Vision2015
Vision2015 Dec 03, 2024 at 17:50:31 (UTC)
Goto Top
moin...
Zitat von @Mr-Gustav:

Na ja aber bei einem Linux und dann auch noch auf dem vSphere System konnte der Dienstleister ja doch nichts verdienen...... Der Nagt ja sowieso schon am Hungertuch weil der Audi Q7 so viel Sprit und Leasing kostet.
na na... so Teuer ist der Q7 auch nicht im Unterhalt!

Ich weiß das man das so machen kann - Ich hatte es eben mit einem Linux in der minimal Installation getan und vorallem nicht ohne Authentifizierung face-smile
richtig....

Zitat von @Dani:

Aber ich gehe davon aus, dass vorher alle SMTP Produkte vermutlich auf modere Authentifizierung umgestellt haben.

Nun bei neuerer Software wird dem wohl so sein aber bei älterer in die Jahre gekommener wird das ganze dann schon deutlich schwieriger zumal es jetzt schon schwierig ist da einen Supportter für die zwei Appliances zu finden. Das ganze geht in Richtung AS400 - glaube aber ist ein bisschen neuer aber lässt sich, so der aktuelle Dienstleister,auf garkeinen Fall virtualisieren .......
neee... mir der AS400, also der DB9 gibbet nix zu virtualisieren!

Ach ja der Betreuer dieses Art AS/400 ist auch der wo die Office/Microsoft Lizenzen verkauft und den Desktop Support übernimmt.
was ja nicht falsch ist, aber AS400 ist wirklich ein Problem.
ich habe Kunden mit DB9 AS400, das ding kann nicht mal ne SMTP
Authentifizierung oder SSL etc... ich konnte das auch nicht glauben, ist aber so... jedenfall in der Metal umgebung.
also 365 wird mit ner AS400 ohne extra Mailserver nicht laufen.

Frank

Authentifizierung
Mr-Gustav
Mr-Gustav Dec 05, 2024 at 13:16:39 (UTC)
Goto Top
Na ja ist jetzt direkt keine AS400 - keine Ahnung was das genau für eine Mainframe/Großrechner etc. Ist da läuft deren ERP und das DMS drauf und die haben damals Mails versenden müssen und der Dienstleister hat das dann mal eingerichtet als "Notlösung" weil die Software bzw. das DMS und ERP laufen mittlerweile auch auf normaler X64 Hardware und wären somit auch mVitualisierbar aber das Kostet eben Geld so ein Umstieg. Die Firma hat es ja perse vom BEHALTEN und nicht vom AUSGEBEN .-)

Das knallt früher oder Später sowieso. Die Java Lizenzumstellung auf verpflichtende Lizenzen für Gewerbliche Nutzer hat damals schon für einen kleinen Knall gesorgt. OpenJRE hat dann, angeblich 100% kompatibel für die Software, damals doch nicht so suuuperrr gut funktioniert.
Lochkartenstanzer
Lochkartenstanzer Dec 05, 2024 at 13:47:46 (UTC)
Goto Top
Moin,

Iirc konnte man auf Dr AS400 auch irgendwann Linux auf ei er Partition laufen lassen. Sollte also prinzipiell kein Problem sein, ein mailgateway darauf einzurichten. face-smile


lks

PS: Mein letzter AS400-Kontakt ist schon 25 Jahre her.