Wie sende ich eine E-Mail mit Gmail als Provider mit Python?
Ich versuche zum senden von E-Mail (Gmail) mit python, aber ich bin immer 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 die 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()
Kommentar zu dem Problem - Öffnen
Diese Frage sollte nun entsperrt werden, dass google sich in Richtung einer internen API für das senden von Nachrichten über gmail. Diese Bewegung macht all diese Antworten veraltet, und die eine relevante Antwort ist sehr leicht und eigentlich nicht die Lösung des Problems.
InformationsquelleAutor der Frage Mahori | 2012-04-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie sagen
EHLO
vor nur direkt inSTARTTLS
:Auch Sie sollte wirklich zu schaffen
From:
,To:
undSubject:
- message-Header, getrennt vom Nachrichtentext durch eine Leerzeile und verwendenCRLF
als EOL-Marker.E. g.
InformationsquelleAutor der Antwort MattH
wenn Sie möchten, verwenden Sie Port 465 legen Sie eine
SMTP_SSL
Objekt:InformationsquelleAutor der Antwort David Okwii
Ich lief in ein ähnliches problem und bin auf diese Frage. Ich hab eine SMTP-Authentifizierung ein Fehler, aber mein user name /pass korrekt war. Hier ist, was es behoben. Ich lese das so:
https://support.google.com/accounts/answer/6010255
Kurz gesagt, google ist nicht so dass Sie sich über smtplib, weil es gekennzeichnet hat diese Art der Anmeldung als "weniger sicher", also, was Sie tun müssen ist, gehen Sie zu diesem link, während Sie eingeloggt in Ihrem google-Konto und erlauben Sie den Zugriff:
https://www.google.com/settings/security/lesssecureapps
Einmal festgelegt ist (siehe mein screenshot unten), sollte es funktionieren.
Login funktioniert jetzt:
Reaktion nach änderung:
Antwort vor:
Immer noch nicht funktioniert? Wenn Sie immer noch den SMTPAuthenticationError aber jetzt ist der code 534, sein, weil der Speicherort unbekannt ist. Folgen Sie diesem link:
https://accounts.google.com/DisplayUnlockCaptcha
Klicken Sie auf weiter, und dies sollte Ihnen 10 Minuten für die Registrierung Ihrer neuen app. So fortfahren, zu tun, einen anderen login-versuchen Sie jetzt, und es sollte funktionieren.
UPDATE: Diese scheint nicht zu funktionieren sofort, Sie kann geklebt werden, für eine Weile immer diese Fehlermeldung in smptlib:
Die Botschaft sagt, um den browser zu verwenden, melden Sie sich bei:
Nach dem aktivieren von 'lesssecureapps', gehen für einen Kaffee, kommen zurück, und versuchen die "DisplayUnlockCaptcha" - link wieder. Aus user-experience, es kann bis zu einer Stunde für den Wechsel zu kick in. Dann versuchen Sie den Vorgang erneut.
InformationsquelleAutor der Antwort radtek
Finden Sie es hier: http://jayrambhia.com/blog/send-emails-using-python
InformationsquelleAutor der Antwort Froyo
Sie sich mit OOP?
InformationsquelleAutor der Antwort Ricky Wilson
Nicht direkt im Zusammenhang, aber trotzdem erwähnenswert, ist, dass mein Paket versucht, das senden von gmail-Nachrichten wirklich schnell und schmerzlos. Er versucht auch um eine Liste der Fehler und versucht auf die Lösung sofort.
Er würde buchstäblich nur diesen code benötigen, um zu tun genau das, was Sie schrieb:
Oder ein Einzeiler:
Für die Verpackung/installation schauen Sie bitte in git oder pip, sowohl für Python 2 und 3.
InformationsquelleAutor der Antwort PascalVKooten
Super Antwort von @David, hier ist für Python 3, ohne die generische try-except:
InformationsquelleAutor der Antwort juan Isaza
Scheint so, problem der alten
smtplib
. Inpython2.7
funktioniert alles einwandfrei.Update: Yep,
server.ehlo()
auch helfen könnte.InformationsquelleAutor der Antwort mega.venik
Es ist eine gmail API, die jetzt können Sie E-Mails senden, E-Mail Lesen und erstellen Entwürfe über REST.
Im Gegensatz zu den SMTP-Aufrufe, es nicht blockiert werden kann eine gute Sache für die thread-basierte Webserver, senden von E-Mails, die in den Anfrage-thread (wie python-Webserver). Die API ist auch sehr mächtig.
Es ist am einfachsten, setup, wenn Sie über Google Apps administrator-Rechte auf die domain, denn dann können Sie Ihnen die Decke Erlaubnis, Ihre Kunden. Ansonsten musst du mal mit OAuth-Authentifizierung und Berechtigung.
Hier eine Zusammenfassung demonstrieren:
https://gist.github.com/timrichardson/1154e29174926e462b7a
InformationsquelleAutor der Antwort Tim Richardson
InformationsquelleAutor der Antwort Shyam Gupta
InformationsquelleAutor der Antwort Sam Divya Kumar