Enviar un correo electrónico en Python

Enviar un correo electrónico en Python
Enviar un correo electrónico es una de las tareas más comunes que necesito hacer en las aplicaciones web y otros proyectos que creo. Con Python, esto es bastante sencillo y fácil de hacer. Incluso cuando necesitamos hacer uso de algunas plantillas predefinidas, Python nos ayuda a reemplazar los valores de los marcadores de posición con datos reales para que el correo electrónico final se vea elegante y lleno de detalles, lo que hace que mi cliente sea feliz.

En esta lección, compartiré el script que utilizo para enviar correos electrónicos a los usuarios de las aplicaciones que hago y más.

Lo que estaremos haciendo?

Crearemos un programa simple de Python que hará lo siguiente:

  • Use el archivo de plantilla que creamos para el diseño de correo electrónico. Este será solo un archivo basado en texto con valores de marcador de posición.
  • Obtenga el nombre y el correo electrónico de la persona de otro archivo de texto que hacemos.

Estos puntos hacen que este programa sea mucho más cerca de un uso de la vida real de enviar correos electrónicos en sus aplicaciones. Empecemos.

Archivo para correos electrónicos

El archivo que contiene los correos electrónicos para los usuarios se verá así:

Shubham Shubham.có[email protected]

Este es solo un archivo de texto simple que contiene el nombre del usuario y el correo electrónico separados por el espacio. Se han puesto múltiples correos electrónicos con los datos de cada usuario en una nueva línea. Llamamos este archivo usuarios.TXT.

Usando la plantilla

Definamos rápidamente la plantilla que usaremos en nuestro script para reemplazar los valores:

Hola $ Person_name,
Enviamos este correo electrónico con el módulo Python SMTPLIB. Guay, verdad?
Que tengas un día brillante por delante!
Salud

Hemos usado una cadena de plantilla $ Persona_name que será reemplazado por el nombre de la persona que obtenemos de los usuarios.archivo txt mientras envía el correo electrónico.

Obtener datos de usuario del archivo

El primer paso para enviar correos electrónicos a un usuario es identificar dónde queremos enviar los correos electrónicos a. Escribamos una función de Python que aceptará un nombre de archivo y devuelve el nombre de los usuarios de los Estados Unidos y las ID de correo electrónico donde se deben enviar los correos electrónicos:

Def get_users_data (file_name):
user_name = []
user_email = []
con open (file_name, mode = 'r', encoding = 'utf-8') como user_file:
para user_info en user_file:
nombre de usuario.append (user_info.Split () [0])
Usuario_mail.append (user_info.Split () [1])
devolver user_name, user_email

Con esta función, solo devolvemos los nombres y correos electrónicos del usuario que obtenemos el archivo del archivo.

Obtener el objeto de plantilla

Ahora, podemos analizar nuestra plantilla y obtener un objeto de plantilla del archivo de texto que hicimos:

def read_template (file_name):
con open (file_name, 'r', encoding = 'utf-8') como msg_template:
msg_template_content = msg_template.leer()
Plantilla de retorno (msg_template_content)

Con esto, recuperaremos un objeto de plantilla que podemos usar para analizar el contenido del archivo y hacer los reemplazos necesarios para las cadenas de plantilla como el nombre de un usuario.

Cómo se realiza el envío de correo electrónico?

Ahora que estamos listos con el diseño de la plantilla y los datos del usuario, debemos entender cómo se envía un correo electrónico al usuario:

  • Crear conexión SMTP con credenciales de inicio de sesión para la cuenta del remitente
  • Construya un encabezado de varias partes con información con los campos de, a y sujeto
  • Construya el cuerpo del mensaje que debe enviarse
  • Envíe el correo electrónico con el objeto de conexión SMTP

Configuración de la conexión SMTP

Finalmente definamos la función que enviará el correo electrónico a los usuarios designados. Aquí está la función:

Def Main ()::
user_name, user_email = get_users_data ('usuarios.txt ') # leer detalles del usuario
Message_template = read_template ('mensaje.TXT')
# Configure el servidor SMTP
SMTPLIB_SERVER = SMTPLIB.Smtp (host = 'smtp.gmail.com ', puerto = 587)
smtplib_server.starttls ()
smtplib_server.Login (send_from, correo electrónico_pwd)
# Obtenga cada detalle del usuario y envíe el correo electrónico:
Para el nombre, correo electrónico en zip (user_name, user_email):
multipart_message = mimemultipart () # Crear un mensaje
# Agregue el nombre de la persona real a la plantilla de mensaje
msg = message_template.sustituto (persona_name = nombre.título())
# Imprime el cuerpo del mensaje por nuestro bien
Imprimir (MSG)
# Configurar los parámetros del mensaje
multipart_message ['from'] = send_from
multipart_message ['a'] = correo electrónico
multipart_message ['sujeto'] = "Correo electrónico de Linuxhint"
# Agregue el cuerpo del mensaje
multipart_message.Adjuntar (mimetext (msg, 'sencillo'))
# Enviar el mensaje a través de la configuración del servidor anteriormente.
smtplib_server.send_message (multipart_message)
Del multipart_message
# Terminar la sesión SMTP y cerrar la conexión
smtplib_server.abandonar()

En la función anterior, seguimos cada paso que declaramos en la sección anterior. Construimos la conexión SMTP y la usamos para enviar el correo electrónico.

Programa completo

En la sección final, echemos un vistazo al programa completo que se puede usar para enviar el correo electrónico al usuario designado:

Importar SMTPLIB
De la plantilla de importación de cadenas
desde el e-mail.mímica.importación multipart mimemultipart
desde el e-mail.mímica.Mimetexto de importación de texto
Send_from = 'my-email-nere'
Email_pwd = 'my-password-here'
Def get_users_data (file_name):
user_name = []
user_email = []
con open (file_name, mode = 'r', encoding = 'utf-8') como user_file:
para user_info en user_file:
nombre de usuario.append (user_info.Split () [0])
Usuario_mail.append (user_info.Split () [1])
devolver user_name, user_email
def read_template (file_name):
con open (file_name, 'r', encoding = 'utf-8') como msg_template:
msg_template_content = msg_template.leer()
Plantilla de retorno (msg_template_content)
Def Main ()::
user_name, user_email = get_users_data ('usuarios.txt ') # leer detalles del usuario
Message_template = read_template ('mensaje.TXT')
# Configure el servidor SMTP
SMTPLIB_SERVER = SMTPLIB.Smtp (host = 'smtp.gmail.com ', puerto = 587)
smtplib_server.starttls ()
smtplib_server.Login (send_from, correo electrónico_pwd)
# Obtenga cada detalle del usuario y envíe el correo electrónico:
Para el nombre, correo electrónico en zip (user_name, user_email):
multipart_message = mimemultipart () # Crear un mensaje
# Agregue el nombre de la persona real a la plantilla de mensaje
msg = message_template.sustituto (persona_name = nombre.título())
# Imprime el cuerpo del mensaje por nuestro bien
Imprimir (MSG)
# Configurar los parámetros del mensaje
multipart_message ['from'] = send_from
multipart_message ['a'] = correo electrónico
multipart_message ['sujeto'] = "Correo electrónico de Linuxhint"
# Agregue el cuerpo del mensaje
multipart_message.Adjuntar (mimetext (msg, 'sencillo'))
# Enviar el mensaje a través de la configuración del servidor anteriormente.
smtplib_server.send_message (multipart_message)
Del multipart_message
# Terminar la sesión SMTP y cerrar la conexión
smtplib_server.abandonar()
Si __name__ == '__main__':
principal()

Cuando ejecutamos este programa con una ID de Gmail, puede enfrentar un problema como este:

Error de gmail smtp


Esto se debe a que Gmail no permite que los scripts simples usen la API de Gmail. Para esto, es posible que deba deshabilitar el inicio de sesión de seguridad en su cuenta de Gmail. Lea sobre cómo hacer esto para Gmail aquí.

Conclusión

En esta lección, observamos cómo podemos enviar correos electrónicos usando Python's smtplib módulo.