Estoy tratando de enviar un correo electrónico (Gmail) usando Python, pero recibo el siguiente error.
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.
El script de Python es el siguiente.
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()
Respuestas:
Tienes que decir
EHLO
antes de simplemente correr directamente aSTARTTLS
:También debe crear realmente
From:
,To:
ySubject:
encabezados de los mensajes, separada del cuerpo del mensaje por una línea en blanco y el usoCRLF
como marca EOL.P.ej
fuente
EHLO
por error tipográfico. Después probé HELO muchas veces, pero la respuesta fue diferente. Me llevó horas descubrir que EHLO es en realidad un comando que SMTP entiende y que hice el error tipográfico.si desea usar el puerto 465, debe crear un
SMTP_SSL
objeto:fuente
Me encontré con un problema similar y me topé con esta pregunta. Recibí un error de autenticación SMTP pero mi nombre de usuario / contraseña era correcta. Esto es lo que lo arregló. Leo esto:
https://support.google.com/accounts/answer/6010255
En pocas palabras, google no le permite iniciar sesión a través de smtplib porque ha marcado este tipo de inicio de sesión como "menos seguro", por lo que lo que debe hacer es ir a este enlace mientras está conectado a su cuenta de google, y permitir el acceso:
https://www.google.com/settings/security/lesssecureapps
Una vez que esté configurado (vea mi captura de pantalla a continuación), debería funcionar.
Iniciar sesión ahora funciona:
Respuesta después del cambio:
Respuesta previa:
¿Sigue sin funcionar? Si aún obtiene el SMTPAuthenticationError pero ahora el código es 534, es porque la ubicación es desconocida. Siga este enlace:
https://accounts.google.com/DisplayUnlockCaptcha
Haga clic en continuar y esto le dará 10 minutos para registrar su nueva aplicación. Así que proceda a hacer otro intento de inicio de sesión ahora y debería funcionar.
ACTUALIZACIÓN : Esto no parece funcionar de inmediato, puede estar atascado por un tiempo al obtener este error en smptlib:
El mensaje dice que use el navegador para iniciar sesión:
Después de habilitar 'lesssecureapps', vaya a tomar un café, regrese e intente nuevamente el enlace 'DisplayUnlockCaptcha'. Según la experiencia del usuario, el cambio puede tardar hasta una hora en iniciarse. Luego, intente el proceso de inicio de sesión nuevamente.
fuente
¿Estás abajo con OOP?
fuente
Esto funciona
¡Crea la contraseña de la aplicación de Gmail!
Después de crear eso, cree un archivo llamado
sendgmail.py
Luego agregue este código :
Entonces, si tiene éxito, verá una imagen como esta:
Lo probé enviando un correo electrónico desde y hacia mí.
fuente
Puede encontrarlo aquí: http://jayrambhia.com/blog/send-emails-using-python
fuente
No está directamente relacionado, pero aún vale la pena señalar que mi paquete intenta hacer que el envío de mensajes de Gmail sea realmente rápido e indoloro. También intenta mantener una lista de errores e intenta señalar la solución de inmediato.
Literalmente, solo necesitaría este código para hacer exactamente lo que escribió:
O un trazador de líneas:
Para el paquete / instalación, consulte git o pip , disponible para Python 2 y 3.
fuente
Aquí hay un ejemplo de API de Gmail. Aunque es más complicado, este es el único método que encontré que funciona en 2019. Este ejemplo fue tomado y modificado de:
https://developers.google.com/gmail/api/guides/sending
Deberá crear un proyecto con las interfaces API de Google a través de su sitio web. A continuación, deberá habilitar la API de GMAIL para su aplicación. Cree credenciales y luego descargue esos créditos, guárdelos como credentials.json.
fuente
Ahora hay una API de gmail, que le permite enviar correos electrónicos, leer correos electrónicos y crear borradores a través de REST. A diferencia de las llamadas SMTP, no es de bloqueo, lo que puede ser algo bueno para los servidores web basados en hilos que envían correo electrónico en el hilo de solicitud (como los servidores web python). La API también es bastante poderosa.
Es más fácil de configurar si tiene derechos de administrador de Google Apps en el dominio, porque entonces puede otorgar un permiso general a su cliente. De lo contrario, debe jugar con la autenticación y el permiso de OAuth.
Aquí hay una esencia que lo demuestra:
https://gist.github.com/timrichardson/1154e29174926e462b7a
fuente
gran respuesta de @David, aquí está para Python 3 sin el genérico try-except:
fuente
Habilite aplicaciones menos seguras en su cuenta de gmail y use (Python> = 3.6):
fuente
<{gmailUser}>
con<YourAlias>
.Parece un problema de lo viejo
smtplib
. Enpython2.7
todo funciona bien.Actualización : Sí,
server.ehlo()
también podría ayudar.fuente
fuente
fuente