Klien API Gmail Sederhana di Python untuk aplikasi.
Perilaku yang didukung saat ini:
Satu -satunya pengaturan yang diperlukan adalah mengunduh file ID klien OAuth 2.0 dari Google yang akan mengesahkan aplikasi Anda.
Ini dapat dilakukan di: https://console.developers.google.com/apis/credentials. Bagi mereka yang belum membuat kredensial untuk API Google, setelah mengklik tautan di atas (dan masuk ke akun yang sesuai),
Pilih/buat proyek yang harus dilakukan oleh otentikasi ini (jika membuat proyek baru pastikan untuk mengonfigurasi layar OAuth Consent; Anda hanya perlu mengatur nama aplikasi)
Klik pada tab "Dasbor", lalu "aktifkan API dan Layanan". Cari Gmail dan aktifkan.
Klik pada tab Kredensial, lalu "Buat Kredensial"> "ID Klien OAuth".
Pilih jenis aplikasi apa ini, dan berikan nama yang mengesankan. Isi semua informasi yang diperlukan untuk kredensial (misalnya, jika memilih "Aplikasi Web", pastikan untuk menambahkan URI yang diotorisasi. Lihat https://developers.google.com/identity/protocols/oauth2 untuk infomasi lebih lanjut).
Kembali ke layar kredensial, klik ikon unduhan di sebelah kredensial yang baru saja Anda buat untuk mengunduhnya sebagai objek JSON.
Simpan file ini sebagai "client_secret.json" dan letakkan di direktori root aplikasi Anda. (Kelas Gmail mengambil argumen untuk nama file ini jika Anda memilih untuk menyebutkannya sebaliknya.)
Pertama kali Anda membuat instance baru dari kelas Gmail , jendela browser akan terbuka, dan Anda akan diminta untuk memberikan izin ke aplikasi. Ini akan menyimpan token akses dalam file bernama "gmail-token.json", dan hanya perlu terjadi sekali.
Anda sekarang baik untuk pergi!
Catatan tentang metode otentikasi: Saya telah memilih untuk tidak menggunakan otentikasi nama pengguna-password (melalui IMAP/SMTP), karena menggunakan otorisasi Google secara signifikan lebih aman dan menghindari bentrok dengan banyak langkah keamanan Google.
Pasang menggunakan 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=...)Itu tidak lebih mudah!
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 )) Untuk lebih lanjut tentang apa yang dapat Anda lakukan dengan kueri, baca docString untuk construct_query() di query.py .
Jika ada fungsionalitas yang ingin Anda lihat ditambahkan, atau bug apa pun dalam proyek ini, beri tahu saya dengan memposting masalah atau mengirimkan permintaan tarik!