domingo, mayo 19, 2024
No menu items!
InicioBlogs¬ŅC√≥mo enviar correos electr√≥nicos a trav√©s de Gmail en Python?

¬Ņ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 correos electrónicos de forma masiva a la vez.

¬ŅQu√© tal si creas tu 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 otros.

Configurar Gmail

Aquí, vamos a utilizar Gmail como proveedor de correo electrónico. Google no permite que los scripts inicien sesión. Y debemos hacer un cambio en la seguridad de nuestra cuenta de Gmail que permita que los scripts 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 muy fácilmente. Se recomienda crear una nueva cuenta de Gmail. Vaya a la configuración aquí y encienda el Permitir aplicaciones menos seguras: ON 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 el script para usar las API de Google para la autenticación aquí.

Pasos para enviar correo

Ciertos pasos deben realizarse para enviar un correo usando el smtplib Biblioteca. Primero veamos los pasos y luego escribiremos el guión.

#1. Conexión al servidor SMTP

Cada proveedor de servicios tendrá un nombre de dominio y un puerto de servidor SMTP diferentes. 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 465.

estaremos usando SSL cifrado para la conexi√≥n del servidor SMTP, ya que es m√°s seguro que el TSL encriptaci√≥n Si desea utilizar el TSL cifrado, luego use el puerto 587 en lugar del 465. El nombre de dominio del servidor SMTP ser√° diferente seg√ļn el proveedor de servicios de correo electr√≥nico.

ūüĒ• Leer:  C√≥mo obtener Pok√©Coins gratis en Pok√©mon Go en iPhone o iPad

El código para conectarse al servidor SMTP

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

#2. Acceso

Una vez que se establece 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 m√©todo del objeto SMTP de inicio de sesi√≥n. El c√≥digo se ve de la siguiente manera.

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 el m√©todo sendmail. Aseg√ļrese de enviar el correo en el siguiente formato.

Asunto: su_asunto_para \newline mail_content

Los espacios no son necesarios. Son solo para aclaración en el formato anterior. Veamos el código de ejemplo.

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 discutido el 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 Correo. Y tiene un método llamado enviar para enviar los correos. Clase de escritura o simplemente no depende de usted. La clase lo hace más legible. Hemos implementado todos los pasos discutidos anteriormente uno por uno en el enviar método.

¬°Viva! ha enviado un correo usando el script de Python.

Contenido HTML

¬ŅQu√© sucede si desea enviar el correo en HTML? ¬ŅEs posible?

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

ūüĒ• Leer:  Este lago en Australia es rosado. Este es el por qu√©

El MIME es un estándar utilizado para extender el formato de los correos electrónicos para soportar programas de aplicación, video, imágenes, etc.,

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

#1. Texto MIME

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

html_content = MIMEText(html_template, 'html')

Algunos servicios de correo no admiten la representación de 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 asunto, desde la dirección hasta la dirección, etc. Daremos el contenido creado con la clase MIMEText a MIMEMultipart usando el método de conexión.

Necesitamos asegurarnos de que la instancia de MIMEMultipart se cree con el argumento alternativo 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 de MIMEMultipart.

Agregar archivos adjuntos

Los archivos adjuntos pueden ser im√°genes, archivos PDF, documentos, hojas, etc. Se llama Base MIME en la clase email.mime. Se utiliza para agregar archivos adjuntos al correo.

ūüĒ• Leer:  C√≥mo escribir un resumen de los resultados de la encuesta (+7 ejemplos)

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)

Correo a correos masivos a la vez

Hemos utilizado un bucle para enviar el mismo correo a varios miembros. Ese es un caso (cuando no desea que los receptores sepan acerca de 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 Para 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 con un coma y espacio. Podemos usar el unirse 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)

Reemplace la Para en el script anterior usando la cadena anterior. Ya est√°, has enviado el correo a correos masivos de una vez.

Conclusión

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

Ahora, puede automatizar sus correos electr√≥nicos usando secuencias de comandos de Python. La estructura de env√≠o de 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 ūüôā

Recomendamos

Populares