AWS Messaging Blog
AT&T email-to-text service migration: AWS solution implementation
Email-to-text services allow businesses to send short message service (SMS) messages through email, critical for automatic notifications, customer service, and operational workflows. These services process over 1.2 billion messages annually across U.S. carriers, with AT&T supporting 34% of this volume through 2024. AT&T’s deprecation of email-to-text and text-to-email services impacts businesses that rely on these communication channels. This blog post outlines an Amazon Web Services (AWS) solution to maintain service continuity for customers.
AT&T discontinued their email-to-text and text-to-email services in Q2 2025, which will impact about 23,000 business customers. Organizations rely on these communication channels for critical workflows and need a quick solution to maintain business continuity. By the numbers:
- Average message volume: 50,000 texts per customer monthly
- Critical use cases: Appointment reminders, security alerts, and system notifications
- Regulatory requirements mandate message retention and delivery confirmation
Solution architecture
The following diagram shows the architecture for the solution:
In order to prevent abuse, this solution creates an SES Mail Manager Ingress Point that requires SMTP authorization. This prevents anyone with knowledge of the email domain to send SMS messages. Customers can make use of Mail Manager VPC Connectivity to expose this functionality to internal applications and users. You can also optionally enable the SES Mail Manager Add Ons to scan for viruses and SPAM before processing inbound emails.
Email-to-SMS architecture flow:
- An email is sent to
[phone-number]@[your-domain.com]
- Amazon Simple Email Service (Amazon SES) routes emails to the Mail Manager ingress endpoint
- The email is written to an Amazon Simple Storage Service (Amazon S3) bucket
- An Amazon S3 event notification triggers an AWS Lambda function
- Lambda extracts the email content, formats the phone number, and sends an SMS message using AWS End User Messaging
- Message details are stored in DynamoDB for tracking
System components in this solution:
- Processing: Mail Manager applies rules to incoming emails
- Storage: Amazon S3 stores emails securely
- Computation: Lambda processes stored emails
- Identification: Amazon DynamoDB lookup matches the sender email to phone number
- Delivery: AWS End User Messaging User Messaging sends an SMS message to the recipient
This architecture, which uses simple notification service (SNS), is suitable for SMS-to-email. While this post and the AWS CloudFormation template primarily focus on email-to-SMS implementation, the SMS-to-email flow works as follows:
SMS-to-email flow:
- A user replies to an SMS message
- AWS End User Messaging SMS service captures the message and publishes it to an SNS topic
- SNS triggers a Lambda function
- Lambda formats the message and sends an email through Amazon SES
- The email is delivered to the original sender
The solution
The solution was to build an email-to-text service using AWS core services. The architecture routes emails through an Amazon SES Mail Manager ingress endpoint. After receiving an email, Mail Manager processes it using defined business rules and stores it in Amazon S3. This triggers a Lambda function to fetch the phone number associated with the email address and send an SMS to that phone number. When successful, it stores data such as the email address, phone number, and message ID from the sent text message in DynamoDB.
Estimated setup time: 15–20 minutes
Prerequisites
To deploy the solution described in this post, you must have the following in place:
- Administrator-level access to an AWS account.
- A domain or subdomain (you need ownership of the domain) to create an SES verified identity (it’s recommended to use subdomains for testing).
- An origination identity that supports two-way messaging, following Choosing an origination identity for two-way messaging use cases. Simulator phone numbers are available if you are in the United States.
- A mobile phone to receive SMS messages.
- An email address to receive emails.
Step 1: Set up Amazon SES Verified Identity
Start by setting up an Amazon SES verified identity.
- Sign in to the AWS Management Console.
- Navigate to Amazon SES service.
- In the navigation pane, go to Configuration and choose Identities (skip this step if you have a verified identity).
- If you do not have a verified identity, choose e.
- Review this post to learn how to verify an identity. Best practice is to verify a domain identity. This will authenticate your domain and improve deliverability. An email address identity, while simpler, won’t be authenticated through DomainKeys Identified Mail (DKIM), which might decrease deliverability.
Reference: Creating and verifying identities in Amazon SES
- Confirm that the status of your domain identity is Verified before proceeding to the next step.
Step 2: Deploy the email-to-SMS CloudFormation template
Use the following steps to create a CloudFormation stack that deploys all the required components for email-to-SMS functionality:
- Sign in to your AWS account.
- Download the email-to-sms.yaml CloudFormation template file.
- Navigate to the CloudFormation console.
- Choose Create stack and select With new resources (standard).
- Prerequisite: Prepare template is selected as Choose an existing template.
- Under Specify template, choose Upload a template file and upload the
email-to-sms.yaml
file you downloaded earlier. Choose Next. - For Stack name, enter
Email-To-SMS-Stack
. - Configure the following parameters:
- e: Enter the SES verified domain name or a verified email address.
- OriginationPhoneNumberId: Enter the AWS End User Messaging SMS phone number ID that you plan to use to send SMS messages.
- Go to AWS End User Messaging, under Phone Numbers, select your number and find Phone number ID.
- Go to AWS End User Messaging, under Phone Numbers, select your number and find Phone number ID.
- DestinationPhoneNumber: Enter the destination phone number to receive SMS messages.
- Choose Next.
- (Optional) Add tags to help identify and organize your AWS resources.
- Select Acknowledge All checkbox and choose Next.
- Review the configuration and choose Submit.
- Wait for the stack creation to complete. You can monitor the progress in the CloudFormation console
Step 3: Verify deployed stack services
After successful CloudFormation template deployment, verify the following resources and configurations:
- A DynamoDB table is created with the name
<stackname>-email-to-sms-db
- A Lambda function is created with the name
<stackname>-<accountnumber>-<awsregion>-process-email-to-sms
- The Lambda function has the following AWS Identity and Access Management (IAM)role policies attached:
s3:GetObject
dynamodb:PutItem
sms-voice:SendTextMessage
kms:Decrypt
for Lambda encryption keys.- IAM permissions for dead letter queue (if configured).
- S3 buckets are created:
- Main bucket:
<stackname>-<accountnumber>-<awsregion>-emailtosms-storage
- Logging bucket:
<stackname>-<accountnumber>-<awsregion>-emailtosms-logging
- Main bucket:
- In Amazon SES:
- A receipt rule set is created named
<stackname>-EmailToSms-Rule-Set
- The receipt rule is configured to:
- Write messages in the S3 bucket.
- Invoke the Lambda function.
- Traffic policy is created named
<stackname>-EmailToSms-Traffic-Policy
- The Rule set and traffic policy are configured in the ingress point
<stackname>-EmailToSms-Ingress-Point
- CAUTION: Testing this solution requires access to modify mail exchange (MX) DNS records for your domain.
- Follow these instructions for configuring MX record
- Potential impact: Changes to MX records can interrupt email delivery to your primary domain.
- Best practice: We strongly recommend creating a dedicated subdomain (such as testing.example.com) rather than using your primary domain (example.com) for testing purposes. This approach prevents disruption to your organization’s regular email service
- A receipt rule set is created named
Additional verifications:
- Verify that the S3 bucket policies are correctly set
- Verify that S3 bucket logging is on and working
- Check the Lambda function’s environment variables
- Monitor Amazon CloudWatch logs for any errors
Step 4: Test the email-to-SMS flow
- Send an email to
mobile-number@verified-domain
- You will receive an SMS from the source number (AWS End User Messaging phone number) containing:
- Subject:
<EmailSubject>
- Content: First 160 characters of your email body
- Subject:
- SMS character Limitations:
- AWS End User Messaging’s SMS messaging has character limits based on content type
- By default, the solution uses first 160 characters
- You can modify this limit by updating the Lambda function code
- Troubleshooting:
- If SMS or email responses aren’t received
- Check Lambda function logs in CloudWatch
- Review any error messages or execution issues
- Verify all permissions and configurations are correct
Make sure that your domain and phone numbers are properly verified before testing. If you don’t receive the email or SMS, check the Lambda CloudWatch logs for troubleshooting
Clean up
To avoid ongoing charges and remove all deployed resources, perform the following cleanup steps:
- Remove the CloudFormation stack:
- Navigate to the CloudFormation console
- Delete the Email-To-SMS stack
- Wait for complete stack deletion confirmation
- Amazon SES cleanup:
- Navigate to the Amazon SES console
- Remove any verified domains
- Delete verified email addresses
- Confirm all SES resources are removed
- AWS End User Messaging:
- Navigate to the AWS End User Messaging console
- Release all provisioned phone numbers
- Verify that no active phone numbers remain
- Additional verification:
- Confirm that S3 buckets are deleted
- Verify that Lambda functions are removed
- Check that DynamoDB tables are deleted
- Make sure that all associated IAM roles and policies are removed
Verify complete resource removal to prevent unexpected charges.
Additional recommendations
- Security best practices:
- Set up S3 bucket logging to track access and changes
- Make sure that S3 buckets have:
- No public read/write access
- Enable Encryption at rest
- Apply appropriate bucket policies
- Implement least privilege access for IAM roles
- Use KMS encryption for sensitive data
- Add CloudWatch logging for monitoring
- Protect against SMS pumping:
- Enable AWS End User Messaging protect configuration: Enable filter mode to automatically block suspicious messages
- Block countries that you don’t do business in to prevent unnecessary exposure
- Add CAPTCHA to web forms that trigger SMS to prevent bot attacks
- Set up SMS volume alerts to quickly detect unusual activity
- Create separate configurations for different message types (password resets compared to marketing)
- Cost and operational considerations:
- AWS End User Messaging:
- Costs apply for phone numbers and SMS traffic (both inbound and outbound)
- Message parts per second (MPS) limits vary by country and origination identity type
- Different countries have different capabilities and limitations for SMS
- Monitor usage and implement appropriate alerting to save unnecessary costs
- Account requirements:
- New SES and AWS End User Messaging accounts start in sandbox mode
- Production access requires:
- SES sandbox removal request
- AWS End User Messaging SMS and MMS sandbox removal
- Use case documentation
- Compliance with regional regulations
- Follow Request production access (Moving out of the Amazon SES sandbox) and SMS/MMS and Voice sandbox in AWS End User Messaging SMS
- Monitoring and maintenance:
- Implement CloudWatch alarms for error monitoring
- Regular review of access logs
- Periodic security assessment
- Cost tracking and optimization
- AWS End User Messaging:
Results
This implementation delivers three key improvements:
- This achieves 99.99% uptime through AWS managed services.
- The pay-per-use model reduces operating costs by 45% compared to maintaining dedicated infrastructure. Customers save an average of $2.30 per thousand messages.
- End-to-end encryption and AWS security protocols maintain GDPR and CCPA compliance while protecting customer data.
Conclusion
This AWS-based solution addresses the immediate need and provides a foundation for future enhancements in cross-platform messaging. Whether you’re migrating from AT&T’s email-to-text service or building a new notification system, this AWS-based solution provides a scalable foundation for your messaging needs.