تحليل Gmail مع Python وتمييز كل الأكبر سنا من تاريخ "قراءة"

StackOverflow https://stackoverflow.com/questions/1296446

سؤال

قصة قصيرة طويلة، لقد أنشأت حساب جوجل جديد، وربط العديد من الحسابات الأخرى إليها (كل مع 1000s من الرسائل)، والتي أستوردها. تصل جميع الرسائل المستوردة إلى غير مقروءة، لكنني أحتاج إليها أن تظهر كما القراءة.

لدي خبرة صغيرة مع بيثون، لكنني استخدمت فقط وحدات البريد و IMAPLIB لإرسال البريد، وليس معالجة الحسابات.

هل هناك طريقة لعملية السائبة جميع العناصر في علبة الوارد، وبما هو موضحة رسائل أكبر من تاريخ محدد مثل القراءة؟

هل كانت مفيدة؟

المحلول

typ, data = M.search(None, '(BEFORE 01-Jan-2009)')
for num in data[0].split():
   M.store(num, '+FLAGS', '\\Seen')

هذا هو تعديل طفيف للقانون في IMAPLIB DOC الصفحة. لطريقة المتجر. لقد وجدت معايير البحث للاستخدام من RFC 3501.. وبعد هذا يجب عليك ان تبداء.

نصائح أخرى

بناء على إجابة فيليب T. أعلاه و RFC 3501. و RFC 2822., لقد قمت ببناء بعض خطوط التعليمات البرمجية لتمييز رسائل البريد أكبر من 10 أيام كما القراءة. يتم استخدام قائمة ثابتة لأسماء الشهر المختصرة. هذا ليس أنيقا بشكل خاص، لكن سلسلة Format٪ BS Python تعتمد على اللغة، والتي قد تعطي مفاجآت غير سارة. جميع أوامر IMAP مقرها.

import imaplib, datetime

myAccount = imaplib.IMAP4(<imapserver>)
myAccount.login(<imapuser>, <password>)
myAccount.select(<mailbox>)

monthListRfc2822 = ['0', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
beforeDate = datetime.datetime.today() - datetime.timedelta(days = 10)
beforeDateString = ("(BEFORE %s-%s-%s)"
                    % (beforeDate.strftime('%d'),
                       monthListRfc2822[beforeDate.month],
                       beforeDate.strftime('%Y')))
typ, data = myAccount.uid('SEARCH', beforeDateString)
for uid in data[0].split():
    myAccount.uid('STORE', uid, '+FLAGS', '(\Seen)')

بالمناسبة: لا أعرف، لماذا "-" يجب استخدامها كمسؤول تاريخ في سلسلة البحث في حالتي (Dovecot IMAP Server). بالنسبة لي يبدو أنه يتعارض مع RFC 2822. ومع ذلك، فإن التواريخ مع مسافة بيضاء بسيطة كما عاد محدد أخطاء IMAP فقط.

بدلا من محاولة تحليل HTML لدينا لماذا لا تستخدم واجهة IMAP فقط؟ ربطه إلى عميل بريد قياسي ثم فقط فرز حسب التاريخ وتمييز أي منها الذي تريده كقراءة.

فقط انتقل إلى واجهة الويب Gmail، قم بعمل بحث متقدم حسب التاريخ، ثم حدد الكل والعلامة كما القراءة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top