Email interface for AI agents
Project description
📧 PyMailAI
PyMailAI is a Python package that enables AI agents to use email as an input/output interface. It provides simple wrappers to:
- Get prompts from incoming emails
- Process them with your LLM of choice
- 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:
- First, install the required dependencies:
pip install "pymailai[anthropic]"
- 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"
- 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:
- Send an email to your configured email address
- The agent will process your request using Anthropic's computer-use capabilities
- Results will be sent back as email replies
- 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 integrationanthropic_computer_agent.py: Anthropic computer-use agentollama_completion.py: Local LLM integration with Ollamasimple_ai_agent.py: Template for custom agents
Ollama Integration
To use PyMailAI with Ollama's local LLM models:
- Install the required dependencies:
pip install "pymailai[ollama]"
- Install and start Ollama from https://ollama.ai, then pull the model:
ollama pull llama3.2
- 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"
- Run the Ollama example:
python examples/ollama_completion.py
Contributing
Development Setup
- 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pymailai-0.1.2.tar.gz.
File metadata
- Download URL: pymailai-0.1.2.tar.gz
- Upload date:
- Size: 37.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dd4ef4d9a61bd51f18f55d27af812edd2813f523a6285cb8cea6ffff06ef271f
|
|
| MD5 |
0750811465971f083e09a6696314b211
|
|
| BLAKE2b-256 |
ea0020b42fb0fdbdeb49c5613df35ccbb11968fc7ec1262a6beaa44e9470e6b4
|
File details
Details for the file pymailai-0.1.2-py3-none-any.whl.
File metadata
- Download URL: pymailai-0.1.2-py3-none-any.whl
- Upload date:
- Size: 17.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f1ce2520adcf5564fb1263974cead46036fd1dd8fef19b1e0c17f8a9232e8e8
|
|
| MD5 |
f9f6014708d4b3cfce90bc5eab25e7dc
|
|
| BLAKE2b-256 |
1304d7e6efba0cc04cbd61edd4b2cf96a8ce0c653bc6aea308d1dca929719e9c
|