Examples
========
This section provides examples of how to use pymailai in different scenarios.
OpenAI Integration
----------------
Basic Example
~~~~~~~~~~~
This example shows how to create a simple email agent that processes incoming emails using OpenAI's GPT model
and sends back AI-generated responses.
.. literalinclude:: ../../examples/openai_completion.py
:language: python
:caption: OpenAI Email Agent Example
:name: openai_example
:linenos:
Advanced Example with Email Threading
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This example shows how to create an email agent that maintains proper email threading, including quoted
original messages and correct threading metadata.
.. literalinclude:: ../../examples/openai_completion_with_threading.py
:language: python
:caption: OpenAI Email Agent with Threading Example
:name: openai_threading_example
:linenos:
Key features of the threading example:
- Uses ``create_reply()`` to generate properly formatted responses
- Includes the original message as quoted text
- Sets correct threading metadata (References and In-Reply-To headers)
- Ensures emails appear properly threaded in email clients
Email Threading Best Practices
~~~~~~~~~~~~~~~~~~~~~~~~~~
When creating email responses, it's important to maintain proper threading for a better user experience:
1. Include the original message as quoted text using ``create_reply()``
2. Preserve threading metadata for email client compatibility
3. Maintain conversation context with proper message quoting
4. Keep CC recipients in the loop
Example of creating a threaded reply:
.. code-block:: python
# Create a properly threaded reply
reply = message.create_reply(
reply_text="Your response here",
include_history=True # Include quoted original message
)
reply.from_address = "your-email@example.com"
Running the Examples
~~~~~~~~~~~~~~~~
To run these examples:
1. Install the required dependencies:
.. code-block:: bash
pip install pymailai[openai]
2. Set up the required environment variables:
.. code-block:: bash
export OPENAI_API_KEY="your-openai-api-key"
export EMAIL_ADDRESS="your-email@example.com"
export EMAIL_PASSWORD="your-email-password"
# Optional: Configure custom email servers
export EMAIL_IMAP_SERVER="imap.gmail.com"
export EMAIL_SMTP_SERVER="smtp.gmail.com"
3. Run the example:
.. code-block:: bash
python examples/openai_completion.py
The agent will monitor the specified email account and:
1. Process any new incoming emails
2. Send the email content to OpenAI's API
3. Send back the AI-generated response to the original sender
Anthropic Integration
-------------------
This example shows how to create an email agent that processes incoming emails using Anthropic's Claude model
and sends back AI-generated responses.
.. literalinclude:: ../../examples/anthropic_completion.py
:language: python
:caption: Anthropic Email Agent Example
:name: anthropic_example
:linenos:
To run this example:
1. Install the required dependencies:
.. code-block:: bash
pip install pymailai[anthropic]
2. Set up the required environment variables:
.. code-block:: bash
export ANTHROPIC_API_KEY="your-anthropic-api-key"
export EMAIL_ADDRESS="your-email@example.com"
export EMAIL_PASSWORD="your-email-password"
# Optional: Configure custom email servers
export EMAIL_IMAP_SERVER="imap.gmail.com"
export EMAIL_SMTP_SERVER="smtp.gmail.com"
3. Run the example:
.. code-block:: bash
python examples/anthropic_completion.py
The agent will monitor the specified email account and:
1. Process any new incoming emails
2. Send the email content to Anthropic's API
3. Send back the AI-generated response to the original sender
Gmail Authentication
-----------------
pymailai supports two methods for Gmail authentication:
1. OAuth2 (for personal Gmail accounts)
2. Service Account (for Google Workspace accounts)
OAuth2 Authentication
~~~~~~~~~~~~~~~~~~
This example shows how to use Gmail OAuth2 authentication for personal Gmail accounts.
.. literalinclude:: ../../examples/gmail_credentials.py
:language: python
:caption: Gmail OAuth2 Example
:name: gmail_oauth2_example
:linenos:
To use Gmail with OAuth2 credentials:
1. Set up a Google Cloud Project and enable the Gmail API:
a. Go to the `Google Cloud Console `_
b. Create a new project or select an existing one
c. Enable the Gmail API
d. Create OAuth2 credentials:
- Click "Create Credentials" and select "OAuth client ID"
- Choose "Desktop application" as the application type
- Download the credentials JSON file
e. Configure the OAuth consent screen:
- Add your email address as a test user
- Set the necessary scopes (gmail.modify, gmail.compose, gmail.send)
2. Get a refresh token using the provided helper script:
.. code-block:: bash
# First time setup - this will create the credentials file
export GMAIL_CLIENT_ID="your-client-id"
export GMAIL_CLIENT_SECRET="your-client-secret"
export GMAIL_REFRESH_TOKEN="your-refresh-token"
export GMAIL_ADDRESS="your-gmail@gmail.com"
# Run the example to save credentials
python examples/gmail_credentials.py
Service Account Authentication
~~~~~~~~~~~~~~~~~~~~~~~~~~
This example shows how to use Gmail service account authentication for Google Workspace accounts.
.. literalinclude:: ../../examples/gmail_service_account.py
:language: python
:caption: Gmail Service Account Example
:name: gmail_service_account_example
:linenos:
To use Gmail with service account authentication:
1. Set up Google Cloud Project:
a. Go to the `Google Cloud Console `_
b. Create a new project or select an existing one
c. Enable the Gmail API
d. Create a service account:
- Click "Create Service Account"
- Download the JSON key file
e. Configure domain-wide delegation:
- Go to Google Workspace Admin Console
- Security -> API Controls -> Domain-wide Delegation
- Add the service account's client ID
- Add scope: ``https://www.googleapis.com/auth/gmail.modify``
2. Run the example:
.. code-block:: bash
# Update SERVICE_ACCOUNT_FILE and USER_EMAIL in the example
python examples/gmail_service_account.py
The service account provides:
- Better security through domain-wide delegation
- No need for user interaction
- Support for multiple user impersonation
- Direct Gmail API access
Logging Configuration
------------------
pymailai includes comprehensive logging for debugging and monitoring. You can configure the logging
level and output format:
.. code-block:: python
import logging
# Configure logging for the entire package
logging.basicConfig(
level=logging.INFO, # or logging.DEBUG for more detailed output
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
# Or configure logging for specific components
logger = logging.getLogger('pymailai.client')
logger.setLevel(logging.DEBUG)
The following components have dedicated loggers:
- pymailai.client: Email client operations (SMTP/IMAP connections)
- pymailai.agent: AI agent activities (message processing)
- pymailai.gmail: Gmail-specific operations (OAuth2, service accounts)
- pymailai.gmail_client: Gmail API operations
Example log output at INFO level:
.. code-block:: text
2024-03-20 10:15:30,123 - pymailai.gmail - INFO - Gmail service initialized for user@domain.com
2024-03-20 10:15:30,456 - pymailai.gmail_client - INFO - Found 1 unread messages
2024-03-20 10:15:30,789 - pymailai.agent - INFO - Processing message from: sender@example.com
2024-03-20 10:15:31,012 - pymailai.gmail_client - INFO - Message sent successfully with ID: msg-123
Ollama Integration
----------------
This example shows how to create an email agent that processes incoming emails using Ollama's local LLM models
and sends back AI-generated responses.
.. literalinclude:: ../../examples/ollama_completion.py
:language: python
:caption: Ollama Email Agent Example
:name: ollama_example
:linenos:
To run this example:
1. Install the required dependencies:
.. code-block:: bash
pip install pymailai[ollama]
2. Install and start Ollama:
Follow the instructions at https://ollama.ai to install Ollama for your platform.
Then pull your desired model:
.. code-block:: bash
ollama pull llama3.2 # Latest Llama version
3. Set up the required environment variables:
.. code-block:: bash
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" # Default SSL/TLS port for IMAP
export EMAIL_SMTP_PORT="465" # Default SSL/TLS port for SMTP
4. Run the example:
.. code-block:: bash
python examples/ollama_completion.py
The agent will monitor the specified email account and:
1. Process any new incoming emails
2. Send the email content to the local Ollama instance
3. Send back the AI-generated response to the original sender
Email Tool Integration
-------------------
This example shows how to use the email sending tool with AI models like Anthropic's Claude and OpenAI's GPT.
.. literalinclude:: ../../examples/email_tool_example.py
:language: python
:caption: Email Tool Integration Example
:name: email_tool_example
:linenos:
Key features of the email tool:
- Support for Anthropic, OpenAI, and Ollama models
- Markdown formatting support in email body
- Optional CC recipients
- Proper error handling and response tracking
To run this example:
1. Install the required dependencies:
.. code-block:: bash
pip install pymailai[anthropic,openai]
2. Set up the required environment variables and dependencies:
.. code-block:: bash
# For Anthropic example
export ANTHROPIC_API_KEY="your-anthropic-api-key"
# For OpenAI example
export OPENAI_API_KEY="your-openai-api-key"
# For Ollama example
# Install Ollama from https://ollama.ai
ollama pull llama3.1 # Pull the model you want to use
# Gmail credentials (see Gmail Authentication section)
export GMAIL_CLIENT_ID="your-client-id"
export GMAIL_CLIENT_SECRET="your-client-secret"
export GMAIL_REFRESH_TOKEN="your-refresh-token"
export GMAIL_ADDRESS="your-gmail@gmail.com"
3. Run the example(s):
.. code-block:: bash
# Run Anthropic example (default)
python examples/email_tool_example.py
# Or run OpenAI example
# Modify email_tool_example.py to use example_openai()
# Or run Ollama example
# Modify email_tool_example.py to use example_ollama()
The example demonstrates:
1. Setting up email tool schemas for AI models
2. Processing tool calls from AI responses
3. Executing email sending with proper error handling
Simple AI Agent
--------------
For a simpler example without external AI providers, check out the :file:`examples/simple_ai_agent.py` file
in the repository. This example shows the basic structure of creating a custom message handler.