Si alguna vez tiene curiosidad por saber cómo podemos obtener correos electrónicos de Gmail usando Python, este artículo es para usted.
Como sabemos, Python es un lenguaje de múltiples utilidades que se puede usar para realizar una amplia gama de tareas. Sin embargo, obtener correos electrónicos de Gmail es una tarea tediosa, pero con Python, se pueden hacer muchas cosas si está bien versado en su uso. Gmail proporciona acceso IMAP a los clientes que desean acceder a Gmail sin iniciar sesión manualmente en el navegador.
En la página de configuración, habilite esto antes de ejecutar el script.
Implementación:
las bibliotecas utilizadas en esta implementación incluyen imaplib , email . Tienes que ir manualmente y habilitar el acceso IMAP yendo a la configuración de tu cuenta de Gmail . Después de esto, solo podrá acceder a su cuenta de Gmail sin iniciar sesión en el navegador.
- Se definen tres funciones en la implementación que se utiliza para obtener el cuerpo del correo electrónico, buscar correos electrónicos de un usuario en particular y obtener todos los correos electrónicos bajo una etiqueta.
- Para mostrar los resultados, envié un correo electrónico a mi identificación desde mi otra cuenta de Gmail. Ahora buscaré correos electrónicos de mi cuenta de Gmail que se reciben de mi otra cuenta de Gmail.
- El proceso comienza con la conexión de Gmail con la ayuda de la biblioteca imaplib y la prueba de nuestras credenciales de inicio de sesión de Gmail.
- Después de iniciar sesión, seleccionamos correos electrónicos bajo la etiqueta: Bandeja de entrada, que es una sección etiquetada predeterminada para todos los usuarios. Sin embargo, también puede crear sus propias etiquetas.
- Luego llamamos a la función de obtener correos electrónicos y le proporcionamos el parámetro del resultado de la función de búsqueda, es decir, «del usuario»
- En la función de obtener correos electrónicos, colocamos todos los correos electrónicos en una array llamada «msgs»
- Ahora imprima para ver la array msgs
- Ahora podemos iterar fácilmente sobre esta array. Lo estamos iterando en el orden en que llegaron los correos electrónicos. Luego estamos buscando el índice desde donde comienza nuestro contenido. Esta parte de indexación será diferente para diferentes correos electrónicos/usuarios y el usuario puede cambiar manualmente los índices para imprimir solo la parte que necesita.
- Tenemos nuestros resultados impresos.
A continuación se muestra la implementación de Python:
Python3
# Importing libraries import imaplib, email user = 'USER_EMAIL_ADDRESS' password = 'USER_PASSWORD' imap_url = 'imap.gmail.com' # Function to get email content part i.e its body part def get_body(msg): if msg.is_multipart(): return get_body(msg.get_payload(0)) else: return msg.get_payload(None, True) # Function to search for a key value pair def search(key, value, con): result, data = con.search(None, key, '"{}"'.format(value)) return data # Function to get the list of emails under this label def get_emails(result_bytes): msgs = [] # all the email data are pushed inside an array for num in result_bytes[0].split(): typ, data = con.fetch(num, '(RFC822)') msgs.append(data) return msgs # this is done to make SSL connection with GMAIL con = imaplib.IMAP4_SSL(imap_url) # logging the user in con.login(user, password) # calling function to check for email under this label con.select('Inbox') # fetching emails from this user "tu**h*****1@gmail.com" msgs = get_emails(search('FROM', 'MY_ANOTHER_GMAIL_ADDRESS', con)) # Uncomment this to see what actually comes as data # print(msgs) # Finding the required content from our msgs # User can make custom changes in this part to # fetch the required content he / she needs # printing them by the order they are displayed in your gmail for msg in msgs[::-1]: for sent in msg: if type(sent) is tuple: # encoding set as utf-8 content = str(sent[1], 'utf-8') data = str(content) # Handling errors related to unicodenecode try: indexstart = data.find("ltr") data2 = data[indexstart + 5: len(data)] indexend = data2.find("</div>") # printtng the required content which we need # to extract from our email i.e our body print(data2[0: indexend]) except UnicodeEncodeError as e: pass
Producción: