Un client API Gmail simple dans Python pour les applications.
Comportement actuellement pris en charge:
La seule configuration requise est de télécharger un fichier ID client OAuth 2.0 de Google qui autorisera votre application.
Cela peut être fait à: https://console.developers.google.com/apis/credentials. Pour ceux qui n'ont pas créé d'identification pour l'API de Google, après avoir cliqué sur le lien ci-dessus (et se connecter au compte approprié),
Sélectionnez / créez le projet pour lequel cette authentification est pour (si vous créez un nouveau projet, assurez-vous de configurer l'écran de consentement OAuth; vous n'avez qu'à définir un nom d'application)
Cliquez sur l'onglet "Dashboard", puis "Activer les API et les services". Recherchez Gmail et activez.
Cliquez sur l'onglet Informations d'identification, puis "Créer des informations d'identification"> "ID Client OAuth".
Sélectionnez à quel type d'application il s'agit et donnez-lui un nom mémorable. Remplissez toutes les informations nécessaires pour les informations d'identification (par exemple, si vous choisissez "application Web", assurez-vous d'ajouter un URI de redirection autorisé. Voir https://developers.google.com/identity/protocols/oauth2 pour plus d'infromisation).
De retour sur l'écran des informations d'identification, cliquez sur l'icône de téléchargement à côté des informations d'identification que vous venez de créer pour le télécharger en tant qu'objet JSON.
Enregistrez ce fichier en tant que "client_secret.json" et placez-le dans le répertoire racine de votre application. (La classe Gmail prend un argument pour le nom de ce fichier si vous choisissez de le nommer autrement.)
La première fois que vous créez une nouvelle instance de la classe Gmail , une fenêtre de navigateur s'ouvrira et vous vous demanderez de donner des autorisations à l'application. Cela sauvera un jeton d'accès dans un fichier nommé "gmail-tinking.json", et ne doit se produire qu'une seule fois.
Vous êtes maintenant prêt à partir!
Remarque sur la méthode d'authentification: j'ai choisi de ne pas utiliser d'authentification de mot de passe du nom d'utilisateur (via IMAP / SMTP), car l'utilisation de l'autorisation de Google est à la fois beaucoup plus sûre et évite de s'affronter avec les nombreuses mesures de sécurité de Google.
Installez à l'aide de 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=...)Ça ne pourrait pas être plus facile!
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 )) Pour en savoir plus sur ce que vous pouvez faire avec les requêtes, lisez le docstring pour construct_query() dans query.py .
S'il y a des fonctionnalités que vous aimeriez voir ajoutées, ou tout bug dans ce projet, veuillez me le faire savoir en publiant un problème ou en soumettant une demande de traction!