# What Gets Deployed: Email

Source: https://wraps.dev/docs/infrastructure/email

Every AWS resource Wraps creates when you run `wraps email init`, organized by configuration preset.

## Architecture Overview

Wraps deploys a serverless event processing pipeline to your AWS account. The architecture scales automatically and you only pay for what you use.

architecture.txt

```
# Email Event Processing Pipeline## SES --> EventBridge --> SQS + DLQ --> Lambda --> DynamoDB## 1. SES sends email and emits event notifications# 2. EventBridge captures configured event types# 3. SQS buffers events with dead-letter queue for failures# 4. Lambda processes events and writes to DynamoDB# 5. DynamoDB stores email history with configurable TTL
```

## Core Resources (All Presets)

These resources are created regardless of which preset you choose. They form the foundation of your email infrastructure.

IAM Role`wraps-email-role`

-   OIDC trust policy for Vercel (or IAM trust for AWS-native providers)
-   Base SES permissions: `ses:SendEmail`, `ses:SendRawEmail`, `ses:SendTemplatedEmail`, `ses:SendBulkTemplatedEmail`
-   Metrics access: `ses:GetSendStatistics`, `ses:GetAccount`
-   CloudWatch read access for monitoring
-   Unique external ID generated per deployment for security

SES Configuration Set`wraps-email-tracking`

-   Engagement tracking (open and click tracking)
-   Suppression list for bounces and complaints
-   Event destinations configured based on preset (EventBridge for Production+)

SES Email Identity

-   Domain identity with DKIM signing (RSA 2048-bit)
-   3 CNAME records generated for DKIM verification
-   Auto-verification when DNS records are configured
-   SPF and DMARC record guidance provided after deployment

## Starter Preset~$0.05/mo

The Starter preset deploys only the core resources listed above. It provides the essentials for sending emails with basic tracking.

Included Features

-   Open and click tracking via SES configuration set
-   Automatic bounce and complaint suppression
-   Domain verification with DKIM
-   Send statistics and account metrics

Best for

MVPs, side projects, and low-volume senders who need reliable email delivery without event history or real-time analytics.

## Production Preset~$2-5/mo

The Production preset includes everything in Starter plus a full event processing pipeline for real-time tracking and email history.

EventBridge Rule

-   Captures 6 SES event types: SEND, DELIVERY, OPEN, CLICK, BOUNCE, COMPLAINT
-   Routes events to SQS for buffered processing
-   Managed rule with automatic scaling

SQS Queue + Dead Letter Queue

Main Queue: `wraps-email-events`

-   Buffers events between EventBridge and Lambda
-   3 retry attempts before sending to DLQ

Dead Letter Queue: `wraps-email-events-dlq`

-   Captures failed messages for inspection
-   14-day message retention

Lambda Function`wraps-email-processor`

-   Runtime: Node.js 20
-   Memory: 128 MB
-   Timeout: 30 seconds
-   Triggered by SQS, writes processed events to DynamoDB
-   Bundled with esbuild during deployment

DynamoDB Table`wraps-email-history`

-   Partition key: `messageId`
-   Sort key: `timestamp`
-   TTL: 90-day automatic expiration
-   Billing: On-demand (pay per request)
-   Stores delivery status, opens, clicks, bounces, and complaints

Recommended for most applications

The Production preset gives you full visibility into email delivery with real-time event tracking, a 90-day email history, and reputation metrics through the dashboard.

## Enterprise Preset~$50-100/mo

The Enterprise preset includes everything in Production plus dedicated IP, extended history retention, and full event type coverage.

Dedicated IP Address

-   SES dedicated IP pool assigned to your account
-   Full control over sender reputation
-   Requires IP warming: ramp up sending volume gradually over 2-4 weeks
-   ~$24.95/mo per dedicated IP (billed by AWS)

Extended History

-   365-day TTL on DynamoDB (vs 90 days in Production)
-   Full year of email delivery history
-   Useful for compliance and audit requirements

All 10 SES Event Types

Production tracks 6 event types. Enterprise adds 4 more:

SEND

DELIVERY

OPEN

CLICK

BOUNCE

COMPLAINT

REJECT

RENDERING\_FAILURE

DELIVERY\_DELAY

SUBSCRIPTION

## Cost Breakdown

Estimated monthly costs by email volume. All costs are billed directly by AWS to your account.

| Volume | Starter | Production | Enterprise |
| --- | --- | --- | --- |
| 1K/mo | ~$0.15 | ~$2.15 | ~$52 |
| 10K/mo | ~$1.05 | ~$3.05 | ~$53 |
| 100K/mo | ~$10.05 | ~$14 | ~$64 |
| 1M/mo | ~$100 | ~$110 | ~$175 |

AWS SES pricing

SES charges $0.10 per 1,000 emails sent. Infrastructure costs (DynamoDB, Lambda, SQS) are additional but minimal at most volumes. Enterprise costs include ~$24.95/mo for a dedicated IP address.

## Resource Tags

All resources created by Wraps are tagged for easy identification and cost tracking in the AWS Console.

| Tag Key | Tag Value | Description |
| --- | --- | --- |
| `ManagedBy` | `wraps-cli` | Identifies resources managed by Wraps |

You can filter resources in the AWS Console by this tag to see everything Wraps has deployed. This makes it easy to audit, track costs, and manage your infrastructure.

## IAM Policy Details

Wraps follows the principle of least privilege. Each preset grants only the permissions required for its features.

Base IAM Policy (All Presets)

Additional Permissions (Production & Enterprise)

## Next Steps

CLI Reference

All available email CLI commands and options.

[View CLI Docs](https://wraps.dev/docs/cli-reference/email)

Email SDK

Send emails with the TypeScript SDK after deploying.

[View SDK Docs](https://wraps.dev/docs/sdk-reference)

Configuration Presets

Compare presets and customize your configuration.

[View Guide](https://wraps.dev/docs/guides/configuration-presets)

Infrastructure as Code

Deploy email infrastructure with [CDK](https://wraps.dev/docs/cdk-reference) or [Pulumi](https://wraps.dev/docs/pulumi-reference) instead of the CLI.

[View CDK Docs](https://wraps.dev/docs/cdk-reference)

### Need Help?

If you run into any issues, check our GitHub discussions or open an issue.

[Get Help](https://github.com/wraps-team/wraps/discussions)
