Categorías
Python

Cómo comenzar a usar la API Slack utilizar Python y el frasco

 

Tabla de Contenidos

  • Conseguir StartedOption 1: La creación de una cuenta de Gmail para DevelopmentOption 2: Configuración de un SMTP del servidor local
  • Opción 1: La creación de una cuenta de Gmail para el Desarrollo
  • Opción 2: Configuración de un local del servidor SMTP
  • el envío de un texto plano EmailStarting un SMTP seguro ConnectionSending Su texto sin formato de correo electrónico
  • Iniciar una conexión SMTP seguro
  • Envío de su texto sin formato de correo electrónico
  • envío de archivos adjuntos Fantasía EmailsIncluding HTML ContentAdding Uso del correo electrónico contenido del paquete
  • incluyendo HTML
  • Adición de archivos adjuntos vía el correo electrónico paquete
  • envío de múltiples EmailsMake personalizada de un archivo CSV con relevantes Filas personal InfoLoop Más de enviar Ejemplo múltiple EmailsPersonalized ContentCode
  • hacer un archivo CSV con filas relevante Información Personal
  • bucle sobre para enviar varios correos electrónicos de contenido
  • personalizada
  • Código

  • Ejemplo
  • Y agmail
  • transaccional de correo electrónico Servicios
  • Código SendGrid Ejemplo
  • Conclusión Opción
  • 1: La creación de una cuenta de Gmail para el Desarrollo
  • Opción 2: Configuración de un SMTP del servidor local
  • Iniciar una conexión SMTP seguro
  • Envío de su texto sin formato de correo electrónico contenido
  • incluyendo HTML
  • Adición de archivos adjuntos vía el correo electrónico paquete
  • hacer un archivo CSV con filas relevante Información Personal
  • bucle sobre para enviar varios correos electrónicos de contenido
  • personalizada
  • código de ejemplo

Mira ahora Este tutorial tiene un vídeo relacionado curso creado por el equipo del real Python. Mira que junto con el tutorial escrito para profundizar su comprensión: Envío de correos electrónicos con Python

posible que haya encontrado este tutorial, ya que desea enviar correos electrónicos usando Python. Tal vez usted quiere recibir recordatorios por correo electrónico de su código, envíe un correo electrónico de confirmación a los usuarios cuando crean una cuenta, o enviar correos electrónicos a su organización de miembros para recordarles a pagar sus cuotas. Enviar correos electrónicos de forma manual es un tiempo y es propenso a errores tarea, pero es fácil de automatizar con Python.

En este tutorial usted aprenderá cómo :

  • configurar una conexión segura utilizando SMTP_SSL () y .starttls () de
  • uso de Python biblioteca incorporada smtplib para enviar correos electrónicos básicos
  • enviar correos electrónicos con HTML contenido y archivos adjuntos utilizando el paquete de correo electrónico
  • enviar varios mensajes de correo electrónico personalizados utilizando un archivo CSV con los datos de contacto
  • uso del paquete Yagmail para enviar correo electrónico a través de su cuenta de Gmail usando sólo unas pocas líneas de código

configurar una conexión segura utilizando SMTP_SSL () y .starttls () de

uso de Python biblioteca incorporada smtplib para enviar correos electrónicos básicos enviar correos electrónicos

con contenido HTML y archivos adjuntos utilizando el paquete de correo electrónico

Enviar mensajes de correo electrónico personalizadas múltiples usando un archivo CSV con los datos de contacto

uso del paquete Yagmail para enviar correo electrónico a través de su cuenta de Gmail usando solamente una pocas líneas de código

Usted encontrará algunos servicios de correo electrónico de transacciones al final de este tutorial, que vendrá en útil cuando se desea enviar un gran número de mensajes de correo electrónico. Bono

gratuito: Haga clic aquí para obtener acceso a un capítulo de trucos Python: El libro que te muestra las mejores prácticas de Python con ejemplos sencillos puede aplicar instantáneamente a escribir código más bonito + Pythonic.

Introducción

Python viene con el módulo incorporado smtplib para enviar correos electrónicos utilizando el protocolo de transferencia de correo simple (SMTP). smtplib utiliza el protocolo RFC 821 para SMTP. Los ejemplos de este tutorial se utilizará el servidor SMTP de Gmail para enviar correos electrónicos, pero los mismos principios se aplican a otros servicios de correo electrónico. Aunque la mayoría de los proveedores de correo electrónico utilizan los mismos puertos de conexión como los que en este tutorial, puede ejecutar una rápida búsqueda en Google a la suya confirmar.

Para empezar con este tutorial, configurar una cuenta de Gmail para el desarrollo, o la creación de un servidor SMTP del servidor de depuración que descarta los correos electrónicos que envían y los imprime en el símbolo del sistema en su lugar. Ambas opciones se presentan para usted a continuación. Un servidor SMTP local depuración puede ser útil para fijar cualquier problema con la funcionalidad de correo electrónico y la garantía de sus funciones de correo electrónico son antes de enviar cualquier correo electrónico libre de errores.

Opción 1: La creación de una cuenta de Gmail para el Desarrollo

Si decide utilizar una cuenta de Gmail para enviar mensajes de correo electrónico, le recomiendo la creación de una cuenta de usar y tirar para el desarrollo de su código. Esto se debe a que tendrá que ajustar la configuración de seguridad de su cuenta de Gmail para permitir el acceso desde el código Python, y porque hay una posibilidad de que accidentalmente podría exponer a sus datos de acceso. Además, he encontrado que la bandeja de entrada de mi cuenta de prueba llena rápidamente con mensajes de prueba, lo que es motivo suficiente para configurar una nueva cuenta de Gmail para el desarrollo.

Una característica interesante de Gmail es que se puede utilizar el signo + para añadir ningún modificador a su dirección de correo electrónico, justo antes del símbolo @. Por ejemplo, el correo enviado a my+person1@gmail.com y my+person2@gmail.com será tanto llegar a my@gmail.com. Al probar la funcionalidad de correo electrónico, puede usar esto para emular múltiples direcciones que apuntan a la misma bandeja de entrada.

Para configurar una dirección de Gmail para probar su código, haga lo siguiente:

  • Crear una nueva cuenta de Google.
  • vez permitirá aplicaciones menos seguras a ON. Tenga en cuenta que esto hace que sea más fácil para que otros puedan acceder a su cuenta.

Si no quieren bajar la configuración de seguridad de su cuenta de Gmail, lee la documentación de Google en la forma de obtener las credenciales de acceso para la secuencia de comandos de Python, utilizando el marco de la autorización OAuth2.

Opción 2: Configuración de un servidor SMTP local

Usted puede probar la funcionalidad de correo electrónico mediante la ejecución de un servidor SMTP local depuración, utilizando el módulo smtpd que viene pre-instalado con Python. En lugar de enviar mensajes de correo electrónico a la dirección especificada, se los descarta e imprime su contenido a la consola. El funcionamiento de un dispositivo de servidor de depuración locales no es necesario para hacer frente a la encriptación de los mensajes o las credenciales utiliza para conectarse a un servidor de correo electrónico.

Puede iniciar un servidor local SMTP depuración escribiendo lo siguiente en el símbolo del sistema:

$ python -m smtpd -c DebuggingServer -n localhost:1025

En Linux, utilice el mismo comando precedido por sudo.

Cualquier correo electrónico enviado a través de este servidor se descarta y se muestra en la ventana de terminal como un objeto bytes para cada línea:

---------- MESSAGE FOLLOWS ----------
b'X-Peer: ::1'
b''
b'From: my@address.com'
b'To: your@address.com'
b'Subject: a local test mail'
b''
b'Hello there, here is a test email'
------------ END MESSAGE ------------

Para el resto del tutorial, voy a suponer que usted está utilizando una cuenta de Gmail, pero si está utilizando un servidor de depuración local, sólo asegúrese de usar localhost como servidor SMTP y el puerto 1025 en lugar de usar el puerto 465 o 587. Además de esto, usted no tendrá que utilizar inicio de sesión () o cifrar la comunicación mediante SSL / TLS .

El envío de un correo electrónico de texto sin formato

Antes de profundizar en el envío de mensajes de correo electrónico con contenido HTML y archivos adjuntos, aprenderá a enviar mensajes de correo electrónico de texto sin formato que utilizan Python. Estos son mensajes de correo electrónico que usted podría escribir en un editor de texto simple. No hay cosas de lujo como el formato de texto o hipervínculos. Usted aprenderá que un poco más tarde.

Iniciar una conexión SMTP seguro

Al enviar correos electrónicos a través de Python, usted debe asegurarse de que se encripta su conexión SMTP, para que sus mensajes y de ingreso de credenciales no son de fácil acceso por otros. SSL (Secure Sockets Layer) y TLS (Transport Layer Security) son dos protocolos que se pueden utilizar para cifrar una conexión SMTP. No es necesario el uso de cualquiera de éstos cuando se utiliza un servidor de depuración local.

Hay dos formas de iniciar una conexión segura con el servidor de correo electrónico:

  • iniciar una conexión SMTP que se asegura desde el principio utilizando SMTP_SSL ().
  • Start una conexión SMTP no segura que luego puede ser encriptada usando .starttls ().

En ambos casos, Gmail cifrar mensajes de correo electrónico utilizando TLS, ya que este es el sucesor más segura de SSL. De acuerdo con las consideraciones de seguridad de Python, es muy recomendable que utilice create_default_context () del módulo SSL. Esto cargará certificados de CA de confianza del sistema, permitir la verificación del host nombre y la validación de certificados, y tratar de elegir la configuración del protocolo de cifrado y razonablemente seguras.

Si desea comprobar el cifrado de un correo electrónico en su bandeja de entrada de Gmail, vaya a Más Mostrar original para ver el tipo de cifrado que aparece bajo la cabecera Recibido.

smtplib es de Python módulo incorporado para el envío de mensajes de correo electrónico a cualquier máquina de Internet con un servidor SMTP o ESMTP demonio del oyente.

Te voy a mostrar cómo utilizar SMTP_SSL () en primer lugar, ya que crea la instancia de una conexión que es seguro desde el principio y es un poco más conciso que los .starttls () alternativo. Tenga en cuenta que Gmail requiere que se conecta al puerto 465 si se utiliza SMTP_SSL (), y para el puerto 587 cuando se utiliza .starttls ().

Opción 1: Uso SMTP_SSL ()

ejemplo El código siguiente crea una conexión segura con el servidor SMTP de Gmail, utilizando el SMTP_SSL () de smtplib para iniciar una conexión cifrada-TLS. El contexto predeterminado de SSL valida el nombre de host y sus certificados y optimiza la seguridad de la conexión. Asegúrese de llenar en su propia dirección de correo electrónico en lugar de my@gmail.com:

import smtplib, ssl

port = 465 # For SSL
password = input("Type your password and press enter: ")

# Create a secure SSL context
context = ssl.create_default_context()

with smtplib.SMTP_SSL("smtp.gmail.com", port, context=context) as server:
server.login("my@gmail.com", password)
# TODO: Send email here

Utilización con smtplib.SMTP_SSL () como servidor: se asegura de que la conexión se cierra automáticamente al final del bloque de código con sangría. Si el puerto es cero, o no se especifica, .SMTP_SSL () utilizará el puerto estándar para SMTP sobre SSL (puerto 465).

No es una práctica segura para almacenar su contraseña de correo electrónico en su código, sobre todo si tiene la intención de compartirlo con los demás. En su lugar, utilice la entrada () para permitir que el usuario escriba su contraseña cuando se ejecuta la secuencia de comandos, como en el ejemplo anterior. Si no desea que la contraseña para mostrar en la pantalla cuando se escribe, puede importar el módulo getpass y el uso .getpass () en su lugar para la entrada ciega de su contraseña.

Opción 2: Uso .starttls ()

En lugar de utilizar .SMTP_SSL () para crear una conexión que es seguro desde el principio, podemos crear una conexión SMTP no segura y cifrar usando .starttls ().

Para ello, cree una instancia de smtplib.SMTP, que encapsula una conexión SMTP y permite el acceso a sus métodos. Recomiendo la definición de su servidor SMTP y el puerto al comienzo de la secuencia de comandos para configurar fácilmente.

El siguiente fragmento de código utiliza el servidor de construcción = SMTP (), en lugar del formato con SMTP () como servidor: que utilizamos en el ejemplo anterior. Para asegurarse de que el código no se bloquea cuando algo va mal, ponga su código principal en un bloque try, y sea una impresión de bloque, excepto los mensajes de error a la salida estándar:

import smtplib, ssl

smtp_server = "smtp.gmail.com"
port = 587 # For starttls
sender_email = "my@gmail.com"
password = input("Type your password and press enter: ")

# Create a secure SSL context
context = ssl.create_default_context()

# Try to log in to server and send email
try:
server = smtplib.SMTP(smtp_server,port)
server.ehlo() # Can be omitted
server.starttls(context=context) # Secure the connection
server.ehlo() # Can be omitted
server.login(sender_email, password)
# TODO: Send email here
except Exception as e:
# Print any error messages to stdout
print(e)
finally:
server.quit()

para identificarse ante el servidor, .helo () (SMTP) o .ehlo) (ESMTP) (debe ser llamado después de crear un objeto .SMTP (), y de nuevo después de .starttls (). Esta función se llama implícitamente por .starttls () y .sendmail () si es necesario, así que a menos que desee comprobar las extensiones de servicio SMTP del servidor, no es necesario el uso de .helo () o .ehlo () de forma explícita.

Envío de su correo electrónico de texto sin formato

Después de que usted haya iniciado una conexión segura SMTP utilizando cualquiera de los métodos anteriores, puede enviar su correo electrónico mediante .sendmail (), que más o menos hace lo que dice en la lata:

server.sendmail(sender_email, receiver_email, message)

I recomendar la definición de las direcciones de correo electrónico y el contenido del mensaje en la parte superior de su script, después de que las importaciones, por lo que puede cambiar fácilmente:

sender_email = "my@gmail.com"
receiver_email = "your@gmail.com"
message = """\
Subject: Hi there

This message is sent from Python."""

# Send email here

el mensaje comienza con cuerda «Asunto: Hola» seguido por dos saltos de línea (\ n). Esto asegura Hola aparece como el asunto del correo electrónico, y el texto siguiendo las nuevas líneas serán tratadas como el cuerpo del mensaje.

El ejemplo de código siguiente envía un correo electrónico de texto plano usando SMTP_SSL ():

import smtplib, ssl

port = 465 # For SSL
smtp_server = "smtp.gmail.com"
sender_email = "my@gmail.com" # Enter your address
receiver_email = "your@gmail.com" # Enter receiver address
password = input("Type your password and press enter: ")
message = """\
Subject: Hi there

This message is sent from Python."""

context = ssl.create_default_context()
with smtplib.SMTP_SSL(smtp_server, port, context=context) as server:
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message)

Para la comparación, aquí es un ejemplo de código que envía un correo electrónico de texto sin formato través de una conexión SMTP asegurado con .starttls (). El server.ehlo () líneas se puede omitir, como se les llama implícitamente por .starttls () y .sendmail (), si es necesario:

import smtplib, ssl

port = 587 # For starttls
smtp_server = "smtp.gmail.com"
sender_email = "my@gmail.com"
receiver_email = "your@gmail.com"
password = input("Type your password and press enter:")
message = """\
Subject: Hi there

This message is sent from Python."""

context = ssl.create_default_context()
with smtplib.SMTP(smtp_server, port) as server:
server.ehlo() # Can be omitted
server.starttls(context=context)
server.ehlo() # Can be omitted
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message)

Envío de correos electrónicos de fantasía de

Python integrado en el paquete de correo electrónico le permite estructurar más elegante correos electrónicos, que luego pueden ser transferidos con smtplib como lo han hecho ya. A continuación, usted aprenderá cómo utilizar el paquete de correo electrónico para enviar mensajes de correo electrónico con contenido HTML y archivos adjuntos.

incluyendo HTML contenido

Si desea dar formato al texto en su correo electrónico ( negrita , cursiva , y así sucesivamente), o si desea añadir cualquier imágenes, hipervínculos o contenido sensible, entonces HTML viene en muy útil. la mayoría del tipo común de hoy de correo electrónico MIME es el correo electrónico (Multipurpose Internet Mail Extensiones) de varias partes, la combinación de HTML y texto sin formato. MIME mensajes son manejados por el módulo email.mime de Python. Para una descripción detallada, consulte la documentación.

no como todos los clientes de correo electrónico de visualización de contenido HTML por defecto, y algunas personas eligen sólo para recibir mensajes de correo electrónico en texto plano por razones de seguridad, es importante incluir una alternativa sólo de texto para los mensajes HTML. A medida que el cliente de correo electrónico hará que el último accesorio de varias partes en primer lugar, asegúrese de agregar el mensaje HTML después de la versión de texto sin formato.

En el siguiente ejemplo, nuestros MimeText () objetos contendrán las versiones HTML y texto sin formato de nuestro mensaje, y el MimeMultipart ( «alternativo») de instancia combina estos en un solo mensaje con dos opciones de representación alternativos:

import smtplib, ssl
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

sender_email = "my@gmail.com"
receiver_email = "your@gmail.com"
password = input("Type your password and press enter:")

message = MIMEMultipart("alternative")
message["Subject"] = "multipart test"
message["From"] = sender_email
message["To"] = receiver_email

# Create the plain-text and HTML version of your message
text = """\
Hi,
How are you?
Real Python has many great tutorials:
www.realpython.com"""
html = """\

Hi,
How are you?
Real Python
has many great tutorials.



"""

# Turn these into plain/html MIMEText objects
part1 = MIMEText(text, "plain")
part2 = MIMEText(html, "html")

# Add HTML/plain-text parts to MIMEMultipart message
# The email client will try to render the last part first
message.attach(part1)
message.attach(part2)

# Create secure connection with server and send email
context = ssl.create_default_context()
with smtplib.SMTP_SSL("smtp.gmail.com", 465, context=context) as server:
server.login(sender_email, password)
server.sendmail(
sender_email, receiver_email, message.as_string()
)

En este ejemplo, se define en primer lugar el texto plano y el mensaje HTML como literales de cadena, y luego guardarlas como llanura / html MimeText objetos. Estos pueden ser añadidos en este orden a la MimeMultipart ( «alternativo») y mensajes enviados a través de su conexión segura con el servidor de correo electrónico. Recuerde agregar el mensaje HTML después de la alternativa de texto sin formato, como clientes de correo electrónico a tratar de hacer que el último inciso primero.

Adición de archivos adjuntos de correo electrónico Uso del paquete

Con el fin de enviar archivos binarios a un servidor de correo electrónico que está diseñado para trabajar con datos textuales, que necesita ser codificado antes de su transporte. Esto se realiza con mayor frecuencia base 64, que codifica los datos binarios en caracteres ASCII imprimibles.

El ejemplo de código siguiente muestra cómo enviar un correo electrónico con un archivo PDF como un archivo adjunto: Mensaje de

import email, smtplib, ssl

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

subject = "An email with attachment from Python"
body = "This is an email with attachment sent from Python"
sender_email = "my@gmail.com"
receiver_email = "your@gmail.com"
password = input("Type your password and press enter:")

# Create a multipart message and set headers
message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = subject
message["Bcc"] = receiver_email # Recommended for mass emails

# Add body to email
message.attach(MIMEText(body, "plain"))

filename = "document.pdf" # In same directory as script

# Open PDF file in binary mode
with open(filename, "rb") as attachment:
# Add file as application/octet-stream
# Email client can usually download this automatically as attachment
part = MIMEBase("application", "octet-stream")
part.set_payload(attachment.read())

# Encode file in ASCII characters to send by email
encoders.encode_base64(part)

# Add header as key/value pair to attachment part
part.add_header(
"Content-Disposition",
f"attachment; filename= {filename}",
)

# Add attachment to message and convert message to string
message.attach(part)
text = message.as_string()

# Log in to server using secure context and send email
context = ssl.create_default_context()
with smtplib.SMTP_SSL("smtp.gmail.com", 465, context=context) as server:
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, text)

El MIMEultipart () acepta parámetros en forma de pares clave / valor de estilo RFC5233, que se almacenan en un diccionario y se transmite con el método .add_header de la clase de base de mensaje.

Confirmar la documentación para el módulo email.mime de Python para obtener más información sobre el uso de clases MIME.

envío de múltiples correos electrónicos personalizados

Imagínese que desea enviar correos electrónicos a los miembros de su organización, para recordarles a pagar sus cuotas de contribución. O tal vez usted quiere enviar a sus estudiantes en la clase de correos electrónicos personalizados con los grados de su reciente asignación. Estas tareas son una brisa en Python.

hacer un archivo CSV Con Relevante Información Personal

Un punto de partida fácil para el envío de múltiples mensajes de correo electrónico personalizado es crear un (valores separados por comas) archivo CSV que contiene toda la información personal que se requiere. (Asegúrese de no compartir información privada de otras personas sin su consentimiento.) Un archivo CSV se puede considerar como una simple tabla, donde la primera línea a menudo contiene los encabezados de columna.

A continuación se presentan los contenidos del archivo contacts_file.csv, que me guarda en la misma carpeta que mi código Python. Contiene los nombres, direcciones y grados de un conjunto de personas ficticias. Solía ​​my+modifier@gmail.com construcciones para asegurarse de que todos los correos electrónicos terminan en mi propia bandeja de entrada, que en este ejemplo es my@gmail.com:

name,email,grade
Ron Obvious,my+ovious@gmail.com,B+
Killer Rabbit of Caerbannog,my+rabbit@gmail.com,A
Brian Cohen,my+brian@gmail.com,C

Al crear un archivo CSV, asegúrese de separar sus valores por una coma, sin espacios en blanco de los alrededores. Filas

Loop Más de enviar múltiples correos electrónicos

El ejemplo de código siguiente muestra cómo abrir un archivo CSV y lazo sobre sus líneas de contenido (saltarse la fila de encabezado). Para asegurarse de que el código funciona correctamente antes de enviar mensajes de correo electrónico a todos sus contactos, he impreso El envío de correo electrónico a … para cada contacto, que más tarde puede sustituir con una funcionalidad que realmente envía mensajes de correo electrónico:

import csv

with open("contacts_file.csv") as file:
reader = csv.reader(file)
next(reader) # Skip header row
for name, email, grade in reader:
print(f"Sending email to {name}")
# Send email here

En el ejemplo anteriormente, utilizando con abierta (nombre de archivo) en forma de archivo: se asegura de que sus cierres archivo al final del bloque de código. csv.reader () hace que sea fácil de leer una línea archivo CSV por línea y extraer sus valores. La siguiente línea (lector) se salta la fila de cabecera, de modo que la línea siguiente para el nombre, correo electrónico, de grado en lector: divide filas subsiguientes en cada coma, y ​​almacena los valores resultantes en el nombre de las cadenas, correo electrónico y grado para el contacto actual.

Si los valores en el archivo CSV contiene espacios en blanco en uno o ambos lados, se pueden quitar utilizando el método .strip (). Contenido

personalizada

Puede poner el contenido en un mensaje personalizado mediante el uso de str.format () para rellenar rizado soporte placeholders.For ejemplo, «Hola {Nombre}, {que} consecuencia su asignación» .formato (name = «John», resultado = «pasa») le dará «Hola Juan, que pasó su asignación».

A partir de Python 3.6, el formato de cadenas se puede hacer más elegante usando F-strings, pero eso requiere de los marcadores de posición que se definirán antes de que el propio f-cadena. Con el fin de definir el mensaje de correo electrónico al principio de la secuencia de comandos, y rellenar los marcadores de posición para cada contacto cuando bucle sobre el archivo CSV, se utiliza el método .formato mayores ().

Con esto en mente, usted puede configurar un cuerpo de mensaje en general, con marcadores de posición que se pueden adaptar a los individuos.

Código Ejemplo

El ejemplo siguiente código le permite enviar correos electrónicos personalizados a varios contactos. Se realiza un bucle sobre un archivo CSV con nombre, correo electrónico, grado para cada contacto, como en el ejemplo anterior.

El mensaje general que se define en el principio del script, y para cada contacto en el archivo CSV su {nombre} y {grado} marcadores de posición se rellenan, y un correo electrónico personalizado se envía a través de una conexión segura con el servidor de Gmail , como se vio antes:

import csv, smtplib, ssl

message = """Subject: Your grade

Hi {name}, your grade is {grade}"""
from_address = "my@gmail.com"
password = input("Type your password and press enter: ")

context = ssl.create_default_context()
with smtplib.SMTP_SSL("smtp.gmail.com", 465, context=context) as server:
server.login(from_address, password)
with open("contacts_file.csv") as file:
reader = csv.reader(file)
next(reader) # Skip header row
for name, email, grade in reader:
server.sendmail(
from_address,
email,
message.format(name=name,grade=grade),
)

Yagmail

Hay varias bibliotecas diseñadas para hacer más fácil el envío de correos electrónicos, tales como sobres, Flanker y Yagmail. Yagmail está diseñado para trabajar específicamente con Gmail, y que simplifica enormemente el proceso de envío de correos electrónicos a través de una API de usar, como se puede ver en el ejemplo de código siguiente:

import yagmail

receiver = "your@gmail.com"
body = "Hello there from Yagmail"
filename = "document.pdf"

yag = yagmail.SMTP("my@gmail.com")
yag.send(
to=receiver,
subject="Yagmail test with attachment",
contents=body,
attachments=filename,
)

Este ejemplo de código envía un correo electrónico con un archivo PDF adjunto en una fracción de las líneas necesarias para nuestro ejemplo utilizando el correo electrónico y smtplib.

Al configurar Yagmail, que puede agregar sus validaciones de Gmail para el llavero de su sistema operativo, tal como se describe en la documentación. Si no lo hace, Yagmail le pedirá que introduzca su contraseña cuando sea necesario y almacenarlo en el anillo de claves de forma automática.

transaccional de correo electrónico Servicios

Si va a enviar un gran volumen de correos electrónicos, desea ver información de correo electrónico, y quiere asegurar la entrega fiable, puede ser vale la pena analizar correo electrónico transaccional services.Although todos los siguientes servicios han pagado planes para el envío de grandes volúmenes de correos electrónicos, que también vienen con un plan gratuito para que pueda probarlos. Algunos de estos planes gratuitos son válidos indefinidamente y puede ser suficiente para sus necesidades de correo electrónico.

A continuación se muestra un resumen de los planes gratuitos para algunos de los principales servicios de correo electrónico transaccionales. Al hacer clic en el nombre del proveedor le llevará a la sección de precios de su página web.

Puede ejecutar una búsqueda en Google para ver qué proveedor mejor se adapte a sus necesidades, o simplemente probar algunos de los planes libres para ver qué API te gusta trabajar con la mayoría. Código

SendGrid Ejemplo

Aquí hay un ejemplo de código para el envío de mensajes de correo electrónico con SendGrid para darle una idea de cómo utilizar un servicio de correo electrónico transaccional con Python:

import os
import sendgrid
from sendgrid.helpers.mail import Content, Email, Mail

sg = sendgrid.SendGridAPIClient(
apikey=os.environ.get("SENDGRID_API_KEY")
)
from_email = Email("my@gmail.com")
to_email = Email("your@gmail.com")
subject = "A test email from Sendgrid"
content = Content(
"text/plain", "Here's a test email sent through Python"
)
mail = Mail(from_email, subject, to_email, content)
response = sg.client.mail.send.post(request_body=mail.get())

# The statements below can be included for debugging purposes
print(response.status_code)
print(response.body)
print(response.headers)

Para ejecutar este código, primero debe:

  • Suscríbase a un (gratis) SendGrid cuenta
  • Solicitar una clave de API para la validación de usuario
  • Añadir su clave API mediante la tipificación setx SENDGRID_API_KEY «YOUR_API_KEY» en el símbolo del sistema (para almacenar esta clave de API de forma permanente) o conjunto SENDGRID_API_KEY YOUR_API_KEY para almacenar sólo para el actual sesión de cliente

Más información sobre cómo configurar SendGrid para Mac y Windows se puede encontrar en el README del repositorio en Github.

Conclusión

Ahora puede iniciar una conexión segura SMTP y enviar varios correos electrónicos personalizados a las personas en su lista de contactos!

Usted ha aprendido cómo enviar un correo electrónico HTML con una alternativa de texto sin formato y adjuntar archivos a sus correos electrónicos. El paquete Yagmail simplifica todas estas tareas cuando se está utilizando una cuenta de Gmail. Si va a enviar grandes volúmenes de correo electrónico, es digno de mirar en servicios de correo electrónico transaccionales.

Enjoy que envía mensajes de correo electrónico con Python, y recuerda: no spam, por favor!

Mira ahora Este tutorial tiene un vídeo relacionado curso creado por el equipo del Real Python. Mira que junto con el tutorial escrito para profundizar su comprensión: Envío de correos electrónicos con Python

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *