وبلاگ محسن

یازده هزار ایمیل را با نُه خط کد پایتون پاک کنید!

| چهارشنبه, ۲۸ خرداد ۱۳۹۳، ۱۰:۲۰ ق.ظ
تقریبا دوازده سال پیش من اولین اکانت ایمیلمو تو سایت یاهو باز کردم و بعد از یه مدت استفاده رهاش کردم. حالا بعد از این همه سال به یه اکانت یاهو احنیاج دارم و وقتی به اینباکسم نگاه می‌کنم، می‌بینم که پر شده از ایمیل های مزخرف و تبلیغاتی. اونم نه یکی دوتا،‌ یازده هزار!
 
 
مشخصه که با این اینباکس شلوغ نمی تونم کار کنم. از طرفی دوست ندارم یه اکانت جدید باز کنم پس تنها راهی که باقی میمونه پاک کردنِ. در پاک کردن دستی، سرویس یاهو اجازه حذف فقط پنجاه ایمیل رو میده که با یه حساب کوچیک معلوم میشه باید بیش از ۴۴۰ کلیک موس کنم تا همه ی ایمیل ها پاک بشن و امکان نداره من همچین کار احمقانه ی انجام بدمangry
 
و خدا رو شکر که ما سیستم عاملی به نام گنو لینوکس داریم که پایتون out of the box روش نصبه و تمام این هرزنامه ها رو برامون پاک می کنه. اونم با نُه خط:
 
#!/usr/bin/python3 
import imaplib
connection = imaplib.IMAP4_SSL('imap.mail.yahoo.com')
connection.login('mohsen_rashidi2002@yahoo.com', 'password')
connection.select()
trash, emails = connection.search(None, 'all')
for i in emails[0].split():
    connection.store(i, '+FLAGS', '\\Deleted')
connection.expunge()

 

همون طور که می‌بینید، اسکریپت خیلی ساده ست و چیزی بیشتر از استفاده از چند تا متد ماژول imaplib نیست.

در خط سوم یه شیء به اسم connection از کلاس imaplib.IMAP4 درست کردیم و آدرس imap سرور یاهو رو بهش دادیم. در خط چهارم مشخصات اکانت رو برای لاگین وارد کردیم.

 

در توضیح پنجمین خط باید بگم هر اکانت ایمیل از تعدادی دایرکتوری تشکیل شده. مثل دایرکتوری inbox, sent, draft و ... . و کد ما در آن واحد میتونه رو یکی از اینا اجرا بشه. پس حالا که می خوایم با دایرکتوری اینباکس کار کنیم باید مسیرمون رو بهش تغییر بدیم و متد select همین کار رو انجام میده و اگر می‌بینید که بهش آرگومان ندادم به این خاطره که پارامتر پیشفرضش مقدار inbox رو داره.

 

تو خط بعدی دو تا متغیر به اسم trash و email می بینیم که به متد search نسبت داده شدن. متد سرچ کارش پیدا کردن ایمیل های موجود بر اساس الگوی داده شده ست که ما اینجا الگو رو None دادیم و آرگومان دوم مشخص می کنه که چه تعداد ایمیل رو بگرده که ما همه اونها رو خواستیم. مقداری که این متد بر می گردونه شامل یه لیست با دو عنصره که عنصر اول برابر رشته ok و عنصر دوم شماره و یا در اصل کد مربوط به هر ایمیل موجودِ. با استفاده از یه متغیر اضافی به اسم trash ما رشته ok رو از لیست جدا می کنیم و ادامه میدیم.

 

خط هفتم هم یه حلقه for برای پیمایش شماره ایمیل هاست که هر بار i رو به یکی از اونها نسبت میده. اما داخل حلقه از متد store استفاده کردم که کارش نشانه گذاری (flag) روی ایمیل هاست. و همون طور که می بینید نشانه delete رو روی تمام ایمیل ها قرار میده.

 

و خط آخر می گه همشون رو برای همیشه پاک کنlaugh

 

 

اجرای این اسکریپت حدود یک ساعت و نیم زمان برد که من به جای خیره شدن به مانیتور و ۴۴۰ بار کلیک روی چکباس و دکمه دیلیت یه فیلم خوب دیدم;-)

 

پ.ن: مستندات ماژول imaplib

نظرات  (۱)

سلام. واقعا عالی بود. مرسی. از همه مهمتر خیلی خوب و روان توضیح داده شده بود. ممنون از لطفتون. کاش بیشتر مطلب در مورد برنامه های پایتون با همین سبک توضیح قرار بدید. موفق باشید.

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی