2 min read

Python Imaplib Module

The imaplib module defines three classes, IMAP4, IMAP4_SSL and IMAP4_stream, which encapsulate a connection to an IMAP4 server and implement the IMAP4rev1 client protocol as defined in RFC 2060. It is used to access emails on a mail server.

Importing the Module

import imaplib

Connecting to a Server

To connect to an IMAP server securely, use IMAP4_SSL.

import imaplib

# Connect to the server (default port 993 for SSL)
mail = imaplib.IMAP4_SSL('imap.gmail.com')

Authentication

mail.login('your_email@gmail.com', 'your_password')

Selecting a Mailbox

Before searching or fetching, you must select a mailbox (folder).

# Select the inbox
status, messages = mail.select('INBOX')
print(f"Status: {status}, Total Messages: {messages[0].decode('utf-8')}")

Searching for Emails

You can search for emails using criteria like 'ALL', 'UNSEEN', 'FROM', etc.

# Search for all emails
typ, data = mail.search(None, 'ALL')

# Get the list of email IDs
mail_ids = data[0].split()
print(f"Found {len(mail_ids)} emails")

Fetching Emails

To retrieve the content of an email, use the fetch() method.

if mail_ids:
    # Fetch the latest email (last ID in the list)
    latest_email_id = mail_ids[-1]

    # Fetch the email body (RFC822)
    typ, data = mail.fetch(latest_email_id, '(RFC822)')

    # The data is a list of tuples. The email content is in the second element of the tuple.
    for response_part in data:
        if isinstance(response_part, tuple):
            print(response_part[1].decode('utf-8'))

Closing the Connection

mail.close()
mail.logout()

programming/python/python