MIMEMultiparte en Python

Abid Ullah 21 junio 2023
  1. Módulos MIMEMultipart, MIMEText y MIMEBase de Python
  2. Script de ejemplo para enviar correos electrónicos con archivos adjuntos en Python
MIMEMultiparte en Python

Enviar correos electrónicos como aviso o recordatorio o para cualquier otra cosa se ha convertido en una parte vital y habitual de nuestras vidas. Los desarrolladores de software a menudo se encuentran con situaciones durante la fase de desarrollo en las que quieren que el usuario final reciba un correo electrónico a través de su aplicación.

En este artículo, aprenderemos sobre formas eficientes de enviar correos electrónicos con archivos adjuntos con la ayuda de Python y su módulo MIME (Multipurpose Internet Mail Extensions).

Módulos MIMEMultipart, MIMEText y MIMEBase de Python

Al igual que smtplib en Python, los módulos MIME ofrecen herramientas avanzadas para ayudar a que el proceso de envío y recepción de correos electrónicos sea más fácil y mejorado.

Mientras que el módulo smtplib nos permite enviar correos electrónicos sin archivos adjuntos, los módulos MIME se utilizan cuando tenemos que enviar correos electrónicos con archivos adjuntos.

Los tres módulos de MIME tienen propósitos variados y únicos, cada uno de los cuales le permite mejorar nuestra experiencia de enviar un correo electrónico a través de un script de Python.

  1. MIMEMultiparte

    Este módulo se usa cuando queremos construir un mensaje con diferentes tipos de contenido. Esto significa que MIMEMultipart admite el uso de muchos tipos de contenido.

    Por ejemplo, texto/HTML y aplicación/flujo de octetos. También podemos tener tanto HTML como una imagen dentro del HTML con la ayuda de multipart.

  2. Texto MIME

    Esto se utiliza para enviar correos electrónicos basados en texto. Este módulo nos permite escribir y enviar un correo electrónico completo basado en texto fácilmente.

  3. Base MIME

    El módulo MIMEBase solo se usa como una clase base para que podamos tener subclases más específicas y ‘conscientes de MIME’.

Script de ejemplo para enviar correos electrónicos con archivos adjuntos en Python

Si bien uno puede pensar que escribir un script de Python para enviar correos electrónicos con archivos adjuntos puede ser bastante complicado en comparación con uno sin ellos, los módulos MIME hacen que todo el proceso sea bastante sencillo.

Necesitamos seguir estos pasos para enviar un correo electrónico con un archivo adjunto.

Agregar un archivo adjunto requiere que importemos las siguientes bibliotecas de Python.

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders

Estas bibliotecas hacen que la tarea en cuestión sea bastante simple. Afortunadamente, estas son bibliotecas nativas y funcionan bien, por lo que no necesitamos importar bibliotecas externas para agregar un archivo adjunto.

  1. Primero, comenzamos el script creando una instancia para MIMEMultipart, y lo llamamos msg.

  2. Luego, describimos las direcciones de correo electrónico del remitente y del destinatario. También describimos el asunto en las teclas From, To y Subject de la instancia que creamos.

  3. Ahora, necesitamos construir el cuerpo del mensaje que deseamos enviar en una variable llamada cuerpo y adjuntar esta variable a la instancia msg que creamos anteriormente usando el método attach().

  4. Ahora viene la parte divertida, donde abrimos el archivo que queremos adjuntar. Abrimos este archivo en el modo rb.

    A continuación, creamos una instancia de MIMEBase con dos parámetros: maintype y subtype. Estos definen la clase base para todas nuestras subclases del mensaje compatibles con MIME.

    Recuerde que el tipo principal aquí es el tipo de contenido principal que consiste principalmente en textos o imágenes, y el subtipo es el tipo de contenido menor, que generalmente consiste en planos, gifs, audio y/u otros medios.

  5. Ahora, usamos set_payload para cambiar nuestra carga útil a una forma codificada. Lo codificamos en base 64 y adjuntamos este archivo a la instancia multiparte msg que creamos anteriormente.

Aquí hay una secuencia de comandos de Python para ayudarnos a visualizar y comprender el uso de los módulos MIME.

Código de ejemplo:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders

fromaddr = "EMAIL address of the sender"
toaddr = "EMAIL address of the receiver"
# instance of MIMEMultipart
msg = MIMEMultipart()
# storing the sender's email address
msg["From"] = fromaddr
# storing the receiver's email address
msg["To"] = toaddr
# storing the subject
msg["Subject"] = "Subject of the Mail"
# The string to store the body of the mail
body = "Body_of_the_mail"
# attach the body with the msg instance
msg.attach(MIMEText(body, "plain"))
# open the file to be sent
filename = "File_name_with_extension"
attachment = open("Path of the file", "rb")
# The instance of MIMEBase and named as p
p = MIMEBase("application", "octet-stream")
# To change the payload into encoded form
p.set_payload((attachment).read())
# encode into base64
encoders.encode_base64(p)
p.add_header("Content-Disposition", "attachment; filename= %s" % filename)
# attach the instance 'p' to instance 'msg'
msg.attach(p)
# creates SMTP session
s = smtplib.SMTP("smtp.gmail.com", 587)
# start TLS for security
s.starttls()
# Authentication
s.login(fromaddr, "Password_of_the_sender")
# Converts the Multipart msg into a string
text = msg.as_string()
# sending the mail
s.sendmail(fromaddr, toaddr, text)
# terminating the session
s.quit()

Este es un script razonablemente sencillo para enviar un correo electrónico a una persona. Si deseamos enviar este correo electrónico a varias personas, podemos usar bucles para lograrlo.

Otra cosa importante a tener en cuenta aquí es que este script no funcionará si tenemos habilitada la autenticación en dos pasos en nuestras cuentas de correo electrónico. Para que esto funcione, debemos desactivar la verificación en dos pasos.

Enviar un correo electrónico de esta manera también garantiza que el correo electrónico llegue directamente a la bandeja de entrada del usuario y nunca a la carpeta de correo no deseado.

Si bien esta función puede ser mal utilizada, sabemos que puede ser útil para las empresas que requieren urgencia y no tienen lugar para demoras debido a la pérdida de un correo electrónico.

Hemos aprendido todo lo que hay que saber sobre el envío de un correo electrónico simple con un archivo adjunto usando Python y sus bibliotecas MIME nativas.

Autor: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn