¿Cómo enviar correos electrónicos a través de Gmail en Python?

Enviar una gran cantidad de correos electrónicos manualmente es una tarea tediosa. Puede utilizar servicios de terceros para enviar los correos electrónicos de forma masiva a la vez.

¿Qué tal si crea su propio script personalizado para enviar correos electrónicos?

¿No es maravilloso?

Sí lo es. Vamos a escribir un script en Python para enviar correos electrónicos.

Python tiene una biblioteca llamada smtplib que se utiliza para enviar correos electrónicos. La biblioteca smtplib se basa en la SMTP (Protocolo simple de transporte de correo). SMTP se utiliza para enviar correos electrónicos a otras personas.

Setup Gmail

Aquí, usaremos Gmail como proveedor de correo electrónico. Google no permite que las secuencias de comandos inicien sesión. Y necesitamos hacer un cambio en la seguridad de nuestra cuenta de Gmail que permita que las secuencias de comandos inicien sesión en nuestra cuenta de Gmail.

Cambiar la opción de seguridad en nuestra cuenta de Gmail no es bueno ya que permite que otros accedan a la cuenta con mucha facilidad. Se recomienda crear una nueva cuenta de Gmail. Ir a la configuración aquí y enciende el Permitir aplicaciones menos seguras: ACTIVADO ajuste.

Si no se siente cómodo activando la configuración anterior, puede usar la API de Google para iniciar sesión en su cuenta de Gmail. Puede encontrar la secuencia de comandos para utilizar las API de Google para la autenticación. aquí.

Steps to Send Mail

Es necesario realizar algunos pasos para enviar un correo utilizando el smtplib Biblioteca. Veamos primero los pasos y luego escribiremos el guión.

#1. Conexión al servidor SMTP

Cada proveedor de servicios tendrá un puerto y un nombre de dominio de servidor SMTP diferente. Tenemos que usar el nombre de dominio del servidor SMTP y el puerto del proveedor de correo electrónico que vamos a usar en el script. El nombre de dominio del servidor SMTP y el puerto de Gmail son Smtp.gmail.com y <em>465</em>.

Usaremos SSL cifrado para la conexión del servidor SMTP, ya que es más seguro que el TSL cifrado. Si desea utilizar el TSL cifrado, luego use el puerto 587 en lugar de 465. El nombre de dominio del servidor SMTP será diferente según el proveedor de servicios de correo electrónico.

El código para conectarse al servidor SMTP

server = smtplib.SMTP_SSL(smtp_server_domain_name, port, context=ssl_context) 

#2. Login

Una vez establecida la conexión con el servidor SMTP, podemos iniciar sesión utilizando la dirección de correo electrónico y la contraseña con el login Método del objeto SMTP. El código tiene el siguiente aspecto.

server.login(sender_email, password)

#3. Enviar correo

Después de iniciar sesión, no hay forma de que podamos esperar para enviar el correo. Envíe el correo usando sendmail el método. Asegúrese de enviar el correo en el siguiente formato.

Asunto: your_subject_for \ newline mail_content

Los espacios no son necesarios. Son solo para aclaraciones en el formato anterior. Veamos el código de muestra.

server.sendmail(sender_mail, email, f"Subject: {subject}\n{content}")

#4. Dejar

No olvide salir del SMTP c

Hemos visto los pasos para enviar correo usando Python. Pero no hemos hablado del código completo. Repasemos rápidamente el código.

import smtplib, ssl  class Mail:      def __init__(self):         self.port = 465         self.smtp_server_domain_name = "smtp.gmail.com"         self.sender_mail = "GMAIL_ADDRESS"         self.password = "SECURE_PASSWORD"      def send(self, emails, subject, content):         ssl_context = ssl.create_default_context()         service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context)         service.login(self.sender_mail, self.password)                  for email in emails:             result = service.sendmail(self.sender_mail, email, f"Subject: {subject}\n{content}")          service.quit()   if __name__ == '__main__':     mails = input("Enter emails: ").split()     subject = input("Enter subject: ")     content = input("Enter content: ")      mail = Mail()     mail.send(mails, subject, content) 

Hemos creado una clase llamada Mail. Y tiene un método llamado envío para enviar los mails. La clase de escritura o simplemente no depende de ti. La clase lo hace más legible. Hemos implementado todos los pasos discutidos anteriormente uno por uno en el envío método.

¡Viva! ha enviado un correo electrónico utilizando la secuencia de comandos de Python.

HTML Content

¿Qué pasa si desea enviar el correo en HTML? ¿Es posible?

Si, Por qué no. Podemos enviar el correo usando HTML la biblioteca llamada email.mime. Es una biblioteca incorporada.

El MÍMICA es un estándar utilizado para extender el formato de los correos electrónicos para admitir programas de aplicación, videos, imágenes, etc.,

Hay dos clases que necesitamos del email.mime módulo. Ellos son MIMEText y MIMEMultipart. Veamos una breve explicación sobre ellos.

#1. Texto MIME

La clase MIMEText se utiliza para escribir el contenido de nuestro correo en HTML. Crearemos una instancia de la clase MIMEText pasando contenido HTML y el tipo de contenido. Vea el código de muestra a continuación.

html_content = MIMEText(html_template, 'html') 

Algunos servicios de correo no admiten la representación HTML. Por lo tanto, es mejor crear dos instancias de la clase MIMEText para texto sin formato y HTML.

#2. MIMEMultiparte

La clase MIMEMultipart se usa para simplificar el formato y la escritura del tema, desde la dirección, a la dirección, etc.Daremos el contenido creado con la clase MIMEText a MIMEMultipart usando el attach método.

Necesitamos asegurarnos de que la instancia de MIMEMultipart se cree con el argumento alternative para representar texto sin formato o HTML. Enviemos un correo con contenido HTML.

import smtplib, ssl from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart   class Mail:      def __init__(self):         ...      def send(self, emails):         ssl_context = ssl.create_default_context()         service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context)         service.login(self.sender_mail, self.password)                  for email in emails:             mail = MIMEMultipart('alternative')             mail['Subject'] = 'Geekflare Celebrations'             mail['From'] = self.sender_mail             mail['To'] = email              text_template = """             Geekflare              Hi {0},             We are delighted announce that our website hits 10 Million views this month.             """             html_template = """             <h1>Geekflare</h1>              <p>Hi {0},</p>             <p>We are delighted announce that our website hits <b>10 Million</b> views last month.</p>             """              html_content = MIMEText(html_template.format(email.split("@")[0]), 'html')             text_content = MIMEText(text_template.format(email.split("@")[0]), 'plain')              mail.attach(text_content)             mail.attach(html_content)              service.sendmail(self.sender_mail, email, mail.as_string())          service.quit()   if __name__ == '__main__':     mails = input("Enter emails: ").split()      mail = Mail()     mail.send(mails) 

También puede agregar una copia oculta usando ese atributo Bcc en la instancia MIMEMultipart.

Adding Attachments

Los archivos adjuntos pueden ser imágenes, pdf, documentos, hojas, etc. Base MIME en el objeto email.mime clase. Se usa para agregar archivos adjuntos al correo.

Agreguemos un archivo adjunto al correo anterior.

import smtplib, ssl from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email import encoders from pathlib import Path   class Mail:      def __init__(self):         ...      def send(self, emails):         ## login...                  for email in emails:             ## MIMEMultipart instance              ## text and html templates              ## MIMEText instances              ## attaching messages to MIMEMultipart              ## attaching an attachment             file_path = "Geekflare-logo.png"             mimeBase = MIMEBase("application", "octet-stream")             with open(file_path, "rb") as file:                 mimeBase.set_payload(file.read())             encoders.encode_base64(mimeBase)             mimeBase.add_header("Content-Disposition", f"attachment; filename={Path(file_path).name}")             mail.attach(mimeBase)              ## sending mail          service.quit()   if __name__ == '__main__':     mails = input("Enter emails: ").split()      mail = Mail()     mail.send(mails) 

Mail to Bulk Mails at Once

Hemos utilizado un bucle para enviar el mismo correo a varios miembros. Ese es un caso (cuando no desea que los receptores sepan sobre otros receptores).

Suponga que tiene que enviar el mismo correo a 1000 miembros a la vez del mismo grupo. En tales casos, el uso de un bucle no será apropiado. Podemos agregar varios correos electrónicos en el A campo en redacción de correo general. ¿Cómo hacerlo en el script de Python?

Necesitamos combinar la lista de correos electrónicos como una cadena separada por un coma y espacio. Podemos usar el únete cadena de método para combinar todos los correos electrónicos como una cadena. Vea el código para combinar correos electrónicos como una cadena.

", ".join(emails)

Vuelva a colocar la campo en el script anterior utilizando la cadena anterior. Eso es todo, ha enviado el correo a correos masivos a la vez.

Conclusión

Hay algunas bibliotecas de terceros para enviar correos electrónicos en Python. Algunos de ellos son Sobres, Yagmail, Flanker, etc., estas librerías nos ayudan a escribir scripts con pocas líneas de código. También puedes explorarlos.

Ahora, puede automatizar su correo electrónico utilizando scripts de Python. La estructura de mandando correos electrónicos será diferente según su caso de uso. Hemos visto diferentes escenarios de envío de correos electrónicos. Puede personalizar fácilmente los scripts discutidos en el tutorial para su caso de uso. He tomado la referencia de este artículo.

Codificación feliz 🙂