Ich versuche, E-Mails (Google Mail) mit Python zu senden, erhalte jedoch die folgende Fehlermeldung.
Traceback (most recent call last):
File "emailSend.py", line 14, in <module>
server.login(username,password)
File "/usr/lib/python2.5/smtplib.py", line 554, in login
raise SMTPException("SMTP AUTH extension not supported by server.")
smtplib.SMTPException: SMTP AUTH extension not supported by server.
Das Python-Skript ist das folgende.
import smtplib
fromaddr = '[email protected]'
toaddrs = '[email protected]'
msg = 'Why,Oh why!'
username = '[email protected]'
password = 'pwd'
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
Antworten:
Sie müssen sagen,
EHLO
bevor Sie direkt auf Folgendes stoßenSTARTTLS
:Auch sollten Sie wirklich schaffen
From:
,To:
undSubject:
Nachrichten - Header, getrennt von dem Nachrichtentext durch eine Leerzeile und die VerwendungCRLF
als EOL - Markierungen.Z.B
quelle
EHLO
per Tippfehler gesendet . Nachdem ich HELO viele Male ausprobiert hatte, war die Reaktion anders. Es hat Stunden gedauert, um herauszufinden, dass EHLO tatsächlich ein Befehl ist, den SMTP versteht, und ich habe den Tippfehler gemacht.Wenn Sie Port 465 verwenden möchten, müssen Sie ein
SMTP_SSL
Objekt erstellen :quelle
Ich stieß auf ein ähnliches Problem und stolperte über diese Frage. Ich habe einen SMTP-Authentifizierungsfehler erhalten, aber mein Benutzername / Pass war korrekt. Hier ist, was es behoben hat. Ich lese das:
https://support.google.com/accounts/answer/6010255
Kurz gesagt, Google erlaubt Ihnen nicht, sich über smtplib anzumelden, da diese Art der Anmeldung als "weniger sicher" gekennzeichnet wurde. Sie müssen also zu diesem Link gehen, während Sie in Ihrem Google-Konto angemeldet sind. und erlauben Sie den Zugriff:
https://www.google.com/settings/security/lesssecureapps
Sobald dies eingestellt ist (siehe meinen Screenshot unten), sollte es funktionieren.
Login funktioniert jetzt:
Antwort nach Änderung:
Antwort vor:
Funktioniert immer noch nicht? Wenn Sie immer noch den SMTPAuthenticationError erhalten, der Code jetzt jedoch 534 lautet, liegt dies daran, dass der Speicherort unbekannt ist. Folgen Sie diesem Link:
https://accounts.google.com/DisplayUnlockCaptcha
Klicken Sie auf Weiter. Dies sollte Ihnen 10 Minuten Zeit geben, um Ihre neue App zu registrieren. Fahren Sie jetzt mit einem weiteren Anmeldeversuch fort und es sollte funktionieren.
UPDATE : Dies scheint nicht sofort zu funktionieren. Möglicherweise stecken Sie eine Weile fest und erhalten diesen Fehler in smptlib:
In der Nachricht heißt es, dass Sie sich mit dem Browser anmelden sollen:
Nachdem Sie "lesssecureapps" aktiviert haben, gehen Sie auf einen Kaffee, kehren Sie zurück und versuchen Sie es erneut mit dem Link "DisplayUnlockCaptcha". Aufgrund der Benutzererfahrung kann es bis zu einer Stunde dauern, bis die Änderung wirksam wird. Versuchen Sie dann erneut, sich anzumelden.
quelle
Bist du mit OOP fertig?
quelle
Das funktioniert
Erstellen Sie ein Google Mail-App-Passwort!
Nachdem Sie das erstellt haben, erstellen Sie eine Datei mit dem Namen
sendgmail.py
Fügen Sie dann diesen Code hinzu :
Wenn Sie also erfolgreich sind, sehen Sie ein Bild wie das folgende:
Ich habe getestet, indem ich eine E-Mail von und an mich selbst gesendet habe.
quelle
Sie finden es hier: http://jayrambhia.com/blog/send-emails-using-python
quelle
Nicht direkt verwandt, aber dennoch erwähnenswert ist, dass mein Paket versucht, das Senden von Google Mail-Nachrichten wirklich schnell und schmerzlos zu machen. Es wird auch versucht, eine Fehlerliste zu führen und sofort auf die Lösung zu verweisen.
Es würde buchstäblich nur diesen Code benötigen, um genau das zu tun, was Sie geschrieben haben:
Oder ein Einzeiler:
Für das Paket / die Installation schauen Sie sich bitte git oder pip an , die sowohl für Python 2 als auch für Python 3 verfügbar sind.
quelle
Hier ist ein Beispiel für eine Google Mail-API. Obwohl komplizierter, ist dies die einzige Methode, die ich gefunden habe und die 2019 funktioniert. Dieses Beispiel wurde genommen und modifiziert von:
https://developers.google.com/gmail/api/guides/sending
Sie müssen ein Projekt mit den API-Schnittstellen von Google über deren Website erstellen. Als Nächstes müssen Sie die GMAIL-API für Ihre App aktivieren. Erstellen Sie Anmeldeinformationen, laden Sie diese Creds herunter und speichern Sie sie als credentials.json.
quelle
Es gibt jetzt eine Google Mail-API, mit der Sie E-Mails senden, E-Mails lesen und Entwürfe über REST erstellen können. Im Gegensatz zu den SMTP-Aufrufen ist es nicht blockierend, was für threadbasierte Webserver, die E-Mails im Anforderungsthread senden (wie Python-Webserver), eine gute Sache sein kann. Die API ist auch ziemlich leistungsfähig.
Die Einrichtung ist am einfachsten, wenn Sie über Administratorrechte für Google Apps für die Domain verfügen, da Sie Ihrem Client dann eine pauschale Berechtigung erteilen können. Andernfalls müssen Sie mit der OAuth-Authentifizierung und -Berechtigung herumspielen.
Hier ist ein Kern, der dies demonstriert:
https://gist.github.com/timrichardson/1154e29174926e462b7a
quelle
tolle Antwort von @David, hier ist für Python 3 ohne den generischen try-außer:
quelle
Aktivieren Sie weniger sichere Apps in Ihrem Google Mail-Konto und verwenden Sie (Python> = 3.6):
quelle
<{gmailUser}>
mit<YourAlias>
.Scheint wie ein Problem der alten
smtplib
. Inpython2.7
allem funktioniert gut.Update : Ja,
server.ehlo()
könnte auch helfen.quelle
quelle
quelle