Skip to main content

Email interface for AI agents

Project description

📧 PyMailAI

Documentation Status PyPI version Python Tests Coverage Code style: black License: MIT Downloads

PyMailAI is a Python package that enables AI agents to use email as an input/output interface. It provides simple wrappers to:

  1. Get prompts from incoming emails
  2. Process them with your LLM of choice
  3. Send the responses back via email

Installation

pip install pymailai

Quick Start

Basic OpenAI Example

Here's how to use PyMailAI with OpenAI's API to create an email-based AI assistant:

import os
import asyncio
import openai
from pymailai import EmailAgent, EmailConfig
from pymailai.message import EmailData

# Configure OpenAI
openai.api_key = os.getenv("OPENAI_API_KEY")

async def process_with_openai(message: EmailData):
    """Process email content using OpenAI."""
    try:
        # Send email content to OpenAI
        completion = await openai.ChatCompletion.acreate(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "user", "content": message.body_text}
            ]
        )

        # Get AI response
        ai_response = completion.choices[0].message.content

        # Send response back via email
        return EmailData(
            message_id="",  # Will be generated by email server
            subject=f"Re: {message.subject}",
            from_address=message.to_addresses[0],
            to_addresses=[message.from_address],
            cc_addresses=[],
            body_text=ai_response,
            body_html=None,
            timestamp=message.timestamp,
            in_reply_to=message.message_id,
            references=[message.message_id]
        )
    except Exception as e:
        print(f"Error: {e}")
        return None

# Configure email settings
config = EmailConfig(
    imap_server="imap.gmail.com",
    smtp_server="smtp.gmail.com",
    email=os.getenv("EMAIL_ADDRESS"),
    password=os.getenv("EMAIL_PASSWORD")
)

# Create and run the agent
async with EmailAgent(config, message_handler=process_with_openai) as agent:
    print(f"AI Email Agent started. Monitoring {config.email}")
    try:
        while True:
            await asyncio.sleep(1)
    except KeyboardInterrupt:
        print("Stopping...")

Anthropic Computer-Use Agent

PyMailAI can be used with Anthropic's computer-use agent to create an email interface for interacting with the computer. Here's how to set it up:

  1. First, install the required dependencies:
pip install "pymailai[anthropic]"
  1. Set up your environment variables:
# Email settings
export EMAIL_ADDRESS="your-email@gmail.com"
export EMAIL_PASSWORD="your-app-password"
export EMAIL_IMAP_SERVER="imap.gmail.com"
export EMAIL_SMTP_SERVER="smtp.gmail.com"

# Anthropic API key
export ANTHROPIC_API_KEY="your-anthropic-key"
  1. Run the computer-use agent example:
python examples/anthropic_computer_agent.py

This will start an email agent that:

  • Monitors your inbox for new emails
  • Processes them using Anthropic's computer-use agent
  • Sends back the results via email
  • Supports all computer-use capabilities (bash commands, file editing, etc.)

Example usage:

  1. Send an email to your configured email address
  2. The agent will process your request using Anthropic's computer-use capabilities
  3. Results will be sent back as email replies
  4. The agent maintains conversation context between emails

Using with Any LLM Code

PyMailAI can wrap any existing LLM code. Just use the email body as your prompt:

async def your_llm_handler(message: EmailData):
    """Use any LLM code here."""

    # Get prompt from email
    prompt = message.body_text

    # Process with your LLM code
    response = your_llm_function(prompt)  # Your existing LLM code

    # Send result back via email
    return EmailData(
        message_id="",
        subject=f"Re: {message.subject}",
        from_address=message.to_addresses[0],
        to_addresses=[message.from_address],
        cc_addresses=[],
        body_text=response,
        body_html=None,
        timestamp=message.timestamp,
        in_reply_to=message.message_id,
        references=[message.message_id]
    )

Configuration

The package uses environment variables for configuration:

# Email settings
export EMAIL_ADDRESS="your-email@gmail.com"
export EMAIL_PASSWORD="your-app-password"
export EMAIL_IMAP_SERVER="imap.gmail.com"  # Optional, default: imap.gmail.com
export EMAIL_SMTP_SERVER="smtp.gmail.com"  # Optional, default: smtp.gmail.com

# Your LLM API keys
export OPENAI_API_KEY="your-openai-key"
export ANTHROPIC_API_KEY="your-anthropic-key"
# ... other API keys as needed

Documentation

Full documentation is available at https://tomatyss.github.io/PyMailAI/

More Examples

Check the examples/ directory for more examples:

  • openai_completion.py: Basic OpenAI integration
  • anthropic_computer_agent.py: Anthropic computer-use agent
  • ollama_completion.py: Local LLM integration with Ollama
  • simple_ai_agent.py: Template for custom agents

Ollama Integration

To use PyMailAI with Ollama's local LLM models:

  1. Install the required dependencies:
pip install "pymailai[ollama]"
  1. Install and start Ollama from https://ollama.ai, then pull the model:
ollama pull llama3.2
  1. Set up your environment variables:
export EMAIL_ADDRESS="your-email@example.com"
export EMAIL_PASSWORD="your-email-password"
export EMAIL_IMAP_SERVER="your-imap-server"
export EMAIL_SMTP_SERVER="your-smtp-server"
export EMAIL_IMAP_PORT="993"
export EMAIL_SMTP_PORT="465"
  1. Run the Ollama example:
python examples/ollama_completion.py

Contributing

Development Setup

  1. Install development dependencies:
make install

This will install all dev dependencies and set up pre-commit hooks.

Code Quality

We use pre-commit hooks to ensure code quality. The hooks run automatically on commit and include:

  • black (code formatting)
  • isort (import sorting)
  • flake8 (linting)
  • mypy (type checking)

To manually install the pre-commit hooks:

make install-hooks

Building Documentation

To build the documentation locally:

# Install Sphinx and theme
pip install sphinx sphinx-rtd-theme

# Build the docs
cd docs
make html

# View the docs (macOS)
open build/html/index.html

License

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

pymailai-0.1.3.tar.gz (39.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pymailai-0.1.3-py3-none-any.whl (18.3 kB view details)

Uploaded Python 3

File details

Details for the file pymailai-0.1.3.tar.gz.

File metadata

  • Download URL: pymailai-0.1.3.tar.gz
  • Upload date:
  • Size: 39.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for pymailai-0.1.3.tar.gz
Algorithm Hash digest
SHA256 4e07e744402f379686c5452cb968ce2b634f104c15fcc90d544b3655d4ff4300
MD5 b8149d8ad706ce3633063bf70203eb83
BLAKE2b-256 2d96386f6ae364aa9c91cab96257470d235faa60215b2489cc6c9bb40d395fee

See more details on using hashes here.

File details

Details for the file pymailai-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: pymailai-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 18.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for pymailai-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 8349f3220d68116185a056950c6079254c759ebfda08ce8fb50b1ca6cfc10b40
MD5 68077e497d4a0db20cc63eb4034f7ba9
BLAKE2b-256 c5fec869f2d56ec17f7c58c4ea9ee67e9adaee9083529cf40915b6c2c34c7987

See more details on using hashes here.

Supported by

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