====== Email client with Python ====== To build email client, Python have built-in ''smtplib'' and ''email.message'' for sending emails. For receiving emails, we need to install ''imapclient'' and ''pyzmail36''. You can install them using pip. This setup gives us both sending and inbox reading capabilities.” ==== Sending Email (SMTP) ==== * Use ''smtplib'' and ''EmailMessage'' * Connect to ''smtp.gmail.com'' (SSL port 465) * Login using your email and app password * Send email with subject and body **Requirements:** //No need to install for sending — Python's built-in smtplib and email libraries are enough. **Example Code:** import smtplib from email.message import EmailMessage def send_email(sender, password, recipient, subject, body): msg = EmailMessage() msg['From'] = sender msg['To'] = recipient msg['Subject'] = subject msg.set_content(body) with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp: smtp.login(sender, password) smtp.send_message(msg) print("Email sent!") # Example use send_email( sender='your_email@gmail.com', password='your_app_password', recipient='someone@example.com', subject='Hello from Python', body='This is a test email sent from a Python email client.' ) ==== Receiving Emails with IMAP ==== To read emails from an inbox you can use the IMAP protocol. * Use ''imapclient'' and ''pyzmail36'' * Connect to ''imap.gmail.com'' * Login and select mailbox (e.g., INBOX) * Fetch and display recent emails **Requirements:** pip install imapclient pyzmail36 **Example Code:** import imapclient import pyzmail def read_inbox(email, password, folder='INBOX'): imap = imapclient.IMAPClient('imap.gmail.com', ssl=True) imap.login(email, password) imap.select_folder(folder, readonly=True) uids = imap.search(['ALL']) # You can also use ['UNSEEN'] print(f"Found {len(uids)} messages in {folder}.") for uid in uids[-5:]: # Read last 5 messages raw = imap.fetch([uid], ['BODY[]', 'FLAGS']) message = pyzmail.PyzMessage.factory(raw[uid][b'BODY[]']) print("From:", message.get_addresses('from')) print("Subject:", message.get_subject()) if message.text_part: print("Body:", message.text_part.get_payload().decode(message.text_part.charset)) print("-" * 50) imap.logout() # Example use read_inbox('your_email@gmail.com', 'your_app_password') ==== Read/Send Email example ==== Now we will create a small program to send and receive email. To make our program interactive, we create a simple menu where users can choose to send an email or read their inbox. This makes the script more user-friendly and practical. **Steps:** * Create a Console UI to choose sending or reading * Input email, password, recipient, subject, etc. * Call functions based on selection def menu(): print("=== Python Email Client ===") print("1. Send Email") print("2. Read Inbox") choice = input("Choose (1 or 2): ") email = input("Your Email: ") password = input("App Password: ") if choice == '1': to = input("To: ") subject = input("Subject: ") body = input("Body: ") send_email(email, password, to, subject, body) elif choice == '2': read_inbox(email, password) else: print("Invalid option.") menu()