Python中的一個簡單的Gmail API客戶端,用於應用程序。
目前支持行為:
唯一需要的設置是從Google下載OAuth 2.0客戶端ID文件,該文件將授權您的應用程序。
可以在以下網址完成:https://console.developers.google.com/apis/credentials。對於那些沒有為Google API創建憑據的人,單擊上面的鏈接(並登錄到適當的帳戶),
選擇/創建此身份驗證的項目(如果創建一個新項目,請確保配置OAuth同意屏幕;您只需要設置應用程序名稱)
單擊“儀表板”選項卡,然後單擊“啟用API和服務”。搜索Gmail並啟用。
單擊“憑據”選項卡,然後“創建憑據”>“ OAUTH客戶端ID”。
選擇這是什麼樣的應用程序,並給它一個令人難忘的名稱。填寫憑據的所有必要信息(例如,如果選擇“ Web應用程序”,請確保添加授權的重定向URI。請參閱https://developers.google.com/identity/protocols/oauth2,以獲取更多信息)。
返回憑據屏幕,單擊您剛剛創建的憑據旁邊的下載圖標,以將其作為JSON對像下載。
將此文件另存為“ client_secret.json”,然後將其放在應用程序的根目錄中。 (如果您選擇否則將其名稱命名,則Gmail類以該文件的名稱進行參數。)
您第一次創建Gmail類的新實例時,將打開一個瀏覽器窗口,您會被要求3S授予該應用程序的權限。這將在名為“ gmail-token.json”的文件中保存一個訪問令牌,只需要一次。
你現在很好!
關於身份驗證方法的注意:我選擇不使用用戶名password身份驗證(通過IMAP/SMTP),因為使用Google的授權既更安全,又避免與Google的許多安全措施發生衝突。
使用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=...)這不是簡單的!
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 ))有關查詢可以做的事情的更多信息,請在query.py中閱讀construct_query()的docstring。
如果您想查看添加的功能,或者本項目中的任何錯誤,請通過發布問題或提交拉動請求,讓我知道!