Preskočiť na obsah

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.

  • 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.

  1. Otvorte E-mailové služby → Pridať službu → Amazon SES.
  2. 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
  1. Kliknite na Overiť a uložiť. Frontmail zavolá GetAccount a ukáže, či je účet ešte v sandboxe, akú má maximálnu rýchlosť odosielania a 24-hodinovú kvótu.
  2. 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.
  3. Prístupový kľúč šifrujeme obálkovým šifrovaním cez AWS KMS a dešifruje sa len v odosielacom procese.

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"

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).

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.

SES posiela udalosti cez Amazon SNS. Frontmail sa k vašej SNS téme prihlási cez HTTPS.

  1. SNS → Topics → Create topic (Standard), napr. frontmail-events, v rovnakom regióne.

  2. 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.

  3. SES → Configuration sets → Create set (napr. frontmail) → Event destinations → Add destination → vyberte typy udalostí → cieľ Amazon SNS → vaša téma.

  4. 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.

  • 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 ako held_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 failed a vrátenie kreditu.
  • transient – throttling, timeouty, 5xx. Opakujeme s exponenciálne rastúcou pauzou; po poslednom pokuse failed a 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.
  • Doménová identita overená cez Easy DKIM (3× CNAME) vo zvolenom regióne
  • Vlastná MAIL FROM (MX + SPF) a DMARC p=none zverejnené
  • 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