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)
- 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
- Choose "Email Address" verification
- Click verification link sent to your email
Use an AWS profile, environment credentials, or a runtime IAM role with ses:SendEmail permission for your sender identity. The toolkit uses Boto3's credential chain.
For local credentials, choose one method:
Use AWS CLI:
aws configure
# Enter your AWS Access Key ID
# Enter your AWS Secret Access Key
# Enter your default regionSet environment variables:
export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY
export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEYuv pip install boto3 ddgs openai agno- Export your OpenAI API key:
export OPENAI_API_KEY=your_openai_key.
sender_email: Your verified sender email addresssender_name: Display name that appears in email clientsregion_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
"""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.pyFor details, see AWS SES cookbook.