# Amazon SES

> Az Amazon SES csatlakoztatása a FluentSMTP-hez: identitás ellenőrzése, IAM-felhasználó szűk jogosultsággal, hozzáférési kulcs és hibaelhárítás.

A WordPress az Amazon Simple Email Service-hez (SES) egy IAM-hozzáférési kulccsal és egy ellenőrzött feladó-tartománnyal csatlakozik. Az itt leírt beállítás a bővítmény küldési jogát a választott tartományra szűkíti.

## A kapcsolat megnyitása

Nyisd meg a **Beállítások → FluentSMTP** oldalt, és válaszd az **aws** csempét (vagy **Kapcsolat hozzáadása**, majd ugyanez a csempe).

![Az Amazon SES kapcsolat űrlapja](./kepek/szolgaltatok-ses-urlap.webp)

*Az Amazon SES kapcsolat űrlapja* (https://minta-bolt.hu/wp-admin/options-general.php?page=fluent-mail)

A **Feladó beállításai** blokkban a **Feladó e-mail-címének** olyan tartományon (vagy pontos címen) kell lennie, amelyet az SES ugyanabban a régióban ellenőrzött, amelyet itt kiválasztasz.

Az **Amazon SES API-beállítások** blokkban három adat kell:

- **Hozzáférési kulcs**
- **Titkos kulcs**
- **Régió**: egyeznie kell azzal az SES-régióval, ahol az identitást ellenőrizted. Az alapértelmezett az USA keleti régiója (Észak-Virginia / us-east-1).

## Az identitás ellenőrzése az SES-ben

1. Nyisd meg az Amazon SES konzolt abban a régióban, amelyet használni fogsz (jobb felül a régióválasztó).
2. **Identities → Create identity**.
3. Válaszd a **Domain** lehetőséget, és add meg a küldő tartományodat. Az **Easy DKIM** maradjon bekapcsolva, hozd létre az identitást, majd vidd fel a DNS-hozzáférésedhez az SES által adott DNS-rekordokat. Ha a tartomány ebben a régióban már ellenőrzött, nyisd meg a meglévő identitását.
4. Várd meg, amíg az identitás **Verified**, a DKIM pedig **Successful** állapotú lesz.

Ha a fiók fölötti sáv szerint **sandbox** módban vagy, kérj éles hozzáférést (**Account dashboard → Request production access**). Amíg az AWS jóvá nem hagyja, az SES minden olyan címzettnek visszautasítja a levelet, akit nem ellenőriztél.

## IAM-felhasználó létrehozása

1. Nyisd meg az IAM konzolt, majd **IAM users → Create user**.
2. Adj nevet, például `fluentsmtp-ses`. A **Provide user access to the AWS Management Console** maradjon bejelöletlen.
3. A **Next** gombbal lépj tovább. A **Set permissions** lépésnél csoport és szabályzat kiválasztása nélkül mehetsz tovább: a szabályzatot a következő lépésben közvetlenül a felhasználóhoz adod.
4. Nézd át az adatokat, kattints a **Create user** gombra, majd nyisd meg az új felhasználót.

## Beágyazott szabályzat hozzáadása

A beágyazott (inline) szabályzat közvetlenül ehhez az IAM-felhasználóhoz tartozik, így nem kell külön szabályzatot létrehozni és csatolni.

A FluentSMTP az SES API-n keresztül csatlakozik. IAM-hozzáférési kulcsokat használj, **nem** az SES SMTP-beállításaiban kapott SMTP-felhasználónevet és jelszót.

Az Amazon SES-szolgáltató három műveletet használ:

| Jogosultság | Mire kell a FluentSMTP-nek |
|---|---|
| `ses:SendRawEmail` | A WordPress-levelek küldése, a HTML-t és a mellékleteket is beleértve. |
| `ses:ListIdentities` | A kapcsolat ellenőrzése és a feladócímekhez tartozó identitások listázása. |
| `ses:GetSendQuota` | A küldési korlát, a küldési sebesség és a legutóbbi használat lekérdezése. |

Nincs szükséged az `AmazonSESFullAccess` szabályzatra, az `ses:SendEmail` jogra, sem identitások létrehozásának vagy törlésének jogára.

1. A felhasználó **Permissions** lapján válaszd az **Add permissions → Create inline policy** lehetőséget.
2. Válaszd a **JSON** nézetet, és a szerkesztő tartalmát cseréld az alábbi szabályzatra.
3. Cseréld az `us-east-1`-et a saját SES-régiódra, a `123456789012`-t az AWS-fiókazonosítódra, a két `example.com` előfordulást pedig az ellenőrzött tartományodra. Az identitás ARN-jét az SES-identitás **Summary** részéről másolhatod.
4. Kattints a **Next** gombra, nevezd el a szabályzatot `FluentSMTP-SendFromDomain`-nek, és kattints a **Create policy** gombra. A szabályzat közvetlenül a felhasználón lesz mentve.

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "SendFromVerifiedDomain",
      "Effect": "Allow",
      "Action": "ses:SendRawEmail",
      "Resource": "arn:aws:ses:us-east-1:123456789012:identity/example.com",
      "Condition": {
        "StringLike": {
          "ses:FromAddress": "*@example.com"
        }
      }
    },
    {
      "Sid": "ReadConnectionDetails",
      "Effect": "Allow",
      "Action": [
        "ses:ListIdentities",
        "ses:GetSendQuota"
      ],
      "Resource": "*"
    }
  ]
}
```

A küldési utasítás a jogot a megadott identitásra, régióra és feladó-tartományra szűkíti. Ha például mindkét helyen a `sajat.hu` szerepel, a `support@sajat.hu` címről küldhetsz, más tartomány vagy aldomain címéről nem. Ha csak egyetlen feladót akarsz engedni, a `*@example.com` helyére pontos címet írj, például `support@example.com`.

Az olvasási utasításhoz `Resource: "*"` kell, mert ezeket a műveleteket nem lehet egy tartomány-identitásra szűkíteni. Ez listázhatja a fiók más identitásait, de nem ad jogot arról küldeni.

> **Dedikált IAM-felhasználót használj.** Ez legyen a felhasználó egyetlen szabályzata. Egy másik csatolt szabályzat vagy csoport szélesebb küldési jogot adhat, és az itteni Allow utasítás ezt nem írja felül.

### Ha az identitás konfigurációs készletet használ

Nyisd meg az SES-identitás **Configuration set** lapját. Ha van alapértelmezett konfigurációs készlete, a küldési utasítás `Resource` értékét cseréld olyan tömbre, amely az identitás és a konfigurációs készlet ARN-jét is tartalmazza:

```json
"Resource": [
  "arn:aws:ses:us-east-1:123456789012:identity/example.com",
  "arn:aws:ses:us-east-1:123456789012:configuration-set/YourConfigurationSet"
]
```

Ez az első utasításon belüli `Resource` mező cseréje, nem teljes szabályzat. Az `ses:SendRawEmail` és az `ses:FromAddress` feltétel maradjon változatlan. A régiót, a fiókazonosítót, a tartományt és a konfigurációs készlet nevét cseréld a sajátodra. Ha a konfigurációs készlet ARN-je hiányzik, az SES AccessDenied hibával utasítja el a küldést, amely a `configuration-set/...` erőforrást nevezi meg, annak ellenére, hogy a FluentSMTP elmenti a kapcsolatot.

## Hozzáférési kulcs létrehozása

1. Ugyanazon az IAM-felhasználón nyisd meg a **Security credentials → Create access key** részt.
2. AWS-en kívül futó WordPress-oldalhoz válaszd az **Application running outside AWS** lehetőséget, és kövesd a lépéseket. Adhatsz leírást, majd hozd létre a kulcsot.
3. Másold az **Access key ID**-t és a **Secret access key**-t a FluentSMTP-be. Az AWS a titkos kulcsot csak egyszer mutatja meg, tartsd titokban.

Ne hozz létre gyökérfiók-hozzáférési kulcsot a bővítménynek. A kulcs az IAM-felhasználóhoz tartozik, az SES-identitás és a küldési korlátok pedig a kiválasztott régióhoz.

## Mentés a FluentSMTP-ben

Hagyd a **Tárolás az adatbázisban** lehetőséget kiválasztva. Illeszd be a **Hozzáférési kulcs** és a **Titkos kulcs** értékét, válaszd ki a **Régiót**, majd kattints a **Kapcsolatbeállítások mentése** gombra. A FluentSMTP ellenőrzi a hitelesítő adatokat. A **Titkosítás kikapcsolása a titkos kulcshoz (nem ajánlott)** maradjon bejelöletlen. Választhatod a **Tárolás a wp-config.php fájlban** lehetőséget is.

Nyisd meg a **Teszt e-mail küldése** ablakot, válaszd az új kapcsolat feladó-címét, adj meg egy saját postafiókot, és küldd el. Ellenőrizd, hogy megérkezett. A mentés az olvasási jogot ellenőrzi, a teszt pedig a küldési jogot is.

## További feladó-címek

Az SES ugyanazon a kapcsolaton több címről is tud küldeni, az ellenőrzött tartományon belül. A **Beállítások** oldalon a sorban egy **+N feladó** felirat látszik: kattints rá, és adj hozzá címeket. A címeknek egyezniük kell az ellenőrzött tartománnyal és az IAM-szabályzattal is. Ha a FluentSMTP-ben adsz hozzá feladót, az AWS-jogosultságokat nem bővíted.

## Ha a levél nem megy el

- **Email address is not verified (sandbox)**: ellenőrizd a címzettet, vagy kérj éles hozzáférést.
- **MessageRejected / Email address not verified**: a feladó tartománya ebben a régióban nincs ellenőrizve.
- **AccessDenied**: nézd meg, hogy az IAM-szabályzat mindhárom fenti műveletet tartalmazza-e. Küldési hibánál vesd össze az identitás ARN-jét, a régiót és az `ses:FromAddress` feltételt a tényleges feladócímmel. A sikeres kapcsolatellenőrzés nem bizonyítja, hogy a küldés engedélyezett.
- **InvalidClientTokenId**: rossz a kulcs, vagy másik fiókhoz tartozik.
- **Régióeltérés**: az identitás például az `eu-west-1`-ben van, a FluentSMTP-ben viszont `us-east-1` van beállítva.
