MIMEMultiparte en Python
-
Módulos
MIMEMultipart
,MIMEText
yMIMEBase
de Python - Script de ejemplo para enviar correos electrónicos con archivos adjuntos 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.
-
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.
-
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.
-
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.
-
Primero, comenzamos el script creando una instancia para
MIMEMultipart
, y lo llamamosmsg
. -
Luego, describimos las direcciones de correo electrónico del remitente y del destinatario. También describimos el asunto en las teclas
From
,To
ySubject
de la instancia que creamos. -
Ahora, necesitamos construir el cuerpo del mensaje que deseamos enviar en una variable llamada
cuerpo
y adjuntar esta variable a la instanciamsg
que creamos anteriormente usando el métodoattach()
. -
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
ysubtype
. Estos definen la clase base para todas nuestras subclases del mensaje compatibles con MIME.Recuerde que el
tipo principal
aquí es el tipo de contenidoprincipal
que consiste principalmente en textos o imágenes, y elsubtipo
es el tipo de contenidomenor
, que generalmente consiste en planos, gifs, audio y/u otros medios. -
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 multipartemsg
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.
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