En este artículo, veremos cómo enviar mensajes de correo electrónico automatizados que implican la entrega de mensajes de texto, fotos esenciales y archivos importantes, entre otras cosas. en Python.
Usaremos dos bibliotecas para esto: email y smtplib , así como el objeto MIMEMultipart. Este objeto tiene múltiples subclases; estas subclases se utilizarán para construir nuestro mensaje de correo electrónico.
- MIMEText: Consiste en texto simple. Este será el cuerpo del correo electrónico.
- MIMEImage: Esto nos permitiría agregar imágenes a nuestros correos electrónicos.
- MIMEAudio: si deseamos agregar archivos de audio, podemos hacerlo fácilmente con la ayuda de esta subclase.
- MIMEApplication: esto se puede usar para agregar cualquier cosa o cualquier otro archivo adjunto.
Implementación paso a paso
Paso 1: importa los siguientes módulos
Python3
from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.mime.application import MIMEApplication from email.mime.multipart import MIMEMultipart import smtplib import os
Paso 2: configuremos una conexión a nuestro servidor de correo electrónico.
- Proporcione la dirección del servidor y el número de puerto para iniciar nuestra conexión SMTP
- Luego usaremos smtp . ehlo para enviar un comando EHLO (Extended Hello).
- Ahora, usaremos smtp . starttls para habilitar el cifrado de seguridad de la capa de transporte ( TLS ).
Python3
smtp = smtplib.SMTP('smtp.gmail.com', 587) smtp.ehlo() smtp.starttls() smtp.login('YourMail@gmail.com', 'Your Password')
Paso 3: Ahora, construye el contenido del mensaje.
- Asigne el objeto MIMEMultipart a la variable msg después de inicializarlo.
- La función MIMEText se utilizará para adjuntar texto.
Python3
msg = MIMEMultipart() msg['Subject'] = subject msg.attach(MIMEText(text))
Paso 4: veamos cómo adjuntar imágenes y varios archivos adjuntos.
Adjuntar imágenes:
- Primero, lea la imagen como datos binarios.
- Adjunte los datos de la imagen a MIMEMultipart usando MIMEImage , agregamos el nombre de archivo dado use os . nombre base
Python3
img_data = open(one_img, 'rb').read() msg.attach(MIMEImage(img_data, name=os.path.basename(one_img)))
Adjuntar varios archivos:
- Lea el archivo adjunto usando MIMEApplication .
- Luego editamos los metadatos del archivo adjunto.
- Finalmente, agregue el archivo adjunto a nuestro objeto de mensaje.
Python3
with open(one_attachment, 'rb') as f: file = MIMEApplication( f.read(), name=os.path.basename(one_attachment) ) file['Content-Disposition'] = f'attachment; \ filename="{os.path.basename(one_attachment)}"' msg.attach(file)
Paso 5: El último paso es enviar el correo electrónico.
- Haga una lista de todos los correos electrónicos que desea enviar.
- Luego, usando la función sendmail , pase parámetros como desde dónde, a dónde y el contenido del mensaje.
- Por último, acaba de salir de la conexión del servidor.
Python3
to = ["klm@gmail.com", "xyz@gmail.com", "abc@gmail.com"] smtp.sendmail(from_addr="Your Login Email", to_addrs=to, msg=msg.as_string()) smtp.quit()
A continuación se muestra la implementación completa:
Python3
# Import the following module from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.mime.application import MIMEApplication from email.mime.multipart import MIMEMultipart import smtplib import os # initialize connection to our # email server, we will use gmail here smtp = smtplib.SMTP('smtp.gmail.com', 587) smtp.ehlo() smtp.starttls() # Login with your email and password smtp.login('Your Email', 'Your Password') # send our email message 'msg' to our boss def message(subject="Python Notification", text="", img=None, attachment=None): # build message contents msg = MIMEMultipart() # Add Subject msg['Subject'] = subject # Add text contents msg.attach(MIMEText(text)) # Check if we have anything # given in the img parameter if img is not None: # Check whether we have the lists of images or not! if type(img) is not list: # if it isn't a list, make it one img = [img] # Now iterate through our list for one_img in img: # read the image binary data img_data = open(one_img, 'rb').read() # Attach the image data to MIMEMultipart # using MIMEImage, we add the given filename use os.basename msg.attach(MIMEImage(img_data, name=os.path.basename(one_img))) # We do the same for # attachments as we did for images if attachment is not None: # Check whether we have the # lists of attachments or not! if type(attachment) is not list: # if it isn't a list, make it one attachment = [attachment] for one_attachment in attachment: with open(one_attachment, 'rb') as f: # Read in the attachment # using MIMEApplication file = MIMEApplication( f.read(), name=os.path.basename(one_attachment) ) file['Content-Disposition'] = f'attachment;\ filename="{os.path.basename(one_attachment)}"' # At last, Add the attachment to our message object msg.attach(file) return msg # Call the message function msg = message("Good!", "Hi there!", r"C:\Users\Dell\Downloads\Garbage\Cartoon.jpg", r"C:\Users\Dell\Desktop\slack.py") # Make a list of emails, where you wanna send mail to = ["ABC@gmail.com", "XYZ@gmail.com", "insaaf@gmail.com"] # Provide some data to the sendmail function! smtp.sendmail(from_addr="hello@gmail.com", to_addrs=to, msg=msg.as_string()) # Finally, don't forget to close the connection smtp.quit()
Producción:
Programar mensajes de correo electrónico
Para programar el correo, haremos uso del paquete de programación en python. Es muy ligero y fácil de usar.
Instalar el módulo
pip install schedule
Ahora mire las diferentes funciones que se definen en un módulo de programación y su uso:
La siguiente función llamará a la función mail cada 2 segundos.
schedule.every(2).seconds.do(mail)
Esto llamará a la función mail cada 10 minutos.
schedule.every(10).minutes.do(mail)
Esto llamará a la función cada hora.
schedule.every().hour.do(mail)
Llamando todos los días a las 10:30 AM.
schedule.every().day.at("10:30").do(mail)
Llamando a un día en particular.
schedule.every().monday.do(mail)
A continuación se muestra la implementación:
Python3
import schedule import time from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.mime.application import MIMEApplication from email.mime.multipart import MIMEMultipart import smtplib import os # send our email message 'msg' to our boss def message(subject="Python Notification", text="", img=None, attachment=None): # build message contents msg = MIMEMultipart() # Add Subject msg['Subject'] = subject # Add text contents msg.attach(MIMEText(text)) # Check if we have anything # given in the img parameter if img is not None: # Check whether we have the # lists of images or not! if type(img) is not list: # if it isn't a list, make it one img = [img] # Now iterate through our list for one_img in img: # read the image binary data img_data = open(one_img, 'rb').read() # Attach the image data to MIMEMultipart # using MIMEImage, # we add the given filename use os.basename msg.attach(MIMEImage(img_data, name=os.path.basename(one_img))) # We do the same for attachments # as we did for images if attachment is not None: # Check whether we have the # lists of attachments or not! if type(attachment) is not list: # if it isn't a list, make it one attachment = [attachment] for one_attachment in attachment: with open(one_attachment, 'rb') as f: # Read in the attachment using MIMEApplication file = MIMEApplication( f.read(), name=os.path.basename(one_attachment) ) file['Content-Disposition'] = f'attachment;\ filename="{os.path.basename(one_attachment)}"' # At last, Add the attachment to our message object msg.attach(file) return msg def mail(): # initialize connection to our email server, # we will use gmail here smtp = smtplib.SMTP('smtp.gmail.com', 587) smtp.ehlo() smtp.starttls() # Login with your email and password smtp.login('Email', 'Password') # Call the message function msg = message("Good!", "Hi there!", r"C:\Users\Dell\Downloads\Garbage\Cartoon.jpg", r"C:\Users\Dell\Desktop\slack.py") # Make a list of emails, where you wanna send mail to = ["ABC@gmail.com", "XYZ@gmail.com", "insaaf@gmail.com"] # Provide some data to the sendmail function! smtp.sendmail(from_addr="hello@gmail.com", to_addrs=to, msg=msg.as_string()) # Finally, don't forget to close the connection smtp.quit() schedule.every(2).seconds.do(mail) schedule.every(10).minutes.do(mail) schedule.every().hour.do(mail) schedule.every().day.at("10:30").do(mail) schedule.every(5).to(10).minutes.do(mail) schedule.every().monday.do(mail) schedule.every().wednesday.at("13:15").do(mail) schedule.every().minute.at(":17").do(mail) while True: schedule.run_pending() time.sleep(1)
Producción:
Publicación traducida automáticamente
Artículo escrito por gittysatyam y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA