عميل API Gmail بسيط في Python للتطبيقات.
السلوك المدعوم حاليا:
الإعداد الوحيد المطلوب هو تنزيل ملف معرف عميل Oauth 2.0 من Google الذي سيؤدي إلى تفويض التطبيق الخاص بك.
يمكن القيام بذلك على: https://console.developers.google.com/apis/credentials. بالنسبة لأولئك الذين لم ينشئوا بيانات اعتماد لواجهة برمجة تطبيقات Google ، بعد النقر على الرابط أعلاه (وتسجيل الدخول إلى الحساب المناسب) ،
حدد/أنشئ المشروع الذي تخصصه هذه المصادقة (إذا كان إنشاء مشروع جديد ، فتأكد من تكوين شاشة موافقة OAUTH ؛ تحتاج فقط إلى تعيين اسم تطبيق)
انقر فوق علامة التبويب "لوحة القيادة" ، ثم "تمكين واجهات برمجة التطبيقات والخدمات". ابحث عن Gmail وتمكين.
انقر فوق علامة تبويب بيانات الاعتماد ، ثم "إنشاء بيانات الاعتماد"> "معرف عميل Oauth".
حدد نوع التطبيق هذا من أجله ، وقم بمنحه اسمًا لا يُنسى. املأ جميع المعلومات اللازمة لبيان الاعتماد (على سبيل المثال ، إذا اختار "تطبيق الويب" ، فتأكد من إضافة URI المعتمدة.
مرة أخرى على شاشة بيانات الاعتماد ، انقر فوق أيقونة التنزيل بجوار بيانات الاعتماد التي قمت بإنشائها للتو لتنزيلها ككائن JSON.
احفظ هذا الملف كـ "client_secret.json" ووضعه في الدليل الجذر للتطبيق الخاص بك. (يأخذ فئة Gmail وسيطة لاسم هذا الملف إذا اخترت تسميته على خلاف ذلك.)
في المرة الأولى التي تقوم فيها بإنشاء مثيل جديد لفئة Gmail ، سيتم فتح نافذة المتصفح ، وسيُطلب منك تقديم أذونات للتطبيق. سيؤدي ذلك إلى حفظ رمز الوصول في ملف يسمى "gmail-token.json" ، ويجب أن يحدث مرة واحدة فقط.
أنت الآن على ما يرام!
ملاحظة حول طريقة المصادقة: لقد اخترت عدم استخدام مصادقة اسم المستخدم والكلمات (من خلال 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 )) لمعرفة المزيد حول ما يمكنك القيام به مع الاستعلامات ، اقرأ docstring لـ construct_query() في query.py .
إذا كانت هناك وظيفة ترغب في مشاهدتها ، أو أي أخطاء في هذا المشروع ، فيرجى إخبارنا عن طريق نشر مشكلة أو تقديم طلب سحب!