J'essaie d'envoyer des e-mails (Gmail) à l'aide de python, mais j'obtiens l'erreur suivante.
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.
Le script Python est le suivant.
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()
Réponses:
Vous devez dire
EHLO
avant de vous lancer directement dansSTARTTLS
:Vous devez également créer des
From:
enTo:
-Subject:
têtes de message, séparés du corps du message par une ligne vierge et les utiliserCRLF
comme marqueurs EOL.Par exemple
la source
EHLO
par faute de frappe. Après avoir essayé HELO plusieurs fois, la réponse a été différente. Il a fallu des heures pour comprendre qu'EHLO est en fait une commande que SMTP comprend et j'ai fait la faute de frappe.si vous souhaitez utiliser le port 465, vous devez créer un
SMTP_SSL
objet:la source
J'ai rencontré un problème similaire et suis tombé sur cette question. J'ai obtenu une erreur d'authentification SMTP mais mon nom d'utilisateur / mot de passe était correct. Voici ce qui l'a corrigé. J'ai lu ceci:
https://support.google.com/accounts/answer/6010255
En un mot, Google ne vous permet pas de vous connecter via smtplib car il a marqué ce type de connexion comme "moins sécurisé", donc ce que vous avez à faire est d'aller sur ce lien pendant que vous êtes connecté à votre compte Google, et permettre l'accès:
https://www.google.com/settings/security/lesssecureapps
Une fois cela réglé (voir ma capture d'écran ci-dessous), cela devrait fonctionner.
La connexion fonctionne maintenant:
Réponse après changement:
Réponse préalable:
Ne fonctionne toujours pas? Si vous obtenez toujours le SMTPAuthenticationError mais que maintenant le code est 534, c'est parce que l'emplacement est inconnu. Suivez ce lien:
https://accounts.google.com/DisplayUnlockCaptcha
Cliquez sur Continuer et cela devrait vous donner 10 minutes pour enregistrer votre nouvelle application. Continuez donc à faire une autre tentative de connexion maintenant et cela devrait fonctionner.
MISE À JOUR : Cela ne semble pas fonctionner tout de suite, vous pouvez être bloqué pendant un certain temps en obtenant cette erreur dans smptlib:
Le message indique d'utiliser le navigateur pour se connecter:
Après avoir activé 'lesssecureapps', allez prendre un café, revenez et essayez à nouveau le lien 'DisplayUnlockCaptcha'. D'après l'expérience utilisateur, le changement peut prendre jusqu'à une heure. Puis essayez à nouveau de vous connecter.
la source
Vous en bas avec OOP?
la source
Cela marche
Créez le mot de passe de l'application Gmail!
Après avoir créé cela, créez un fichier appelé
sendgmail.py
Ajoutez ensuite ce code :
Donc, si vous réussissez, vous verrez une image comme celle-ci:
J'ai testé en envoyant un e-mail depuis et vers moi-même.
la source
Vous pouvez le trouver ici: http://jayrambhia.com/blog/send-emails-using-python
la source
Ce n'est pas directement lié, mais il vaut la peine de le souligner, mon paquet essaie de rendre l'envoi de messages gmail très rapide et indolore. Il essaie également de maintenir une liste d'erreurs et essaie de pointer vers la solution immédiatement.
Il n'aurait besoin que de ce code pour faire exactement ce que vous avez écrit:
Ou une doublure:
Pour le package / l'installation, veuillez consulter git ou pip , disponible pour Python 2 et 3.
la source
Voici un exemple d'API Gmail. Bien que plus compliqué, c'est la seule méthode que j'ai trouvée qui fonctionne en 2019. Cet exemple a été pris et modifié à partir de:
https://developers.google.com/gmail/api/guides/sending
Vous devrez créer un projet avec les interfaces API de Google via leur site Web. Vous devrez ensuite activer l'API GMAIL pour votre application. Créez des informations d'identification, puis téléchargez ces informations d'identification, enregistrez-les sous credentials.json.
la source
Il existe maintenant une API gmail, qui vous permet d'envoyer des e-mails, de lire des e-mails et de créer des brouillons via REST. Contrairement aux appels SMTP, il est non bloquant, ce qui peut être une bonne chose pour les serveurs Web basés sur des threads qui envoient des e-mails dans le thread de demande (comme les serveurs Web Python). L'API est également assez puissante.
Il est plus facile à configurer si vous avez des droits d'administrateur Google Apps sur le domaine, car vous pouvez alors accorder une autorisation générale à votre client. Sinon, vous devez jouer avec l'authentification et l'autorisation OAuth.
Voici un résumé qui le démontre:
https://gist.github.com/timrichardson/1154e29174926e462b7a
la source
excellente réponse de @David, voici pour Python 3 sans le try-except générique:
la source
Activez des applications moins sécurisées sur votre compte Gmail et utilisez (Python> = 3.6):
la source
<{gmailUser}>
par<YourAlias>
.Semble comme un problème de l'ancien
smtplib
. Danspython2.7
tout fonctionne bien.Mise à jour : Oui,
server.ehlo()
pourrait également aider.la source
la source
la source