it-swarm.com.de

Google Mail blockiert den Anmeldeversuch von Python mit einem app-spezifischen Passwort

Ich versuche, mithilfe von Pythons smtplib eine E-Mail von einem Google-Konto aus zu senden, erhalte jedoch eine Fehlermeldung und bin jetzt irgendwie ratlos. Google antwortet mit: Please log in via your web browser and then try again. Learn more at https://support.google.com/mail/answer/78754.

Für das Konto ist die Zwei-Faktor-Authentifizierung aktiviert. Daher verwende ich ein App-spezifisches Passwort für meine Anmeldung. Nach meinem Verständnis sollte dies dann funktionieren, ohne die Einstellung für weniger sichere Apps zu aktivieren, oder? Ich habe dasselbe mit einem anderen Konto gemacht, während ich ohne Probleme getestet habe, aber jetzt habe ich endlich die Anmeldeinformationen für das richtige Konto erhalten und dort wird die Authentifizierung nicht akzeptiert.

Ich bin mir bewusst, dass es eine Python Gmail-API gibt, die mit OAuth verwendet werden kann, aber wenn möglich, möchte ich nicht mehr Pakete einbinden und viel umschreiben, und ich möchte die "weniger sicheren Apps" nicht wirklich aktivieren. entweder einstellen. Gibt es eine Möglichkeit, dies auch ohne zum Laufen zu bringen?

Wenn es einen Unterschied macht, ist hier der Code, den ich zum Senden von E-Mails verwende. Wie bereits erwähnt, hat dies bei einem anderen Konto problemlos funktioniert. Daher bin ich mir nicht sicher, ob es tatsächlich relevant ist.

def send_mail(to_address, subject, body):
    smtp_user = "[email protected]"
    smtp_password = "MyAppPasswordFromGoogle"
    server = "smtp.gmail.com"
    port = 587

    msg = MIMEMultipart("alternative")
    msg["Subject"] = subject
    msg["From"] = smtp_user
    msg["To"] = to_address
    msg.attach(MIMEText(body, "html"))
    s = smtplib.SMTP(server, port)
    s.connect(server, port)
    s.ehlo()
    s.starttls()
    s.ehlo()
    s.login(smtp_user, smtp_password)
    s.sendmail(smtp_user, to_address, msg.as_string())
    s.quit()

Bearbeiten: Es gibt einen interessanten Unterschied zwischen den beiden Konten: Auf https://myaccount.google.com/lesssecureapps sagt mein alter (funktionierender): "Diese Einstellung ist für Konten mit Zwei-Faktor-Authentifizierung nicht verfügbar aktiviert ", während die neue Meldung besagt" Diese Einstellung wird von Ihrem Domain-Administrator verwaltet ", obwohl beide 2FA verwenden und es auch in beiden Domains erzwungen wird. Ich nehme an, es gibt einige Einstellungen, die der Domain-Administrator ändern muss, aber ich weiß nicht, welche.

11
Christian

Ich habe versucht, genau Ihren Fall zu replizieren (mit einem Konto, für das die Zwei-Faktor-Authentifizierung aktiviert ist). Nachdem ich mein App-Passwort erstellt habe, habe ich es im Code verwendet.

Wie auch immer, ich denke dein Problem ist folgendes:

s = smtplib.SMTP(server, port)
s.connect(server, port)

Sie führen die Verbindung zweimal aus.

Versuche es mit

s = smtplib.SMTP()
s.connect(server, port)

oder einfach so

s = smtplib.SMTP(server, port)

Der gesamte Code:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText


smtp_user = '[email protected]'
smtp_password = 'my16charactersAppPassword'
server = 'smtp.gmail.com'
port = 587
msg = MIMEMultipart("alternative")
msg["Subject"] = 'Why,Oh why!'
msg["From"] = smtp_user
msg["To"] = "[email protected]"
msg.attach(MIMEText('\nsent via python', 'plain'))
s = smtplib.SMTP(server, port)
s.ehlo()
s.starttls()
s.login(smtp_user, smtp_password)
s.sendmail(smtp_user, "[email protected]", msg.as_string())
s.quit()
4
Davide Patti

Ich bin nur neugierig, ob Sie IMAP aktiviert haben (obwohl SMTP nichts mit IMAP zu tun hat) ...

Hier ist eine alte Liste mit vielen verschiedenen Lösungen - Senden von E-Mails über Gmail SMTP-Server mit C #

0
V-Mark

Scheint einfach, aber prüfen Sie, ob Weniger sichere Apps zulassen aktiviert ist.

0
bboynton97