Pitón

Enviar correos electrónicos con Python

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

Por ejemplo, desea enviar un recordatorio a sus clientes de 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, luego, 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 valioso tiempo.

Unas palabras sobre SMTP

El Protocolo simple de transferencia de correo (SMTP) es el equivalente computarizado de 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 consiste en que los servidores de correo electrónico y los clientes se envíen y reciban correos electrónicos entre sí.

Por ejemplo, tiene una cuenta GMAIL y desea enviar un correo electrónico a su amigo en su cuenta YAHOO. Escribes un correo electrónico y presionas enviar, pero el proceso de backend es un poco complicado, y para entender este proceso, primero tendrás que entender SMTP. Su cliente de correo electrónico SMTP envía primero HELO (o EHLO) al servidor 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 mediante el nombre de dominio. Después de HELO o EHLO, el cliente se autentica en el servidor con el nombre de usuario y la contraseña dados utilizando AUTH mando. Luego especifica la dirección de correo electrónico del remitente y el destinatario y luego el cuerpo del mensaje y envía el correo electrónico al servidor GMAIL. El servidor GMAIL primero confirmará que si la dirección de correo electrónico del destinatario en YAHOO existe o no, luego enviará el correo electrónico al servidor YAHOO donde el destinatario puede recuperar sus correos electrónicos.

SMTPLIB

SMTPLIB es una biblioteca de Python que se puede usar como un cliente SMTP al igual que 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 las que tienen una interfaz gráfica de usuario.

Viene por defecto en Python, en caso de que no lo tenga, puede instalarlo usando el siguiente comando.

[correo electrónico protegido]: ~ $ pip install smtplib

O en Python3

[correo electrónico protegido]: ~ $ pip install smtplib

Escribiendo su primer correo electrónico con Python

En este tutorial, usaré una cuenta de GMAIL como remitente, también usaré la consola de Python, por lo que me resultará más fácil explicar cada línea de código paso a paso. Para comenzar, debemos permitir que nuestro GMAIL acceda 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é activado.

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

[correo electrónico protegido]: ~ $ python
Python 2.7.16 (predeterminado, 7 de octubre de 2019, 17:36:04)
[CCG 8.3.0] en linux2

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

// importar la biblioteca SMTP
>>> importar smtplib
// conectarse al servidor GMAIL con el nombre de dominio y el número de puerto (esta configuración difiere para
cada proveedor de correo electrónico, consulte la tabla que figura a continuación)
>>> mailobj = smtplib.SMTP ('smtp.gmail.com ', 587)
// saluda al servidor
>>> mailobj.ehlo ()
(250, 'smtp.gmail.com a su servicio, [103.255.4.246] \ nTAMAÑO35882577 \ n8BITMIME \ nSTARTTLS \
nCÓDIGOS DE ESTADO MEJORADOS \ nTUBERÍAS \ nCONCHUZADO \ nSMTPUTF8 ')
// El puerto 587 significa que estamos usando una conexión TLS cifrada, así que inicie TLS cifrada
comunicación usando starttls (), para que nuestras credenciales y mensajes no sean detectados
>>> mailobj.starttls ()
(220, '2.0.0 Listo para iniciar TLS ')
// inicie sesión en su cuenta de GMAIL con correo electrónico y contraseña
>>> mailobj.login ('[correo electrónico protegido]', 's3cr3t_p4ssw0rd')
(235, '2.7.0 aceptado ')
// especificar la dirección de correo electrónico del remitente y el destinatario y el contenido del correo electrónico
>>> mailobj.sendmail ('[correo electrónico protegido]', '[correo electrónico protegido]', 'Asunto:
Hola Mundo! \ n hola mundo! este es mi primer correo electrónico de hola mundo en Python ')

// cerrar la conexión con el servidor GMAIL
>>> mailobj.dejar()
(221, '2.0.0 cierre conexión b6sm4519863lfi.72 - gsmtp ')

En el programa de muestra anterior, reemplace el contenido dado con el suyo. Si no es usuario de GMAIL, puede utilizar el servidor de correo electrónico de su proveedor. Aquí está la lista de nombres de dominio y puertos de algunos proveedores de correo comunes.

Nombre Nombre de dominio del servidor Puerto
Gmail smtp.gmail.com 587
Outlook / Hotmail correo-smtp.panorama.com 587
Correo de yahoo smtp.correo.yahoo.com 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 ¿qué es IMAP (Protocolo de mensajería de acceso a Internet) para? SMTP no se puede usar para buscar y recibir correos electrónicos del servidor, el protocolo IMAP o POP3 se usa para ese propósito.

IMAPCLIENT, IMAPLIB y PYZMAIL

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

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

[correo electrónico protegido]: ~ $ sudo pip install imapclient
[correo electrónico protegido]: ~ $ sudo pip install pyzmail

Obtener sus correos electrónicos del servidor de correo

Ahora, aprenderemos a buscar y descargar correo electrónico desde el servidor de correo usando 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
// Conéctese al servidor IMAP de GMAIL
>>> obj = imapclient.IMAPClient ('imap.gmail.com ', ssl = Verdadero)
// Inicie sesión en su cuenta de correo electrónico con sus credenciales
>>> obj.login ('[correo electrónico protegido]', 's3cr4tp4ss')
'[correo electrónico protegido] autenticado (correcto)'
// Seleccionar carpeta de mensajes para leer i.e INBOX, BORRADORES, CORREOS ENVIADOS
>>> obj.select_folder ('INBOX', readonly = True)
'EXISTS': 830, 'PERMANENTFLAGS': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
'BANDERAS': ('\\ Respondido', '\\ Marcado', '\\ Borrador', '\\ Eliminado', '\\ Visto',
'$ NotPhishing', '$ Phishing'), 'UIDVALIDITY': 1, 'LECTURA SOLAMENTE': ["], 'RECIENTE': 0
// Busque sus mensajes en su INBOX, o aplique un filtro, a continuación se mostrará el filtro
Recibiste los correos 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 los ID de correo electrónico recibidos desde el 25 de octubre de 2019,
puede descargar un correo electrónico usando la función de recuperación de imapclient.
>>> raw_mail = obj.buscar ([919], ['BODY []', 'BANDERAS'])
// Ahora, el contenido de la variable raw_mail está en formato raw, 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.fábrica (raw_mail [919] ['BODY []'])
// Ahora el correo electrónico se analiza y almacena en la variable de mensaje, para obtener el asunto de
el correo electrónico, use la función get_subject
>>> mensaje.get_subject ()
u'Viste tus habilidades este Halloween con un 25% de descuento '
// Del mismo modo, puede ver los detalles del remitente
>>> mensaje.get_addresses ('desde')
[(u'Usama Azad ',' [correo electrónico protegido] ')]
>>> mensaje.get_addresses ('a')
[(u '[correo electrónico protegido]', '[correo electrónico protegido]')]
// Para obtener el cuerpo del correo electrónico, escriba
>>> mensaje.parte_texto.get_payload ().decodificar (mensaje.parte_texto.juego de caracteres)
u ”hola! Disfruta 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.com
Hotmail / Outlook imap-mail.panorama.com
Verizon entrante.Verizon.neto
Comcast imap.comcast.neto
AT&T imap.correo.att.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 usando su uid. Solo sigue los pasos dados

// Para eliminar un correo electrónico, debe cambiar solo 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]
 
// Proporcione un uid de correo electrónico o una lista de uid de correo electrónico, después de ejecutar el comando debajo,
su correo electrónico desaparecerá de INBOX.
>>> obj.borrar_mensajes (919)
919: ('\\ Visto', '\\ Eliminado')
 
// Este comando eliminará permanentemente sus correos electrónicos del servidor de correo
>>> obj.borrar()
('Éxito', [])

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

Creando tu propio recordatorio de cumpleaños

Tienes los cumpleaños de tus amigos en los próximos meses y quieres desearles su cumpleaños. Pero tienes mucho trabajo en tu oficina y existe la posibilidad de que te olvides de desearlos. Entonces esta tarea se puede realizar automáticamente usando python. A continuación se muestra el código para realizar esta tarea.

// importar módulos
importar re
// el módulo os se utiliza para realizar tareas del sistema operativo i.e accediendo a directorios
importar sistema operativo
importar fecha y hora
importar smtplib
 
// definir una función que enviará correos electrónicos
def send_mail (dirección_de_correo_de_receptor, nombre):
sender_mail_address = "[correo electrónico protegido]"
passwd = "senderPasswd"
// conectarse al servidor de gmail con nombre de dominio y número de puerto
obj = smtplib.SMTP ('smtp.gmail.com ', 587)
obj.ehlo ()
obj.starttls ()
// iniciando sesión en su cuenta de gmail
obj.inicio de sesión (dirección_de_correo_sensor, contraseña)
// enviando correo a 'reciever_mail_address'.
obj.sendmail (sender_mail_address, reciever_mail_address, "Asunto: BirthDay Wishing Mail \ n \ n HappyBirthday" + nombre)
// finalizando la conexión
obj.dejar()
// Cuerpo principal
// ir al directorio en el que está presente el archivo que contiene los datos
os.chdir ("ruta_a_archivo_de_datos_cumpleaños")
mientras que 1:
// obteniendo la fecha y hora del momento presente
hoy = fecha y hora.fecha y hora.hoy()
today = str (hoy)
// obteniendo el año, mes, día, hora, minuto y segundo actual
current_year = hoy [0: 4]
current_month = hoy [5: 7]
current_day = hoy [8:10]
current_hour = hoy [11:13]
current_minute = hoy [14:16]
current_sec = hoy [17:19]
// abriendo el archivo de cumpleaños en el objeto 'birthday_file' en modo lectura
archivo_cumpleaños = open ('archivo_cumpleaños', 'r')
// guardar todas las líneas de 'birthday_file' en la lista de líneas
lineas = archivo_cumpleaños.readlines ()
// cerrando el objeto 'birthday_file'
archivo_cumpleaños.cerca()
// leyendo cada línea usando el bucle for
para línea en líneas:
// haciendo 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 birthday_month y birthday_day del archivo
birthday_month = fecha [5: 7]
cumpleaños_día = fecha [8:10]
// haciendo 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)
name = findName.grupo()
// comprobar si se acerca el cumpleaños de alguien o no
if current_month == birthday_month y = current_day == cumpleaños_day:
// enviando correo a las 08:00 exactas
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 'archivo_cumpleaños', en el que guardamos nombres, direcciones de correo electrónico y su fecha de nacimiento. Este es un archivo de texto simple y tiene este aspecto.

Explicación

Leeremos este archivo usando la secuencia de comandos de Python y comprobaremos de quién es el cumpleaños y les deseamos. Primero que nada importaremos algunos módulos. El módulo DATETIME tiene funciones que nos dan la fecha y hora actual y muchas más. Pero solo usaremos esto para encontrar la fecha y hora actuales. El módulo SMTPLIB se utiliza para enviar correo y se ha explicado anteriormente. El módulo RE tiene funciones que se utilizan para encontrar expresiones regulares a partir de una cadena.

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

El envío de correo electrónico mediante smtplib se ha explicado anteriormente, por lo que puede leerlo y no se discutirá aquí.

En el cuerpo principal, vamos al directorio donde hemos guardado 'birthday_file' usando 'os.chdir () '. Luego tenemos un 'bucle while' que siempre es cierto, por lo que verificará el cumpleaños de forma continua. Ahora obtenemos la fecha y hora actuales y las guardamos en la variable 'hoy'. 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 lectura, por lo que solo podemos leerlo. Ahora guardaremos todas las líneas de este archivo en la lista de líneas. 'archivo_cumpleaños.readlines () 'guardará cada línea en la lista de' líneas '. Después de esto, cerraremos birthday_file usando 'birthday_file.función close () '.

Ahora leeremos cada línea una por una usando for loop. En cada línea, solo los datos de una persona están disponibles en 'birthday_file', por lo que solo estamos leyendo los datos de una 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 que usa el módulo RE. Como hemos escrito la fecha en el siguiente formato

AAAA-MM-DD

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

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

El comando anterior busca una cadena que tenga '4 dígitos' seguido de '-' luego '2 dígitos' seguido 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 birthday_month y current_month y birthday_day y current_day. Si se cumplen estas condiciones, le enviaremos el correo electrónico de cumpleaños utilizando la función 'send_mail' exactamente a las '08: 00 '.

Ejecutar script automáticamente a través de Cronjob

Ahora nos aseguraremos de que este script de Python se ejecute siempre. Para hacer esto, agregaremos esta tarea a crontab. Crontab, en linux, se usa para realizar tareas automáticamente. Lo que tenemos que hacer es simplemente agregar la tarea a crontab. Para hacerlo, siga los pasos dados.

  1. Abra crontab para agregar tareas en su terminal usando el siguiente comando
[correo electrónico protegido]: ~ $ crontab -e
  1. Al final de este archivo, ingrese el siguiente comando sin #
@reboot Python path_to_the_script

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

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...
El botón central del mouse no funciona en Windows 10
La botón central del ratón le ayuda a desplazarse por páginas web largas y pantallas con una gran cantidad de datos. Si eso se detiene, bueno, termina...