Amazon SES
Amazon Simple Email Service (SES) je najlacnejší spôsob, ako posielať veľké objemy transakčnej pošty, a prirodzená voľba, ak už staviate na AWS. Nastavenie je o niečo prácnejšie ako pri ostatných poskytovateľoch – IAM, výber regiónu, opustenie sandboxu –, potom však SES funguje veľmi spoľahlivo.
SES zvoľte, keď posielate tisíce e-mailov mesačne a viac, riešite cenu za správu alebo chcete mať všetko vo vlastnom AWS účte. Ak chcete začať čo najrýchlejšie, jednoduchší je Postmark, Resend alebo Mailgun. Pozri prehľad služieb.
Čo budete potrebovať
Section titled “Čo budete potrebovať”- AWS účet so SES v regióne, z ktorého chcete posielať.
- Overenú identitu v tomto regióne: ideálne celú doménu (SES → Identities → Create identity → Domain), prinajmenšom adresu odosielateľa.
- Produkčný prístup (opustenie sandboxu), skôr než začnete posielať ľubovoľným príjemcom – pozri Sandbox a limity.
- Samostatného IAM používateľa s prístupovým kľúčom a len týmito oprávneniami:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["ses:SendEmail", "ses:SendRawEmail", "ses:GetAccount"], "Resource": "*" } ]}ses:SendEmail / ses:SendRawEmail sú potrebné na odosielanie (Frontmail používa SES v2 API s kompletnou MIME správou), ses:GetAccount na Otestovať pripojenie a dennú kontrolu stavu, ktorá číta aj kvótu a stav sandboxu. Resource môžete zúžiť na ARN svojej identity a configuration setu. Nepoužívajte root účet ani administrátorského používateľa.
Pripojenie vo Frontmaile
Section titled “Pripojenie vo Frontmaile”- Otvorte E-mailové služby → Pridať službu → Amazon SES.
- Vyplňte polia:
| Pole | Kde ho nájdete | Príklad |
|---|---|---|
| AWS región | Región, v ktorom máte overenú identitu (vpravo hore v konzole SES) | eu-central-1 |
| Access key ID | IAM → Users → frontmail-ses → Security credentials → Create access key | AKIAIOSFODNN7EXAMPLE |
| Secret access key | Zobrazí sa len raz pri vytvorení kľúča | wJalrXUtnFEMI/K7MDENG/… |
| Configuration set | SES → Configuration sets (potrebný pre udalosti o doručení) | frontmail |
| ARN SNS témy | Voliteľné; SNS → Topics – udalosti z iných tém potom ignorujeme | arn:aws:sns:eu-central-1:123456789012:frontmail-events |
| Predvolený e-mail odosielateľa | Voliteľné; overená identita vo zvolenom regióne (adresa na overenej doméne alebo overená adresa). Použije sa, keď šablóna nemá odosielateľa | ahoj@example.sk |
| Predvolené meno odosielateľa | Voliteľné; zobrazované meno predvoleného odosielateľa | Acme |
| Max. e-mailov za sekundu | Voliteľné; držte ho na maximálnej rýchlosti SES alebo pod ňou | 14 |
- Kliknite na Overiť a uložiť. Frontmail zavolá
GetAccounta ukáže, či je účet ešte v sandboxe, akú má maximálnu rýchlosť odosielania a 24-hodinovú kvótu. - Keď kontrola prejde, služba sa uloží. SES nemá žiadnu „adresu účtu“, preto tu nastavte Predvolený e-mail odosielateľa alebo vyplňte e-mail odosielateľa v každej šablóne – inak odoslanie skončí chybou
sender_not_configured(pozri Predvolený odosielateľ). Neskôr ho zmeníte na stránke služby bez nového overenia. - Prístupový kľúč šifrujeme obálkovým šifrovaním cez AWS KMS a dešifruje sa len v odosielacom procese.
DNS: SPF, DKIM a DMARC
Section titled “DNS: SPF, DKIM a DMARC”Easy DKIM – po vytvorení doménovej identity vám SES dá tri CNAME záznamy:
abcdef1234._domainkey.example.sk. CNAME abcdef1234.dkim.amazonses.com.ghijkl5678._domainkey.example.sk. CNAME ghijkl5678.dkim.amazonses.com.mnopqr9012._domainkey.example.sk. CNAME mnopqr9012.dkim.amazonses.com.Kľúče za nimi AWS rotuje automaticky. Hneď ako sa záznamy prejavia v DNS, identita sa prepne na Verified.
SPF cez vlastnú MAIL FROM doménu – predvolene je obálkovým odosielateľom adresa na amazonses.com, takže SPF síce prejde, ale nie je zarovnané s vašou doménou. Ak chcete zarovnanie pre DMARC aj pri SPF, nastavte pri identite vlastnú MAIL FROM (napr. bounce.example.sk) a zverejnite:
bounce.example.sk. MX 10 feedback-smtp.eu-central-1.amazonses.com.bounce.example.sk. TXT "v=spf1 include:amazonses.com ~all"(eu-central-1 nahraďte svojím regiónom.)
DMARC – začnite v režime monitoringu a potom sprísňujte:
_dmarc.example.sk. TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.sk"Regióny
Section titled “Regióny”SES je regionálna služba: identity, stav sandboxu, kvóty, configuration sety aj suppression listy sú pre každý región zvlášť. Región zvolený vo Frontmaile musí byť ten, v ktorom:
- máte overenú doménu alebo adresu,
- ste požiadali o produkčný prístup,
- je váš configuration set a SNS téma.
Samotný IAM kľúč je globálny, ale v regióne, kde nič nastavené nemáte, skončí odoslanie chybou „Email address is not verified“. Ak chcete mať dáta v EÚ, zvoľte európsky región, napríklad eu-central-1 (Frankfurt), eu-west-1 (Írsko) alebo eu-north-1 (Štokholm).
Sandbox a limity
Section titled “Sandbox a limity”Každý nový SES účet začína v sandboxe, a to v každom regióne zvlášť:
- posielať môžete len na overené adresy alebo domény,
- najviac 200 správ za 24 hodín,
- najviac 1 správu za sekundu.
O produkčný prístup požiadajte v SES → Account dashboard → Request production access. Popíšte použitie (transakčné e-maily z webového formulára cez Frontmail), ako príjemcovia dali súhlas a ako riešite bounce a sťažnosti. Schválenie zvyčajne trvá približne deň.
Po schválení začína kvóta na skromnejšej úrovni (napr. 50 000 denne, 14/s) a s dobrou históriou odosielania rastie. Aktuálne hodnoty ukáže Otestovať pripojenie; Max. e-mailov za sekundu nastavte na maximálnu rýchlosť odosielania alebo pod ňu.
Webhooky (sledovanie doručenia)
Section titled “Webhooky (sledovanie doručenia)”SES posiela udalosti cez Amazon SNS. Frontmail sa k vašej SNS téme prihlási cez HTTPS.
-
SNS → Topics → Create topic (Standard), napr.
frontmail-events, v rovnakom regióne. -
Create subscription → protokol HTTPS → endpoint = URL webhooku zo stránky služby vo Frontmaile (tlačidlo na kopírovanie):
https://api.frontmail.dev/webhooks/providers/ses/<token>Raw message delivery nechajte vypnuté. Frontmail overí podpis SNS a odber potvrdí automaticky – v priebehu niekoľkých sekúnd sa stav zmení z Pending confirmation na Confirmed.
-
SES → Configuration sets → Create set (napr.
frontmail) → Event destinations → Add destination → vyberte typy udalostí → cieľ Amazon SNS → vaša téma. -
Názov configuration setu (a prípadne ARN témy) zadajte do služby vo Frontmaile a uložte.
| Typ udalosti v SES | Udalosť vo Frontmaile |
|---|---|
| Deliveries | delivered |
Hard bounce (Permanent) |
bounced – pridá sa do zoznamu blokovaných adries |
Soft bounce (Transient), oneskorenie doručenia |
zaznamená sa pri správe |
| Complaints | complained – pridá sa do zoznamu blokovaných adries |
| Opens | opened |
| Clicks | clicked |
| Rejects, chyby vykreslenia | zaznamená sa pri správe |
Overenie podpisu: každá správa SNS je podpísaná. Frontmail sťahuje podpisový certifikát len zo sns.<region>.amazonaws.com, overí podpis (SignatureVersion 1 aj 2) a správy staršie ako hodina odmietne. Ak vyplníte ARN SNS témy, notifikácie z iných tém odmietneme. Ak ho necháte prázdne, Frontmail si zapamätá tému prvej platne podpísanej správy (zvyčajne potvrdenia odberu) a správy z iných tém potom odmieta – podpis SNS dokazuje len to, že správu poslal nejaký účet AWS.
Každý e-mail dostane tag frontmail_message_id, podľa ktorého sa udalosti spárujú so správou.
Časté chyby
Section titled “Časté chyby”- auth – nefunguje služba (neplatný či zmazaný kľúč, chýbajúce IAM oprávnenie, pozastavené odosielanie, neoverený odosielateľ). Služba sa označí ako
unhealthy, vlastník dostane e-mail a upozornenie v dashboarde. Ak má šablóna záložnú službu, správa odíde cez ňu; inak vrátime kredit a správa počká vo fronte pozdržaných e-mailov akoheld_service_error, kým službu neopravíte (overujeme pri uložení a pri dennej kontrole stavu) – potom sa odošle sama. - permanent – nedá sa odoslať práve táto správa (neplatný alebo neoverený príjemca, odmietnutý obsah). Záložná služba, ak je nastavená, inak
faileda vrátenie kreditu. - transient – throttling, timeouty, 5xx. Opakujeme s exponenciálne rastúcou pauzou; po poslednom pokuse
faileda vrátenie kreditu.
| Chyba SES | Trieda | Čo robiť |
|---|---|---|
InvalidClientTokenId / UnrecognizedClientException / SignatureDoesNotMatch |
auth | Access key ID alebo secret je nesprávny či zmazaný. Vytvorte IAM používateľovi nový kľúč. |
AccessDeniedException: … not authorized to perform ses:SendRawEmail |
auth | Doplňte chýbajúcu akciu do IAM politiky (pozri vyššie). |
MessageRejected: Email address is not verified … ahoj@example.sk (odosielateľ) |
auth | Overte doménu alebo adresu odosielateľa vo zvolenom regióne. |
MailFromDomainNotVerifiedException |
auth | Opravte MX/TXT záznamy vlastnej MAIL FROM domény alebo ju zrušte. |
SendingPausedException / AccountSuspendedException |
auth | AWS pozastavil odosielanie (často pre vysokú mieru bounce alebo sťažností). Skontrolujte SES → Reputation metrics a oznámenia od AWS. |
MessageRejected: Email address is not verified … zakaznik@gmail.com (príjemca) |
permanent | Účet je stále v sandboxe – požiadajte o produkčný prístup alebo príjemcu overte. |
BadRequestException / ValidationException (neplatná adresa) |
permanent | Pozri neplatný príjemca. |
TooManyRequestsException / Throttling: Maximum sending rate exceeded |
transient | Znížte Max. e-mailov za sekundu na rýchlosť SES; požiadajte AWS o vyššiu kvótu. |
InternalFailure, ServiceUnavailable, timeouty |
transient | Nič – Frontmail to zopakuje. |
Kontrolný zoznam
Section titled “Kontrolný zoznam”- Doménová identita overená cez Easy DKIM (3× CNAME) vo zvolenom regióne
- Vlastná MAIL FROM (MX + SPF) a DMARC
p=nonezverejnené - Produkčný prístup v tomto regióne schválený
- IAM používateľ len s
ses:SendEmail,ses:SendRawEmail,ses:GetAccount - Otestovať pripojenie prešlo a ukazuje
sandbox: false - Configuration set → SNS téma → HTTPS odber na URL webhooku Frontmailu v stave Confirmed
- Názov configuration setu zadaný vo Frontmaile
- Max. e-mailov za sekundu na rýchlosti SES alebo pod ňou