Un cliente de API de Gmail simple en Python para aplicaciones.
Comportamiento actualmente compatible:
La única configuración requerida es descargar un archivo de ID de cliente OAuth 2.0 de Google que autorice su aplicación.
Esto se puede hacer en: https://console.developers.google.com/apis/credentials. Para aquellos que no han creado una credencial para la API de Google, después de hacer clic en el enlace de arriba (e iniciar sesión en la cuenta apropiada),
Seleccione/cree el proyecto para el que sea esta autenticación (si crea un nuevo proyecto, asegúrese de configurar la pantalla de consentimiento de OAuth; solo necesita establecer un nombre de aplicación)
Haga clic en la pestaña "Dashboard", luego "Habilite las API y los servicios". Busque gmail y habilitar.
Haga clic en la pestaña Credenciales, luego "Crear credenciales"> "ID de cliente OAuth".
Seleccione para qué tipo de aplicación es esto y dale un nombre memorable. Complete toda la información necesaria para la credencial (por ejemplo, si elige "aplicación web" asegúrese de agregar un URI de redirección autorizado. Consulte https://developers.google.com/identity/protocols/oauth2 para más infominación).
Volver a la pantalla Credenciales, haga clic en el icono de descarga junto a la credencial que acaba de crear para descargarla como un objeto JSON.
Guarde este archivo como "client_secret.json" y colóquelo en el directorio raíz de su aplicación. (La clase Gmail toma un argumento para el nombre de este archivo si elige nombrarlo de otra manera).
La primera vez que cree una nueva instancia de la clase Gmail , se abrirá una ventana del navegador y se le pedirá que dé permisos a la aplicación. Esto guardará un token de acceso en un archivo llamado "Gmail-Token.json", y solo debe ocurrir una vez.
¡Ahora estás listo para ir!
Nota sobre el método de autenticación: he optado por no usar una autenticación de nombre de usuario de nombre de usuario (a través de IMAP/SMTP), ya que usar la autorización de Google es significativamente más seguro y evita el chocar con las muchas medidas de seguridad de Google.
Instale con pip (Python3).
pip3 install simplegmail from simplegmail import Gmail
gmail = Gmail () # will open a browser window to ask you to log in and authenticate
params = {
"to" : "[email protected]" ,
"sender" : "[email protected]" ,
"subject" : "My first email" ,
"msg_html" : "<h1>Woah, my first email!</h1><br />This is an HTML email." ,
"msg_plain" : "Hi n This is a plain text email." ,
"signature" : True # use my account signature
}
message = gmail . send_message ( ** params ) # equivalent to send_message(to="[email protected]", sender=...) from simplegmail import Gmail
gmail = Gmail ()
params = {
"to" : "[email protected]" ,
"sender" : "[email protected]" ,
"cc" : [ "[email protected]" ],
"bcc" : [ "[email protected]" , "[email protected]" ],
"subject" : "My first email" ,
"msg_html" : "<h1>Woah, my first email!</h1><br />This is an HTML email." ,
"msg_plain" : "Hi n This is a plain text email." ,
"attachments" : [ "path/to/something/cool.pdf" , "path/to/image.jpg" , "path/to/script.py" ],
"signature" : True # use my account signature
}
message = gmail . send_message ( ** params ) # equivalent to send_message(to="[email protected]", sender=...)¡No podría ser más fácil!
from simplegmail import Gmail
gmail = Gmail ()
# Unread messages in your inbox
messages = gmail . get_unread_inbox ()
# Starred messages
messages = gmail . get_starred_messages ()
# ...and many more easy to use functions can be found in gmail.py!
# Print them out!
for message in messages :
print ( "To: " + message . recipient )
print ( "From: " + message . sender )
print ( "Subject: " + message . subject )
print ( "Date: " + message . date )
print ( "Preview: " + message . snippet )
print ( "Message Body: " + message . plain ) # or message.html from simplegmail import Gmail
gmail = Gmail ()
messages = gmail . get_unread_inbox ()
message_to_read = messages [ 0 ]
message_to_read . mark_as_read ()
# Oops, I want to mark as unread now
message_to_read . mark_as_unread ()
message_to_star = messages [ 1 ]
message_to_star . star ()
message_to_trash = messages [ 2 ]
message_to_trash . trash ()
# ...and many more functions can be found in message.py! from simplegmail import Gmail
gmail = Gmail ()
# Get the label objects for your account. Each label has a specific ID that
# you need, not just the name!
labels = gmail . list_labels ()
# To find a label by the name that you know (just an example):
finance_label = list ( filter ( lambda x : x . name == 'Finance' , labels ))[ 0 ]
messages = gmail . get_unread_inbox ()
# We can add/remove a label
message = messages [ 0 ]
message . add_label ( finance_label )
# We can "move" a message from one label to another
message . modify_labels ( to_add = labels [ 10 ], to_remove = finance_label )
# ...check out the code in message.py for more! from simplegmail import Gmail
gmail = Gmail ()
messages = gmail . get_unread_inbox ()
message = messages [ 0 ]
if message . attachments :
for attm in message . attachments :
print ( 'File: ' + attm . filename )
attm . save () # downloads and saves each attachment under it's stored
# filename. You can download without saving with `attm.download()` from simplegmail import Gmail
from simplegmail . query import construct_query
gmail = Gmail ()
# Unread messages in inbox with label "Work"
labels = gmail . list_labels ()
work_label = list ( filter ( lambda x : x . name == 'Work' , labels ))[ 0 ]
messages = gmail . get_unread_inbox ( labels = [ work_label ])
# For even more control use queries:
# Messages that are: newer than 2 days old, unread, labeled "Finance" or both "Homework" and "CS"
query_params = {
"newer_than" : ( 2 , "day" ),
"unread" : True ,
"labels" :[[ "Work" ], [ "Homework" , "CS" ]]
}
messages = gmail . get_messages ( query = construct_query ( query_params ))
# We could have also accomplished this with
# messages = gmail.get_unread_messages(query=construct_query(newer_than=(2, "day"), labels=[["Work"], ["Homework", "CS"]]))
# There are many, many different ways of achieving the same result with search. from simplegmail import Gmail
from simplegmail . query import construct_query
gmail = Gmail ()
# For even more control use queries:
# Messages that are either:
# newer than 2 days old, unread, labeled "Finance" or both "Homework" and "CS"
# or
# newer than 1 month old, unread, labeled "Top Secret", but not starred.
labels = gmail . list_labels ()
# Construct our two queries separately
query_params_1 = {
"newer_than" : ( 2 , "day" ),
"unread" : True ,
"labels" :[[ "Finance" ], [ "Homework" , "CS" ]]
}
query_params_2 = {
"newer_than" : ( 1 , "month" ),
"unread" : True ,
"labels" : [ "Top Secret" ],
"exclude_starred" : True
}
# construct_query() will create both query strings and "or" them together.
messages = gmail . get_messages ( query = construct_query ( query_params_1 , query_params_2 )) Para obtener más información sobre lo que puede hacer con consultas, lea el documento para construct_query() en query.py .
Si hay funcionalidad que le gustaría ver, o cualquier error en este proyecto, ¡hágamelo saber publicando un problema o enviando una solicitud de extracción!