← ClaudeAtlas

adding-azure-communication-services-emaillisted

Adds transactional email to an Azure web app via Azure Communication Services (ACS) Email — verification emails, password resets, notifications. Encodes the three ACS quirks that consistently break Bicep deploys (location:'global' literal, dataLocation in plain English not Azure region IDs, declare-order to avoid circular dependency), and the safeSend() wrapper that prevents email failures from crashing HTTP handlers. Use when adding email sending to a project, fixing ACS Bicep deployment errors, or migrating off SendGrid/Mailgun.
alexpizarro/azure-lean-stack-skills · ★ 1 · DevOps & Infrastructure · score 72
Install: claude install-skill alexpizarro/azure-lean-stack-skills
# Adding Azure Communication Services Email Transactional email via Azure Communication Services. **Free tier: 100 emails/day**, then $0.00025/email. Cheaper than SendGrid for low-volume projects. ## When to use ACS Email | Need | Use | |------|-----| | Account verification, password reset, transactional notifications | **ACS Email** (this skill) | | Marketing campaigns, newsletters, A/B testing | A marketing-focused provider (Mailchimp, etc.) — ACS doesn't do that | | High-volume bulk send (>100k/day) | SendGrid Pro or Mailgun (ACS gets expensive at scale) | ## The three ACS quirks ### 1. `location: 'global'` (literal string, not a real Azure region) ```bicep resource emailService 'Microsoft.Communication/emailServices@2023-04-01' = { name: emailServiceName location: 'global' // ← NOT 'australiaeast', NOT location param properties: { dataLocation: 'Australia' } } ``` If you pass the project's `location` param (`australiaeast`), Azure rejects the deploy. ### 2. `dataLocation` uses plain English The values for `dataLocation` are not Azure region IDs. They're region groupings: | `dataLocation` value | Where data is stored | |---------------------|---------------------| | `'Australia'` | AU data centres | | `'Europe'` | EU | | `'United States'` | US | | `'Asia Pacific'` | APAC excluding AU | | `'Africa'` | Africa | | `'Brazil'` | Brazil | | `'Canada'` | Canada | | `'France'` | France | | `'Germany'` | Germany | | `'India'` | India | | `'Japan'` |