পাইথন প্রজেক্টস ও লাইব্রেরি

Agent 10: Email Manager & Auto-Replier Agent

১. এই এজেন্ট কী কাজ করবে?

আপনার ইনবক্সে আসা শত শত ইমেইল চেক করা বেশ ঝামেলার। এই এজেন্ট পাইথন দিয়ে আপনার ইনবক্সে লগইন করবে, নতুন ইমেইলগুলো পড়বে এবং AI (Gemini/ChatGPT) ব্যবহার করে ইমেইলের বিষয়বস্তু বুঝে একটি সুন্দর রিপ্লাই (Reply) তৈরি করে ড্রাফট (Draft) ফোল্ডারে সেভ করে রাখবে।

২. কী কী টুলস এবং লাইব্রেরি লাগবে?

  • imaplib এবং email: (পাইথনের সাথেই থাকে) ইমেইল রিসিভ ও পড়ার জন্য।
  • google-generativeai: ইমেইল পড়ে রিপ্লাই লেখার জন্য।

৩. এ টু জেড কোড (A to Z Code)

নিচের কোডটি agent_email_manager.py নামে সেভ করুন। (এটি কাজ করানোর জন্য জিমেইলের "App Password" লাগবে)।

import imaplib
import email
from email.header import decode_header
import google.generativeai as genai

class EmailManagerAgent:
    def __init__(self, email_user, app_password, api_key):
        self.user = email_user
        self.password = app_password
        
        # AI কনফিগার করা
        genai.configure(api_key=api_key)
        self.model = genai.GenerativeModel('gemini-1.5-flash')

    def connect_and_read(self):
        print("[Agent] ইমেইলে লগইন করা হচ্ছে...")
        # জিমেইলের IMAP সার্ভারের সাথে কানেক্ট করা
        imap = imaplib.IMAP4_SSL("imap.gmail.com")
        imap.login(self.user, self.password)
        
        # INBOX সিলেক্ট করা
        imap.select("INBOX")
        
        # শুধুমাত্র না পড়া (Unread) ইমেইলগুলো খোঁজা (সর্বোচ্চ ৩টি)
        status, messages = imap.search(None, "UNSEEN")
        email_ids = messages[0].split()[-3:] # শেষের ৩টি
        
        if not email_ids:
            print("[Agent] নতুন কোনো ইমেইল নেই!")
            return

        for e_id in email_ids:
            res, msg_data = imap.fetch(e_id, "(RFC822)")
            for response_part in msg_data:
                if isinstance(response_part, tuple):
                    msg = email.message_from_bytes(response_part[1])
                    subject, encoding = decode_header(msg["Subject"])[0]
                    if isinstance(subject, bytes):
                        subject = subject.decode(encoding if encoding else "utf-8")
                    
                    print(f"\n📩 নতুন ইমেইল: {subject}")
                    
                    # ইমেইলের বডি (Body) বের করা
                    body = ""
                    if msg.is_multipart():
                        for part in msg.walk():
                            if part.get_content_type() == "text/plain":
                                body = part.get_payload(decode=True).decode()
                                break
                    else:
                        body = msg.get_payload(decode=True).decode()
                    
                    # AI-কে দিয়ে রিপ্লাই লেখানো
                    self.draft_reply(subject, body[:500]) # প্রথম ৫০০ ক্যারেক্টার দিচ্ছি

    def draft_reply(self, subject, body):
        print(f"[Agent] AI এই ইমেইলের রিপ্লাই ভাবছে...")
        prompt = f"""
        You are my personal assistant. Write a polite and professional short reply to the following email.
        Subject: {subject}
        Body: {body}
        """
        response = self.model.generate_content(prompt)
        print("💡 সাজেস্টেড রিপ্লাই:\n")
        print(response.text.strip())
        print("-" * 50)

if __name__ == "__main__":
    EMAIL = "your_email@gmail.com"
    APP_PASSWORD = "your_app_password" # রেগুলার পাসওয়ার্ড দিলে কাজ করবে না
    API_KEY = "YOUR_GEMINI_API_KEY_HERE"

    agent = EmailManagerAgent(EMAIL, APP_PASSWORD, API_KEY)
    agent.connect_and_read()

৪. কীভাবে এটি আরও অ্যাডভান্সড করবেন?

  • বর্তমানে এটি শুধু রিপ্লাইটি প্রিন্ট করে। আপনি চাইলে smtplib ব্যবহার করে রিপ্লাইটি ড্রাফট (Draft) হিসেবে সেভ করতে পারেন অথবা সরাসরি সেন্ডও করে দিতে পারেন!
  • AI-কে দিয়ে ইমেইলের ধরন (Spam, Urgent, Casual) বের করে সে অনুযায়ী ফোল্ডার (Label) পরিবর্তন করানোর কাজও এই এজেন্টকে দিয়ে করাতে পারেন।