Skip to main content

A Python package for managing IMAP connections and email operations.

Project description

python-sage-imap

Black Pylint codecov

PyPI release Supported Python versions Documentation License GitHub last commit

Table of Contents

Introduction

python-sage-imap is a robust Python package designed for managing IMAP connections and performing various email operations. It provides easy-to-use interfaces for managing email folders, flags, searching emails, and sending emails using SMTP. This package is ideal for developers looking to integrate email functionalities into their applications seamlessly.

Features

  • Context manager for managing IMAP connections
  • Handling IMAP flags (add/remove)
  • Managing IMAP folders (create/rename/delete/list)
  • Searching emails with various criteria
  • Sending emails using SMTP with support for attachments and templates
  • Parsing and handling email messages

Installation

To install python-sage-imap, use pip:

pip install python-sage-imap

Configuration

Before using the package, you need to set up logging for better debugging and monitoring:

import logging

logging.basicConfig(level=logging.DEBUG)

Examples

Example 1: Creating an IMAP Client

This example demonstrates how to create an IMAP client using the IMAPClient class.

from sage_imap.services import IMAPClient

with IMAPClient('imap.example.com', 'username', 'password') as client:
    # Use the client for IMAP operations
    capabilities = client.capability()
    print(f"Server capabilities: {capabilities}")

    status, messages = client.select("INBOX")
    print(f"Selected INBOX with status: {status}")

Explanation

This example illustrates a low-level approach to working with IMAP. If you want to use imaplib directly but need the added convenience of managing the connection lifecycle, the IMAPClient class is a perfect choice. It allows you to create a connection with the IMAP server and then use all the capabilities of imaplib to customize your workflow.

  1. IMAPClient Context Manager:

    • The IMAPClient class is used within a context manager (with statement). This ensures that the connection to the IMAP server is properly opened and closed.
    • When the with block is entered, the connection to the IMAP server is established, and the user is authenticated.
    • When the with block is exited, the connection is automatically closed, ensuring that resources are cleaned up properly.
  2. Why Use IMAPClient:

    • The IMAPClient exists to simplify the management of IMAP connections. By using it as a context manager, you don't have to worry about manually opening and closing the connection. This reduces the risk of resource leaks and makes your code cleaner and more maintainable.
    • Within the context manager, you have access to the imaplib capabilities directly through the client object. This allows you to perform various IMAP operations seamlessly.
  3. Capabilities and Select Methods:

    • The .capability() method is called to retrieve the server's capabilities, providing information about what commands and features the server supports.
    • The .select("INBOX") method is used to select the "INBOX" mailbox for further operations. It returns the status of the selection and the number of messages in the mailbox.

By using the IMAPClient class in this way, you can take advantage of the full power of imaplib while benefiting from the convenience and safety of automatic connection management.

Example 2: Working with Folder Service

This example demonstrates how to work with folders using the IMAPFolderService.

from sage_imap.services.client import IMAPClient
from sage_imap.services.folder import IMAPFolderService

with IMAPClient('imap.example.com', 'username', 'password') as client:
    folder_service = IMAPFolderService(client)

    # Create a new folder
    folder_service.create_folder('NewFolder')

    # Rename the folder
    folder_service.rename_folder('NewFolder', 'RenamedFolder')

    # List all folders
    folders = folder_service.list_folders()
    print(f"Folders: {folders}")

    # Delete the folder
    folder_service.delete_folder('RenamedFolder')

Example 3: Working with Mailbox Methods

Below are usage examples of the IMAPClient and IMAPMailboxService classes, demonstrating their context manager capabilities and various methods:

IMAPMailboxService Example

The IMAPMailboxService class provides methods for managing mailbox operations such as selecting, closing, checking, deleting, moving, and getting status of mailboxes.

Purpose: This class allows for performing various mailbox-related operations within the context of an IMAP connection, ensuring proper error handling and cleanup.

Example Usage with Nested Context Managers:

from sage_imap.services.client import IMAPClient
from sage_imap.services.mailbox import IMAPMailboxService
from sage_imap.helpers.mailbox import DefaultMailboxes
from sage_imap.helpers.message import MessageSet

from helpers.exceptions import IMAPClientError, IMAPMailboxCheckError, IMAPMailboxClosureError

username = 'username'
password = 'password'

try:
    with IMAPClient('imap.example.com', username, password) as client:
        with IMAPMailboxService(client) as mailbox:
            # Select a mailbox
            mailbox.select_mailbox(DefaultMailboxes.INBOX)

            # Delete messages temporarily (move to trash)
            msg_set = MessageSet('1,2,3')
            mailbox.delete_temporarily(msg_set)

            # Restore messages from trash to original folder
            mailbox.restore_from_trash(msg_set, DefaultMailboxes.INBOX)

            # Permanently delete messages
            mailbox.delete_permanently(msg_set)

except IMAPClientError as e:
    print(f"An error occurred with the IMAP client: {e}")

Methods of IMAPMailboxService Explained

  1. select_mailbox(mailbox=DefaultMailboxes.INBOX)

    • Purpose: Selects the specified mailbox for subsequent operations.
    • Example:
      mailbox_service.select_mailbox('INBOX')
      
  2. close_mailbox()

    • Purpose: Closes the currently selected mailbox to ensure all changes are saved and the connection is properly terminated.
    • Example:
      mailbox_service.close_mailbox()
      
  3. check()

    • Purpose: Sends a CHECK command to the IMAP server to synchronize the mailbox.
    • Example:
      mailbox_service.check()
      
  4. delete_temporarily(msg_set: MessageSet)

    • Purpose: Marks messages for deletion and moves them to the trash folder.
    • Example:
      mailbox_service.delete_temporarily(MessageSet('1,2,3'))
      
  5. delete_permanently(msg_set: MessageSet)

    • Purpose: Permanently deletes messages marked for deletion.
    • Example:
      mailbox_service.delete_permanently(MessageSet('1,2,3'))
      
  6. move_to_folder(msg_set: MessageSet, folder: str)

    • Purpose: Moves messages to the specified folder.
    • Example:
      mailbox_service.move_to_folder(MessageSet('1,2,3'), 'Archive')
      
  7. restore_from_trash(msg_set: MessageSet, original_folder: str)

    • Purpose: Restores messages from the trash to the original folder.
    • Example:
      mailbox_service.restore_from_trash(MessageSet('1,2,3'), 'INBOX')
      
  8. **get_mailbox_status(mailbox=DefaultMailboxes.INBOX, *status_items: List[MailboxStatusItems

])**

  • Purpose: Gets the status of the specified mailbox based on the provided status items.
  • Example:
    status = mailbox_service.get_mailbox_status('INBOX', MailboxStatusItems.MESSAGES)
    print(f"Mailbox status: {status}")
    

By utilizing these classes and methods, you can manage your IMAP mailboxes effectively and perform necessary email operations in a robust and error-handling manner.

License

This project is licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_sage_imap-0.4.2.tar.gz (24.8 kB view details)

Uploaded Source

Built Distribution

python_sage_imap-0.4.2-py3-none-any.whl (26.1 kB view details)

Uploaded Python 3

File details

Details for the file python_sage_imap-0.4.2.tar.gz.

File metadata

  • Download URL: python_sage_imap-0.4.2.tar.gz
  • Upload date:
  • Size: 24.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.4 Windows/11

File hashes

Hashes for python_sage_imap-0.4.2.tar.gz
Algorithm Hash digest
SHA256 7e98b53c1de1fa63b3494b7f53fe8e011d9d676ca0cc29b6a88d05ffc270cdc6
MD5 c9d354ce5b0569c7eb4c5bb76246786f
BLAKE2b-256 8f0c6e8d497a5b79b2ce903af3d2a7703bb3068f1310008b51bd5af2161dec55

See more details on using hashes here.

File details

Details for the file python_sage_imap-0.4.2-py3-none-any.whl.

File metadata

File hashes

Hashes for python_sage_imap-0.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a9d4cbea45d7aa81590f10e42ed4a89fbd2cb7feca001a1ac196c1bbb9608681
MD5 132ee09e8c39268ed858d0712923bccc
BLAKE2b-256 4864ce9d2838ef35e1c5b157d0e1d87bfe6d108522bda230b710100ec5e3d8e0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page