Skip to main content
Enable Agno agents programmatically send and manage emails with AWS SES.

Prerequisites

(Click for details)
  • Go to AWS SES Console > Verified Identities > Create Identity
  • Choose “Domain” and follow DNS verification steps
  • Add DKIM and SPF records to your domain’s DNS
a. Create an IAM user:
  • Go to IAM Console > Users > Add User
  • Enable “Programmatic access”
  • Attach ‘AmazonSESFullAccess’ policy
b. Set up credentials (choose one method):
Use AWS CLI:
aws configure

# Enter your AWS Access Key ID
# Enter your AWS Secret Access Key
# Enter your default region
uv pip install boto3 agno
  • sender_email: Your verified sender email address
  • sender_name: Display name that appears in email clients
  • region_name: AWS region where SES is set up (e.g., ‘us-east-1’, ‘ap-south-1’)

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
    """

Run the Example

# Clone and setup repo
git clone https://github.com/agno-agi/agno.git
cd agno/cookbook/91_tools

# Create and activate virtual environment
./scripts/demo_setup.sh
source .venvs/demo/bin/activate

python aws_ses_tools.py
For details, see AWS SES cookbook.