Envio de emails con smtplib

Python dispone de un módulo llamado smtplib, que facilita el envío de correos.

Para poder enviar uno, primero debemos de importar el módulo con la ayuda de import.

import smtplib

Lo siguiente que debemos hacer es crear un objeto nuevo instanciando el método SMTP para gestionar la conexión y envío del correo. El método smtp() admite varios parámetros, los mas importantes son el nombre del servidor smtp y el puerto de conexión.

correo = smtplib.smtp('Nombre_servidor_smtp' , puerto)

Tras esto usamos el método login() para validarnos contra el servidor y poder enviar el mensaje. Este método acepta como parámetros el usuario y la contraseña que se usan para el envío de correos.

correo.login('Nombre_usuario','Contraseña')

Ya podemos componer el mensaje que debe contar al menos de una línea con el remitente del mensaje que comience con ‘From:’ , seguido del nombre del remitente y de retorno de carro y nueva línea, otra línea que contenga el asunto y que comience con ‘Subject:’ seguido del texto del asunto y de dos retorno de carro y nueva línea y posteriormente el contenido del cuerpo del mensaje.

Tras esto podemos enviar el correo haciendo uso del método sendmail() al que pasaremos como mínimo los parámetros del remitente, del destinatario y del mensaje. El destinatario también puede ser una lista de strings, si necesitamos enviar el correo a varios destinatarios.

resultado = correo.sendmail('Dirección_correo_remitente','Dirección_correo_destinatario','Mensaje')

Este método devuelve un diccionario, vacío si no se ha producido ningún error de envio y en caso de error contendrá las direcciones de email y el error.

Tras el envío debemos de desconectarnos del servidor usando el método quit().

correo.quit()

Veamos un ejemplo de todo esto, recuerda que para que te funcione debes de configurar tus propios datos y contraseñas ;-).

import smtplib

sFrom = 'remitente@midominio.com'
sPassword = 'MiPassword'
sTo = 'destinatario@midominio.com'
sSMTPServer = 'smtp.midominio.com'
nPuerto = 25

sAsunto = 'Hola mundo'
sCuerpo = '''Cuerpo del mensaje.
Saludos
Yo mismo'''

msg = ("From: %s\r\n" %sFrom)
msg = msg + ('Subject: %s\r\n\r\n' %sAsunto)
msg = msg + sCuerpo

correo = smtplib.SMTP(sSMTPServer,nPuerto)
correo.login(sFrom,sPassword)
resultado = correo.sendmail(sFrom,sTo,msg)
print(resultado)
correo.quit()

Si te ha gustado o te ha sido de utilidad, por favor, deja un comentario en la parte de abajo.

Gracias.

4 comentarios en «Envio de emails con smtplib»

  1. Hola, he estado probando, pero me marca el siguiente error “in login
    raise SMTPNotSupportedError(
    smtplib.SMTPNotSupportedError: SMTP AUTH extension not supported by server.”

    1. Hola Daniel.

      La excepción parece indicar que el servidor de correo no soporta este módulo. Es difícil decir que falla sin ver el código y probarlo.

      Pero de todas formas, prueba el siguiente código que primero conecta por el puerto 25 y luego hace login por el puerto seguro por si fuera esto.
      Tendrás que cambiar las cuentas de correo y contraseña además del puerto 587 por 465 si fuera necesario:


      import smtplib
      remitente = "correo@dominio.com"
      destinatario = "prueba@dominio.com"
      texto = "Esto es una prueba"
      server = smtplib.SMTP('mail.dominio.com', 25)
      server.connect("mail.domino.com",587)
      server.ehlo()
      server.starttls()
      server.ehlo()
      server.login(remitente, "password_correo")
      server.sendmail(remitente, destinatario, texto)
      server.quit()

      Ya me dirás si funciona.

      Saludos
      Manuel

  2. Buenas tardes. En el caso de querer colocar un parametro ingresado por un formulario de html, como seria? El formulario ya esta conectado al parametro email

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *