Pitón

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 que hacen feliz a mi cliente.

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

Que estaremos haciendo?

Crearemos un programa Python simple que hará lo siguiente:

Estos puntos hacen que este programa se acerque mucho más al uso real del envío de correos electrónicos en sus aplicaciones. Empecemos.

Archivo para correos electrónicos

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

Shubham Shubham.código @ gmail.com

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

Usando la plantilla

Definamos rápidamente también la plantilla que usaremos en nuestro script para reemplazar valores:

Hola, $ PERSON_NAME,
Enviamos este correo electrónico usando el módulo smtplib de Python. Guay, verdad?
Que tengas un buen día por delante!
Salud

Hemos utilizado una cadena de plantilla $ PERSON_NAME que será reemplazado por el nombre de la persona que obtenemos de los usuarios.txt al enviar el correo electrónico.

Obtener datos de usuario del archivo

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

def get_users_data (nombre_archivo):
nombre_usuario = []
user_email = []
con open (file_name, mode = 'r', encoding = 'utf-8') como user_file:
para user_info en user_file:
nombre de usuario.añadir (user_info.dividir () [0])
user_email.añadir (user_info.dividir () [1])
return nombre_usuario, correo_usuario

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

Obtener el objeto de plantilla

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

def read_template (nombre_archivo):
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, obtendremos un objeto Plantilla que podemos usar para analizar el contenido del archivo y hacer los reemplazos necesarios para las cadenas de la 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, necesitamos entender cómo se envía realmente un correo electrónico al usuario:

Configurar la conexión SMTP

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

def principal ():
nombre_usuario, correo_usuario = get_users_data ('usuarios.txt ') # leer detalles del usuario
message_template = read_template ('mensaje.TXT')
# configurar el servidor SMTP
smtplib_server = smtplib.SMTP (host = 'smtp.gmail.com ', puerto = 587)
smtplib_server.starttls ()
smtplib_server.iniciar sesión (SEND_FROM, EMAIL_PWD)
# Obtenga el detalle de cada usuario y envíe el correo electrónico:
para nombre, correo electrónico en zip (nombre_usuario, correo_usuario):
multipart_message = MIMEMultipart () # crea un mensaje
# agregue el nombre real de la persona a la plantilla de mensaje
msg = message_template.sustituto (PERSON_NAME = nombre.título())
# Imprime el cuerpo del mensaje por nuestro bien
imprimir (mensaje)
# configurar los parámetros del mensaje
multipart_message ['De'] = SEND_FROM
multipart_message ['Para'] = correo electrónico
multipart_message ['Asunto'] = "Correo electrónico LinuxHint"
# agregar en el cuerpo del mensaje
multipart_message.adjuntar (MIMEText (msg, 'plano'))
# enviar el mensaje a través del servidor configurado anteriormente.
smtplib_server.enviar_mensaje (mensaje_multiparte)
del multipart_message
# Termine la sesión SMTP y cierre la conexión
smtplib_server.dejar()

En la función anterior, seguimos cada paso que establecimos 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 utilizar para enviar el correo electrónico al usuario designado:

importar smtplib
desde la plantilla de importación de cadenas
desde el e-mail.mímica.importación de varias partes MIMEMultipart
desde el e-mail.mímica.importación de texto MIMEText
SEND_FROM = 'mi-correo-aquí'
EMAIL_PWD = 'mi-contraseña-aquí'
def get_users_data (nombre_archivo):
nombre_usuario = []
user_email = []
con open (file_name, mode = 'r', encoding = 'utf-8') como user_file:
para user_info en user_file:
nombre de usuario.añadir (user_info.dividir () [0])
user_email.añadir (user_info.dividir () [1])
return nombre_usuario, correo_usuario
def read_template (nombre_archivo):
con open (file_name, 'r', encoding = 'utf-8') como msg_template:
msg_template_content = msg_template.leer()
plantilla de retorno (msg_template_content)
def principal ():
nombre_usuario, correo_usuario = get_users_data ('usuarios.txt ') # leer detalles del usuario
message_template = read_template ('mensaje.TXT')
# configurar el servidor SMTP
smtplib_server = smtplib.SMTP (host = 'smtp.gmail.com ', puerto = 587)
smtplib_server.starttls ()
smtplib_server.iniciar sesión (SEND_FROM, EMAIL_PWD)
# Obtenga el detalle de cada usuario y envíe el correo electrónico:
para nombre, correo electrónico en zip (nombre_usuario, correo_usuario):
multipart_message = MIMEMultipart () # crea un mensaje
# agregue el nombre real de la persona a la plantilla de mensaje
msg = message_template.sustituto (PERSON_NAME = nombre.título())
# Imprime el cuerpo del mensaje por nuestro bien
imprimir (mensaje)
# configurar los parámetros del mensaje
multipart_message ['De'] = SEND_FROM
multipart_message ['Para'] = correo electrónico
multipart_message ['Asunto'] = "Correo electrónico LinuxHint"
# agregar en el cuerpo del mensaje
multipart_message.adjuntar (MIMEText (msg, 'plano'))
# enviar el mensaje a través del servidor configurado anteriormente.
smtplib_server.enviar_mensaje (mensaje_multiparte)
del multipart_message
# Termine la sesión SMTP y cierre la conexión
smtplib_server.dejar()
if __name__ == '__main__':
principal()

Cuando ejecutamos este programa con una ID de Gmail, es posible que se enfrente a un problema como este:

Error de SMTP de Gmail


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

Conclusión

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

Vuelva a asignar los botones del mouse de manera diferente para diferentes programas con X-Mouse Button Control
Tal vez necesite una herramienta que pueda hacer que el control de su mouse cambie con cada aplicación que use. Si este es el caso, puede probar una a...
Revisión del mouse inalámbrico Microsoft Sculpt Touch
Recientemente leí sobre el Microsoft Sculpt Touch mouse inalámbrico y decidí comprarlo. Después de usarlo por un tiempo, decidí compartir mi experienc...
Trackpad en pantalla y puntero del mouse AppyMouse para tabletas Windows
Los usuarios de tabletas a menudo pierden el puntero del mouse, especialmente cuando son habituales para usar las computadoras portátiles. Los teléfon...