
Como ejercicio de aprendizaje, recientemente investigué Python 3 para ver cómo podía enviar un montón de correos electrónicos. Puede haber métodos más sencillos para hacer esto en un entorno de producción, pero lo siguiente funcionó bien para mí.
Entonces, aquí hay un escenario: tiene los nombres y las direcciones de correo electrónico de un grupo de contactos. Y desea enviar un mensaje a cada uno de esos contactos, mientras agrega un "Estimado [nombre]" en la parte superior del mensaje.
En aras de la simplicidad, puede almacenar los datos de contacto en un archivo en lugar de una base de datos. También puede almacenar la plantilla del mensaje que desea enviar en un archivo.
El módulo smtplib de Python es básicamente todo lo que necesita para enviar correos electrónicos simples, sin ninguna línea de asunto o información adicional. Pero para los correos electrónicos reales , necesita una línea de asunto y mucha información, tal vez incluso imágenes y archivos adjuntos.
Aquí es donde entra el paquete de correo electrónico de Python. Tenga en cuenta que no es posible enviar un mensaje de correo electrónico utilizando el email
paquete solo. Necesita una combinación de ambos email
y smtplib
.
Asegúrese de consultar la documentación oficial completa para ambos.
Aquí hay cuatro pasos básicos para enviar correos electrónicos usando Python:
- Configure el servidor SMTP e inicie sesión en su cuenta.
- Crear el
MIMEMultipart
objeto de mensaje y cargarlo con las cabeceras apropiadas paraFrom
,To
ySubject
campos. - Agrega el cuerpo de tu mensaje.
- Envíe el mensaje utilizando el objeto del servidor SMTP.
Ahora déjame guiarte por todo el proceso.
Digamos que tiene un archivo de contactos de la mycontacts.txt
siguiente manera:
[email protected] ~ $ cat mycontacts.txt john [email protected] katie [email protected]
Cada línea representa un solo contacto. Tenemos el nombre seguido de la dirección de correo electrónico. Estoy almacenando todo en minúsculas. Dejaré que la lógica de programación convierta los campos a mayúsculas o oraciones si es necesario. Todo eso es bastante fácil en Python.
A continuación, tenemos el archivo de plantilla de mensaje message.txt
.
[email protected] ~ $ cat message.txt Dear ${PERSON_NAME}, This is a test message. Have a great weekend! Yours Truly
¿Note la palabra " ${PERSON_NAME}
"? Esa es una cadena de plantilla en Python. Las cadenas de plantillas se pueden reemplazar fácilmente con otras cadenas; en este ejemplo, ${PERSON_NAME}
se reemplazará con el nombre real de la persona, como verá en breve.
Ahora comencemos con el código Python. Primero, necesitamos leer los contactos del mycontacts.txt
archivo. Bien podríamos generalizar este bit en su propia función.
La función get_contacts()
toma un nombre de archivo como argumento. Abrirá el archivo, leerá cada línea (es decir, cada contacto), lo dividirá en nombre y correo electrónico, y luego los agregará en dos listas separadas. Finalmente, las dos listas se devuelven desde la función.
También necesitamos una función para leer en un archivo de plantilla (como message.txt
) y devolver un Template
objeto creado a partir de su contenido.
Al igual que la función anterior, esta toma un nombre de archivo como argumento.
Para enviar el correo electrónico, debe utilizar SMTP (Protocolo simple de transferencia de correo). Como se mencionó anteriormente, Python proporciona bibliotecas para manejar esta tarea.
En el fragmento de código anterior, está importando smtplib
y luego creando una instancia SMTP que encapsula una conexión SMTP. Toma como parámetro la dirección del host y un número de puerto, los cuales dependen completamente de la configuración SMPT de su proveedor de servicios de correo electrónico en particular. Por ejemplo, en el caso de Outlook, la línea 4 anterior sería en cambio:
s = smtplib.SMTP(host='smtp-mail.outlook.com', port=587)
Debe utilizar la dirección de host y el número de puerto de su proveedor de servicios de correo electrónico en particular para que todo funcione.
MY_ADDRESS
y PASSWORD
arriba hay dos variables que contienen la dirección de correo electrónico completa y la contraseña de la cuenta que va a utilizar.
Ahora sería un buen momento para buscar la información de contacto y las plantillas de mensajes utilizando las funciones que definimos anteriormente.
names, emails = get_contacts('mycontacts.txt') # read contacts message_template = read_template('message.txt')
Ahora, para cada uno de esos contactos, enviemos el correo por separado.
Para cada name
y email
(desde el archivo de contactos), que está creando un objeto MimeMultipart, la creación de la From
, To
, Subject
cabeceras de tipo de contenido como un diccionario de palabras clave, y luego enganchar el cuerpo de mensaje al MIMEMultipart
objeto como texto sin formato. Es posible que desee leer la documentación para obtener más información sobre otros tipos de MIME con los que puede experimentar.
También tenga en cuenta que en la línea 10 anterior, lo estoy reemplazando ${PERSON_NAME}
con el nombre real extraído del archivo de contactos usando el mecanismo de plantillas en Python.
En este ejemplo en particular, estoy eliminando el MIMEMultipart
objeto y lo vuelvo a crear cada vez que recorre el bucle.
Una vez hecho esto, puede enviar el mensaje utilizando la práctica función send_message () del objeto SMTP que creó anteriormente.
Aquí está el código completo:
¡Ahí tienes! Creo que el código ahora es bastante claro.
Siéntase libre de copiarlo y modificarlo según sea necesario.
Además de los documentos oficiales de Python, también me gustaría mencionar este recurso que me ayudó mucho.
Feliz codificación :)
Originalmente publiqué este artículo aquí. Si le gustó este artículo, presione el pequeño corazón a continuación. ¡Gracias!