Cómo enviar un email usando Python a una cuenta de Gmail. El procedimiento es válido para otros servidores de mail como Outlook, Yahoo, etc.
- Requisitos para script Python de envío de correo electrónico.
- Código fuente Python para envío de correo electrónico Gmail (y otros).
Requisitos para script Python de envío de correo electrónico
El único requisito será tener instalado Python en el equipo (sea Windows, Linux o MacOS). En nuestro caso usaremos como editor y compilador Microsoft Visual Studio Code. En el siguiente artículo explicamos cómo instalar Python y cómo instalar Visual Studio Code:
Usaremos Gmail como servidor de envío de los mails (en nuestro caso), por ello tendremos que configurar nuestra cuenta de Gmail para permitir envío externo de aplicaciones. Esto se hace desde la cuenta de Google, desde «Seguridad», habilitando «Acceso de aplicaciones menos seguras»:
Código fuente Python para envío de correo electrónico Gmail (y otros)
El script Python para envío de correo electrónico será:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText print('Preparando el contenido del correo electrónico...') # Establecemos los datos del mensaje contenidoMensaje = '''Hola, te envió este email desde app Python. Por https://proyectoa.com''' emailEmisor = 'aaa@proyectoa.com' usuarioEmail = 'aaa@proyectoa.com' contrasenaEmail = 'MiContraseña' emailDestinatario = 'bbb@servidoremail.com' asunto = 'Envío de mail desde Python' servidorMail = 'smtp.gmail.com' puertoServidorMail = 587 # Creamos el mensaje mensaje = MIMEMultipart() mensaje["From"] = emailEmisor mensaje["To"] = emailDestinatario mensaje["subject"] = asunto mensaje.attach(MIMEText(contenidoMensaje, 'plain')) print('Conectando con el servidor de correo electrónico...') # Creamos la sesión SMTP para el envío del mail servidorMail = smtplib.SMTP(servidorMail, puertoServidorMail) servidorMail.starttls() # Habilitamos la seguridad (casi todos los servidores requieren de TLS) servidorMail.login(usuarioEmail, contrasenaEmail) print('Enviando el mensaje de correo electrónico...') mensajeTexto = mensaje.as_string() servidorMail.sendmail(emailEmisor, emailDestinatario, mensajeTexto) servidorMail.quit() print('El correo electrónico ha sido enviado desde Python [OK]') |
Guardaremos el código anterior en un fichero llamado, por ejemplo, enviar_mail.py y lo ejecutaremos con:
1 |
C:/Program Files/python.exe" d:/ProyectoA_Python/email/enviar_mail.py |
Suponemos que Python está en la carpeta C:/Program Files y que el fichero con el código Python está en d:/ProyectoA_Python/email.
O bien lo ejecutaremos desde Visual Studio Code con el botón de ejecutar.
Nuestra aplicación Python enviará el mensaje con el texto y asunto al email de destino:
Si todo es correcto, habremos recibido el correo electrónico enviado desde nuestra aplicación Python:
En el caso de Gmail, si no hemos habilitado la opción de permitir acceso a aplicaciones menos seguras (como hemos indicado anteriormente), si intentamos enviar el mail, mostrará el error:
1 2 3 4 5 6 7 8 9 10 11 |
Traceback (most recent call last): File "d:\ProyectoA_Python\email\enviar_mail.py", line 28, in <module> servidorMail.login(usuarioEmail, contrasenaEmail) File "C:\Program Files\lib\smtplib.py", line 734, in login raise last_exception File "C:\Program Files\lib\smtplib.py", line 723, in login (code, resp) = self.auth( File "C:\Program Files\lib\smtplib.py", line 646, in auth raise SMTPAuthenticationError(code, resp) smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8 https://support.google.com/mail/?p=BadCredentials j14-2060wmq.37 - gsmtp') |