Enviar correos electrónicos con Python

Enviar correos electrónicos con Python
Enviar, verificar y responder a correos electrónicos es una tarea que lleva mucho tiempo, especialmente cuando lo está haciendo para un gran número de personas o clientes donde solo tiene que cambiar el nombre, la dirección, la edad y otras cosas pequeñas del destinatario. Sería una tarea muy difícil para usted escribir un programa que pueda manejar todo tipo de correos electrónicos personales/comerciales, pero aún puede automatizar muchas cosas a este respecto, lo que eventualmente le ahorrará mucho tiempo.

Por ejemplo, desea enviar un recordatorio a sus clientes para sus facturas restantes y tiene todos los datos relacionados con el cliente como sus números de teléfono, dirección, edad, etc. en una hoja de Excel o una base de datos, en lugar de hacerlo manualmente, puede escribir un Programa simple en Python para hacerlo automáticamente por usted. En este tutorial, aprenderemos cómo funciona el protocolo de correo electrónico y cómo puede automatizar el proceso para ahorrar su precioso tiempo.

Una palabra sobre SMTP

El protocolo de transferencia de correo simple (SMTP) es computarizado equivalente a su servicio postal. Es un protocolo que funciona en la capa de aplicación de una red TCP/IP. Es un protocolo estándar para enviar y recibir correos electrónicos a través de Internet. El proceso de transferencia de correo consta de servidores de correo electrónico y clientes que se envían y reciben correos electrónicos entre sí.

Por ejemplo, tiene una cuenta de Gmail y desea enviar un correo electrónico a su amigo en su cuenta de Yahoo. Usted escribe un correo electrónico y presiona enviar, pero el proceso de backend es un poco complicado y para comprender este proceso, primero tendrá que entender SMTP. Su cliente de correo electrónico SMTP primero envía Helo (o Ehlo) Para el servidor de Gmail, puede decir que este comando o encabezado es equivalente a Anfitrión encabezado en el protocolo HTTP y se utiliza para identificar el servidor usando el nombre de dominio. Después de Helo o Ehlo, el cliente se autentica al servidor con el nombre de usuario y la contraseña dados usando Auténtico dominio. Luego especifica la dirección de correo electrónico del remitente y el destinatario y luego el cuerpo del mensaje y envía correo electrónico al servidor Gmail. Gmail Server confirmará primero que si la dirección de correo electrónico del destinatario en Yahoo existe o no, entonces enviará el correo electrónico al servidor Yahoo donde el destinatario puede recuperar sus correos electrónicos de.

Smtplib

SMTPLIB es una biblioteca de Python que se puede usar como cliente SMTP como su Gmail, Yahoo, Thunderbird o cualquier otro cliente de correo electrónico y se puede usar para enviar correos electrónicos. Podemos realizar todas las tareas utilizando el cliente SMTPLIB que podemos hacer con aquellos que tienen una interfaz gráfica de usuario.

Viene de forma predeterminada en Python, en caso de que no lo tenga, entonces puede instalar usando el siguiente comando.

Ubuntu@ubuntu: ~ $ Pip install Smtplib

O en python3

Ubuntu@ubuntu: ~ $ Pip install Smtplib

Escribir su primer correo electrónico con Python

En este tutorial, usaré una cuenta de Gmail como remitente, también haré uso de la consola Python, por lo que será más fácil para mí explicar cada línea de código paso a paso. Para comenzar, necesitamos permitir que nuestro acceso a Gmail a aplicaciones menos seguras.

Así que inicie sesión en su cuenta de Gmail y luego vaya a la configuración de la cuenta.

Ahora asegúrese de que el acceso para aplicaciones menos seguras esté activada.

Ahora abra su consola Python y comience a escribir su primer correo electrónico con Python

ubuntu@ubuntu: ~ $ python
Python 2.7.16 (predeterminado, 7 de octubre de 2019, 17:36:04)
[GCC 8.3.0] en Linux2

Escriba "ayuda", "copyright", "créditos" o "licencia" para obtener más información.

// Importar la biblioteca SMTP
>>> Importar SMTPLIB
// conectarse al servidor Gmail con nombre de dominio y número de puerto (esta configuración difiere para
Cada proveedor de correo electrónico, eche un vistazo a la tabla que se proporciona a continuación)
>>> mailobj = smtplib.SMTP ('SMTP.gmail.com ', 587)
// saluda al servidor
>>> mailobj.ehlo ()
(250, 'SMTP.gmail.com en su servicio, [103.255.4.246] \ nsize35882577 \ n8bitmime \ nstarttls \
nenhancedstatuscodes \ npipelining \ nchunking \ nsmtputf8 ')
// Puerto 587 significa que estamos utilizando la conexión TLS cifrada, así que comience a TLS cifrado
comunicación usando starttls (), para que nuestras credenciales y mensajes no sean olfates
>>> mailobj.starttls ()
(220, '2.0.0 listo para iniciar TLS ')
// Inicie sesión en su cuenta de Gmail utilizando correo electrónico y contraseña
>>> mailobj.Iniciar sesión ('[email protected] ',' s3cr3t_p4ssw0rd ')
(235, '2.7.0 aceptado ')
// especificar la dirección de correo electrónico del remitente y el destinatario y el contenido de correo electrónico
>>> mailobj.sendmail ('[email protected] ',' [email protected] ',' sujeto:
Hola Mundo! \ n hola mundo! Este es mi primer correo electrónico de Hello World en Python ')

// Cierre la conexión al servidor Gmail
>>> mailobj.abandonar()
(221, '2.0.0 Conexión de cierre B6SM4519863LFI.72 - GSMTP ')

En el programa de muestra anterior, reemplace el contenido dado con su propio. Si no es un usuario de Gmail, puede usar el servidor de correo electrónico de su proveedor. Aquí está la lista de nombres de dominio y puertos de algunos proveedores de correo común.

Nombre Nombre de dominio del servidor Puerto
Gmail smtp.gmail.comunicarse 587
Outlook / hotmail correo electrónico.panorama.comunicarse 587
Correo de yahoo smtp.correo.yahoo.comunicarse 587
Verizon smtp.Verizon.neto 465
Comcast smtp.comcast.neto 587

Algunas palabras sobre IMAP

Así que acabamos de estudiar que SMTP se usa para enviar correos electrónicos, pero para qué es IMAP (protocolo de mensajería de acceso a Internet) para? No se puede usar SMTP para buscar y obtener correos electrónicos del protocolo del servidor, IMAP o POP3 para ese propósito.

Imapclient, imaplib y pyzmail

Hay dos bibliotecas principales en Python que se pueden usar como un cliente IMAP para encontrar, recuperar y eliminar correos electrónicos del servidor de correo. Python tiene predeterminado imaplib biblioteca pero otra biblioteca externa imapclient es más efectivo y fácil de usar. En este tutorial usaremos imapclient Para recuperar correos electrónicos del servidor de correo.

El problema con imapclient es que recupera correos electrónicos del servidor de correo en formato sin procesar. Entonces, necesitaremos pyzmail Biblioteca como analizador para la salida fácil de usar. Para instalar ambas bibliotecas, escriba

ubuntu@ubuntu: ~ $ sudo pip install imapclient
ubuntu@ubuntu: ~ $ sudo pip install pyzmail

Obtener sus correos electrónicos del servidor de correo

Ahora, aprenderemos a buscar y descargar el correo electrónico del servidor de correo utilizando imapclient. Usaremos imapclient para buscar y descargar correos electrónicos desde el servidor, luego usaremos Pyzmail para analizar este contenido sin procesar. Vamos

// Importar biblioteca imapclient
>>> Importar imapclient
// conectarse al servidor IMAP de Gmail
>>> obj = imapclient.Imapclient ('imap.gmail.com ', ssl = verdadero)
// Inicie sesión en su cuenta de correo electrónico utilizando sus credenciales
>>> obj.Iniciar sesión ('[email protected] ',' s3cr4tp4ss ')
'[email protected] autenticado (éxito) '
// Seleccione la carpeta de mensajes para leer I.bandeja de entrada, borradores, enviados correos
>>> obj.select_folder ('Inbox', readonly = true)
'Existe': 830, 'PermanentFlags': (), 'HighestModseq': 112999, 'uidNext': 931,
'Flags': ('\\ respondió', '\\ marcado', '\\ draft', '\\ eliminado', '\\ visto',
'$ Nofishing', '$ phishing'), 'uidValidity': 1, 'solo lectura': ["], 'reciente': 0
// Busque sus mensajes en su bandeja de entrada, o aplique un filtro, el siguiente filtro se mostrará
Usted los correos recibidos después del 25 de octubre de 2019
>>> mail_ids = obj.búsqueda (['desde', '25 -oct-2019 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// La lista "mail_ids" contiene una lista de identificaciones de correo electrónico recibidas desde el 25 de octubre-2019,
Puede descargar un correo electrónico utilizando la función de Fetch iMapclient.
>>> raw_mail = obj.Fetch ([919], ['Body []', 'Flags'])
// Ahora, el contenido en variable RAW_mail está en formato sin procesar, no se puede mostrar en el
pantalla directamente, por lo que necesitaríamos un analizador para analizar este contenido para una salida fácil de usar
>>> importar pyzmail
>>> Mensaje = Pyzmail.Pyzmessage.Factory (raw_mail [919] ['cuerpo []'])
// Ahora el correo electrónico se analiza y se almacena en la variable de mensaje, para obtener el tema de
el correo electrónico, use la función get_subject
>>> mensaje.get_subject ()
Usted desorden sus habilidades este Halloween con un 25% de descuento '
// Del mismo modo, puede ver los detalles del remitente
>>> mensaje.get_addresses ('from')
[(U'usama Azad ',' [email protected] ')]
>>> mensaje.get_addresses ('to')
[(U'[email protected] ',' [email protected] ')]
// Para obtener el cuerpo del correo electrónico, escriba
>>> mensaje.text_part.get_payload ().decodificación (mensaje.text_part.charset)
u "hola! Disfrute del 25% en nuestros cursos premium "

Si tiene una cuenta en algún otro proveedor de servicios de correo electrónico que no sea Gmail, puede iniciar sesión en su servidor IMAP. Aquí está la lista de nombres de dominio IMAP de algunos proveedores de correo famosos.

Proveedor Nombre de dominio para el servidor IMAP
Yahoo IMAP.correo.yahoo.comunicarse
Hotmail/Outlook IMAP-correo.panorama.comunicarse
Verizon entrante.Verizon.neto
Comcast IMAP.comcast.neto
AT&T IMAP.correo.atalotes.neto

Eliminar su correo electrónico del servidor IMAP

Similar a buscar y recuperar correos electrónicos del servidor, también puede eliminar correos electrónicos de su servidor de correo utilizando su UID. Solo sigue los pasos dados

// Para eliminar un correo electrónico, debe dirigir solo la lectura a 'falso' para obtener acceso de escritura a su
correos electrónicos
>>> obj.select_folder ('Inbox', readonly = false)
>>> mail_ids = obj.búsqueda (['desde', '25 -oct-2019 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Proporcionar un UID de correo electrónico o una lista de UID de correo electrónico, después de ejecutar el siguiente comando,
Su correo electrónico desaparecerá de la bandeja de entrada.
>>> obj.delete_messages (919)
919: ('\\ VISTE', '\\ eliminado')
// Este comando eliminará permanentemente sus correos electrónicos del servidor de correo
>>> obj.borrar()
('Éxito', [])

https: // techtopz.com/build-a-birthday-reminder-aplication-in-python-on-mac/

Inventando tu propio recordatorio de cumpleaños

Tienes cumpleaños de tus amigos en los próximos meses y quieres desearles en sus cumpleaños. Pero tienes mucho trabajo en tu oficina y existe la posibilidad de que olvides desearles. Entonces, esta tarea se puede realizar automáticamente usando Python. El siguiente es el código para realizar esta tarea.

// Módulos de importación
importar
// El módulo OS se usa para realizar tareas del sistema operativo I.e acceder a direcotorias
importar sistema operativo
Importar DateTetime
Importar SMTPLIB
// Definición de una función que enviará correos electrónicos
Def send_mail (reciever_mail_address, nombre):
Sender_mail_address = "[email protected] "
passwd = "senderpasswd"
// Conectarse al servidor Gmail con nombre de dominio y número de puerto
obj = smtplib.SMTP ('SMTP.gmail.com ', 587)
obj.ehlo ()
obj.starttls ()
// Iniciar sesión en su cuenta de Gmail
obj.Iniciar sesión (Sender_mail_address, Passwd)
// Enviando correo a 'reciever_mail_address'.
obj.sendmail (Sender_mail_address, reciever_mail_address, "Asunto: Cumpleaños deseando correo \ n \ n Happybirthday"+Nombre)
// Conexión final
obj.abandonar()
// Cuerpo principal
// Ir al directorio en el que el archivo que contiene datos está presente
sistema operativo.chdir ("path_to_birthday_data_file")
Mientras que 1:
// Obtener fecha y hora del momento presente
Hoy = DateTime.fecha y hora.hoy()
hoy = str (hoy)
// Obtener año actual, mes, día, hora, minuto y segundo
actual_year = hoy [0: 4]
current_month = hoy [5: 7]
Current_day = hoy [8:10]
actual_hour = hoy [11:13]
Current_minute = hoy [14:16]
current_sec = hoy [17:19]
// abrir el archivo de cumpleaños en el objeto 'birthday_file' en modo de lectura
Birthday_file = Open ('Birthday_File', 'R')
// Guardar todas las líneas de 'Birthday_File' en la lista de líneas
líneas = cumpleaños_file.ReadLines ()
// Cerrar el objeto 'Birthday_File'
cumpleaños_file.cerca()
// Leer cada línea usando para bucle
Para la línea en líneas:
// Hacer una expresión regular para encontrar una fecha en 'Birthday_File'
dateEx = re.compilar (r "\ d 4-\ d 2-\ d 2")
finddate = dateEx.Buscar (línea)
fecha = finddate.grupo()
// obteniendo cumpleaños_month y cumpleaños_day desde el archivo
birthday_month = fecha [5: 7]
cumpleaños_day = fecha [8:10]
// Hacer una expresión regular para encontrar la dirección de correo de Birthday_File
MailEx = RE.compilar (r "\ w*@\ w*.com ")
findmail = mailex.Buscar (línea)
reciever_mail = findmail.grupo()
// haciendo una expresión regular para encontrar el nombre de la persona
nameEx = re.compilar (r "\ w*")
findName = nameEx.Buscar (línea)
nombre = findname.grupo()
// Comprobación de si el cumpleaños de alguien viene o no
Si Current_Month == cumpleaños_month y = current_day == cumpleaños_day:
// Enviar correo a las 08:00
Si Current_Hour == '08' y Current_Minute == '00' y current_sec == '00':
// Llamando a la función 'send_mail'
send_mail (reciever_mail, nombre)

Ahora hacemos un 'Birthday_File', en el que guardamos nombres, direcciones de correo electrónico y su fecha de nacimiento. Este es un archivo de texto simple y se ve así.

Explicación

Leeremos este archivo usando el script de Python y verificaremos cuyo cumpleaños viene y les desearemos. En primer lugar, importaremos algunos módulos. DateTime Module tiene funciones que nos dan fecha y hora actuales y muchos más. Pero solo usaremos esto para encontrar la fecha y hora actuales. El módulo SMTPLIB se usa para enviar correo y se ha explicado anteriormente. El módulo R tiene funciones que se utilizan para encontrar una expresión regular de una cadena.

En este script, definimos la función 'send_mail', que envía correo al 'reciever_mail_address', cuyo nombre es 'nombre'. Ambos argumentos se pasan a la función del cuerpo principal de MSG. En el cuerpo principal del script veremos cómo encontramos 'reciever_mail_address' y 'nombre'.

Enviar correo electrónico con SMTPLIB se ha explicado anteriormente, para que pueda leerlo y no se discutirá aquí.

En el cuerpo principal, vamos al directorio donde hemos guardado 'cumpleaños_file' usando 'OS.chdir () '. Luego tenemos un 'bucle while', que siempre es cierto, por lo que verificará el cumpleaños continuamente. Ahora obtenemos la fecha y hora actuales y la guardamos en la variable 'Today'. Se parece a esto.

2019-11-01 16:19:07.144925

Extraeremos año, mes, día, hora, minutos y segundos utilizando índices de estas cantidades. Después de esto, abriremos Birthday_File en un objeto 'Birthday_File' en modo de lectura, por lo que solo podemos leerlo. Ahora guardaremos todas las líneas de este archivo en la lista de líneas. 'Birthday_file.readLines () 'guardará cada línea en la lista' líneas '. Después de esto, cerraremos Birthday_File usando 'Birthday_File.función cierre () '.

Ahora leeremos cada línea uno por uno usando para bucle. En cada línea, solo los datos de una persona están disponibles en 'Birthday_File', por lo que estamos leyendo los datos de una sola persona a la vez en este bucle.

Después de esto, extraeremos la fecha de nacimiento, la dirección de correo electrónico y el nombre de la persona utilizando el módulo RE. Como hemos escrito la fecha en el siguiente formato

Yyyy-mm-dd

Entonces haremos una expresión regular 'dateEx' que encuentra este formato en la línea.

re.compilar (r ”\ d 4-\ d 2-\ d 2”)

COMANDO ARRIBA Encuentre una cadena que tenga '4 dígitos' seguido de '-' entonces '2 dígitos' seguidos de '-' y '2 dígitos'. Esto nos dará la fecha de nacimiento de la persona, por lo que extraeremos Birth_day y Birth_Month de esta expresión.

Del mismo modo, encontraremos la dirección de correo electrónico utilizando expresiones regulares. Después de esto, compararemos el cumpleaños_month y current_month y el cumpleaños_day y la actualidad_day. Si estas condiciones están satisfechas, enviaremos el correo electrónico de cumpleaños utilizando la función 'send_mail' en exacto '08: 00 '.

Ejecución de script automáticamente a través de Cronjob

Ahora nos aseguraremos de que este guión de Python se ejecute cada vez. Para hacer esto, agregaremos esta tarea a Crontab. Crontab, en Linux, se utiliza para realizar tareas automáticamente. Lo que tenemos que hacer es agregar la tarea a Crontab. Para hacerlo, siga los pasos dados.

  1. Abra crontab para agregar tarea en su terminal usando el siguiente comando
ubuntu@ubuntu: ~ $ crontab -e
  1. Al final de este archivo, ingrese el siguiente comando sin #
@reboot python path_to_the_script

Los comandos de arriba permitirán que su sistema ejecute el script de Python cada vez que reinicie su sistema. De esta manera, su sistema ejecutará script de Python cada vez que su sistema esté encendido.