AWS SES

Research AI news with web search and email the summary from a verified SES sender address using AWSSESTool.

Enable Agno agents to send emails programmatically with AWS SES.

Prerequisites

(Click for details)


from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.aws_ses import AWSSESTool
from agno.tools.websearch import WebSearchTools

# ---------------------------------------------------------------------------
# Create Agent
# ---------------------------------------------------------------------------


# Configure email settings
sender_email = "coolmusta@gmail.com"  # Your verified SES email
sender_name = "AI Research Updates"
region_name = "us-west-2"  # Your AWS region

# Create an agent that can research and send personalized email updates
agent = Agent(
    name="Research Newsletter Agent",
    model=OpenAIChat(id="gpt-4o"),
    description="""You are an AI research specialist who creates and sends personalized email 
    newsletters about the latest developments in artificial intelligence and technology.""",
    instructions=[
        "When given a prompt:",
        "1. Extract the recipient's email address carefully. Look for the complete email in format 'user@domain.com'.",
        "2. Research the latest AI developments using DuckDuckGo",
        "3. Compose a concise, engaging email with:",
        "   - A compelling subject line",
        "   - 3-4 key developments or news items",
        "   - Brief explanations of why they matter",
        "   - Links to sources",
        "4. Format the content in a clean, readable way",
        "5. Send the email using AWS SES. IMPORTANT: The receiver_email parameter must be the COMPLETE email address including the @ symbol and domain (e.g., if the user says 'send to mustafa@agno.com', you must use receiver_email='mustafa@agno.com', NOT 'mustafacom' or any other variation).",
    ],
    tools=[
        AWSSESTool(
            sender_email=sender_email, sender_name=sender_name, region_name=region_name
        ),
        WebSearchTools(),
    ],
    markdown=True,
)

# Example 1: Send an email

# ---------------------------------------------------------------------------
# Run Agent
# ---------------------------------------------------------------------------
if __name__ == "__main__":
    agent.print_response(
        "Research AI developments in healthcare from the past week with a focus on practical applications in clinical settings. Send the summary via email to mustafa@agno.com"
    )

    """
    Troubleshooting:
    - If emails aren't sending, check:
      * Both sender and recipient are verified (in sandbox mode)
      * AWS credentials are correctly configured
      * You're within sending limits
      * Your IAM user has correct SES permissions
    - Use SES Console's 'Send Test Email' feature to verify setup
    """

Configure your test email

Before running, replace sender_email, region_name, and the recipient in the final prompt with your verified sender, its SES region, and your own test recipient. When the account is in the SES sandbox, recipients must also be verified or use the SES mailbox simulator. The agent can send the message as part of the run.

Run the Example

# Clone and setup repo
git clone https://github.com/agno-agi/agno.git
cd agno
git checkout d703c34f3abf3c41275d3fb2da6e0518a8881f24

# Create and activate virtual environment
./scripts/demo_setup.sh
source .venvs/demo/bin/activate
uv pip install -U boto3 ddgs

python cookbook/91_tools/aws_ses_tools.py

For details, see AWS SES cookbook.