SMTP: Nicht erkannte Authentifizierungsart mit Office 365

Ich erhalte diesen Fehler und habe bereits so viele verschiedene Optionen ausprobiert. Ich verwende Office 365.

Fehler: 504 5.7.4 Nicht erkannte Authentifizierungsmethode [MN2PR20CA0010.namprd20.prod.outlook.com]

Einstellungen hier:

  DISCOURSE_SMTP_ADDRESS: smtp.office365.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: email
  DISCOURSE_SMTP_PASSWORD: "PASSWORD"
  DISCOURSE_SMTP_ENABLE_START_TLS: true

Testen Sie Ihre Konfiguration zunächst mit dem openssl-Tool.

  1. Kodieren Sie Ihren Office365-Benutzer
echo -n "Ihre E-Mail hier " | openssl enc -base64
xxx_kodierter_E-Mail_xxx
  1. Kodieren Sie Ihr Passwort
echo -n "Ihr Passwort hier" | openssl enc -base64
xxx_kodiertes_Passwort_xxx
  1. Öffnen Sie eine Verbindung
openssl s_client -connect SMTP.office365.com:587 -starttls smtp -quiet -crlf
  1. Testen Sie die Authentifizierung
  • Warten Sie auf die Meldung 250 SMTPUTF8
  • Senden Sie EHLO SMTP.office365.com
  • Warten Sie auf die Antwort
    250-PR3P189CA0029.outlook.office365.com Hello [88.138.0.68]
    250-SIZE 157286400
    250-PIPELINING
    250-DSN
    250-ENHANCEDSTATUSCODES
    250-AUTH LOGIN XOAUTH2
    250-8BITMIME
    250-BINARYMIME
    250-CHUNKING
    250 SMTPUTF8
    
  • Senden Sie AUTH LOGIN
  • Warten Sie auf 334 VXNlcm5hbWU6
  • Senden Sie Ihren kodierten Benutzernamen xxx_kodierter_E-Mail_xxx
  • Warten Sie auf 334 UGFzc3dvcmQ6
  • Senden Sie Ihr kodiertes Passwort xxx_kodiertes_Passwort_xxx
  • Warten Sie auf die Antwort 235 2.7.0 Authentication successful

Wenn der OpenSSL-Test erfolgreich ist, aber der Verbindungstest von discourse-doctor mit diesen Einstellungen dennoch fehlschlägt, was ist dann der nächste Schritt? Obwohl der OpenSSL-Test funktioniert, schlägt meine Discourse-Verbindung mit 504 5.7.4 Unrecognized authentication type… fehl. Vermutlich wird die LOGIN-Authentifizierungsmethode nicht erkannt. Ich habe versucht, DISCOURSE_SMTP_AUTHENTICATION: login zur app.yml-Datei hinzuzufügen, aber das hat nicht geholfen.

Nur als Hinweis: Hier ist, was ich herausgefunden habe. Ich bin in das Docker-Image gegangen und habe mich mit dem Skript lib/tasks/emails.rake und der Datei config/discourse.conf herumgetrieben. Mehrere Stunden später, nachdem ich jede mögliche Kombination von smtp.office365.com und .mail.protection.outlook.com mit AUTH login und AUTH plain ausprobiert hatte, habe ich den Block über dem SMTP-Start auskommentiert.

# Wir möchten dies tun, aber Net::SMTP schlägt bei starttls fehl
#Net::SMTP.start(smtp[:address], smtp[:port]) do |s|
#  s.starttls if !!smtp[:enable_starttls_auto] && s.capable_starttls?
#  s.auth_login(smtp[:user_name], smtp[:password])
#end

Das Ausführen so wie es war, führte zu einem Lese-Timeout.
Eine Änderung wie folgt – das Aufrufen von new anstelle von start – führte zu einem erfolgreichen Versand.

Net::SMTP.new(smtp[:address], smtp[:port]) do |s|
    s.enable_starttls
    s.auth_login(smtp[:user_name], smtp[:password])
end

Das ist meine erste Begegnung mit Ruby, Rake und Co. Ich kann nicht erklären, warum es funktioniert oder ob es für allgemeine Fälle eine ‘gute Sache’ ist.
J.

Ach ja, ich habe es auch nie geschafft, es mit my_domain.mail.protection.outlook.com auf Port 25 oder 587 zum Laufen zu bringen. Was funktioniert hat, war smtp.office365.com:587.

Ich nutze socketlabs.com als E-Mail-Versanddienst und hatte ein ähnliches Problem. In meinem Fall bestand die Lösung darin, die Datei lib/tasks/emails.rake wie folgt zu bearbeiten:
Ändern Sie die Zeile:
Net::SMTP.start(smtp[:address], smtp[:port], 'localhost', smtp[:user_name], smtp[:password])
in:
Net::SMTP.start(smtp[:address], smtp[:port], 'localhost', smtp[:user_name], smtp[:password], smtp[:authentication])

Ohne diese Änderung wird DISCOURSE_SMTP_AUTHENTICATION: login nicht an den darunterliegenden SMTP-Code übergeben.

Ich habe nicht getestet, ob der geänderte Code auch für andere Authentifizierungsmethoden funktioniert, aber er behebt das Problem bei der login-Authentifizierung.

Ich kann bestätigen, dass das Hinzufügen von
smtp[:authentication]
zum Net::SMTP.start-Aufruf und das Setzen von
DISCOURSE_SMTP_AUTHENTICATION: login
in app.yml das Problem auf der E-Mail-Testseite behebt.

Ich gehe davon aus, dass reguläre E-Mails über die mail-Bibliothek gesendet werden und das Setzen von
DISCOURSE_SMTP_AUTHENTICATION: login
in app.yml für die korrekte Funktionsweise der Bibliothek ausreicht.

Dennoch bin ich der Meinung, dass lib/tasks/emails.rake so angepasst werden sollte, dass es die Einstellung DISCOURSE_SMTP_AUTHENTICATION verwendet. Dies würde einige unnötige Fehlersuche einsparen.

Sieht für mich nach einem :bug: aus. Ich habe einen PR eingereicht:

Hallo,

Net::SMTP.start(smtp[:address], smtp[:port], ‘localhost’, smtp[:user_name], smtp[:password], smtp[:authentication])
rescue Exception => e

wurde in meiner aktuellen Version wie oben beschrieben gepatcht, aber der Fehler tritt weiterhin auf.

Fehler: 504 5.7.4 Unbekannter Authentifizierungstyp bei smtp.office365.com.

Hat jemand eine Idee?

Wie bearbeite ich das Skript lib/tasks/emails.rake, damit das funktioniert?

Als allgemeines Update zu diesem Thema: MS entfernt gerade die veraltete Authentifizierung für SMTP und POP3, was die Sache erschweren wird, wenn Sie O365 als E-Mail-Anbieter nutzen. Die derzeit angewendete Standardrichtlinie verbietet SMTP AUTH, und Sie müssen dies pro Postfach aktivieren. Ich hoffe, das ist hilfreich – ich habe gestern Morgen stundenlang gegen diese Wand gelaufen.

Besonders schade ist das für POP, denn die Einrichtung von eingehender E-Mail wird deutlich schwieriger, es sei denn, Discourse fügt IMAP-Unterstützung für eingehende Postfächer hinzu.

Es gibt eine einfache Lösung für eingehende E-Mails, die einen Container zum Empfangen enthält. Früher hieß sie ‘einfach’, aber jemand hat den Namen beanstandet, er wurde geändert, und ich kann ihn nicht mehr finden.

Es gibt auch IMAP-Unterstützung für Gruppen-Postfächer. Diese unterstützt jedoch hauptsächlich nur Gmail.

Nun, den eigenen Mailserver zu betreiben, sollte in jedem Fall als letztes Mittel betrachtet werden. Ich glaube, es ging um „direkte Zustellung

Stand 2023 ist die POP3-Authentifizierung in Exchange nicht mehr möglich.

Wenn Sie PHPMailer verwenden
Versuchen Sie dann, die Zeile auszukommentieren/zu entfernen und versuchen Sie es: //$mail->isSMTP(true);