Ранний доступЧасть функций, включая ИИ-черновики, ещё включается.Что уже работает

Инструкция · Отправка

Подключение Amazon SES

Sendalto отправляет письма пользователям через ваш аккаунт Amazon SES: домен, репутация и счёт AWS остаются вашими. На настройку уйдёт около 30 минут плюс время на DNS и ответ AWS.

Сверено с Sendalto

Что понадобится

  • Аккаунт AWS, в котором вы можете создавать IAM-пользователей, ресурсы SES и тему SNS.
  • Домен, DNS которого вы управляете. Укажите ровно тот домен, с которого будете писать: для адреса [email protected] домен отправки — mail.example.com.
  • Один регион AWS для всего — домена в SES, набора конфигурации и темы SNS, например eu-central-1.
  • Права владельца или администратора пространства Sendalto и включённый двухфакторный вход.
  • ID вашего пространства. Откройте «Настройки → Интеграции» и нажмите «Настроить» у Amazon SES: ID входит в имя тенанта sendalto-WORKSPACE_ID и в адрес для обратной связи, который там показан.

Ниже замените REGION, ACCOUNT_ID (12-значный номер аккаунта AWS), example.com (ваш домен отправки) и WORKSPACE_ID своими значениями.

1. Создайте IAM-пользователя с этой политикой

Создайте для Sendalto отдельного IAM-пользователя без доступа к консоли, добавьте ему политику ниже как встроенную (inline) и создайте ключ доступа. Sendalto хранит ключ в зашифрованном виде и только для этого пространства.

IAM-политика (JSON)
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AccountStatus",
      "Effect": "Allow",
      "Action": "ses:GetAccount",
      "Resource": "*"
    },
    {
      "Sid": "SendingDomain",
      "Effect": "Allow",
      "Action": [
        "ses:CreateEmailIdentity",
        "ses:GetEmailIdentity",
        "ses:PutEmailIdentityMailFromAttributes"
      ],
      "Resource": "arn:aws:ses:REGION:ACCOUNT_ID:identity/example.com"
    },
    {
      "Sid": "ConfigurationSet",
      "Effect": "Allow",
      "Action": [
        "ses:CreateConfigurationSet",
        "ses:GetConfigurationSet",
        "ses:GetConfigurationSetEventDestinations",
        "ses:PutConfigurationSetSuppressionOptions"
      ],
      "Resource": "arn:aws:ses:REGION:ACCOUNT_ID:configuration-set/sendalto-WORKSPACE_ID"
    },
    {
      "Sid": "Tenant",
      "Effect": "Allow",
      "Action": [
        "ses:CreateTenant",
        "ses:TagResource",
        "ses:GetTenant",
        "ses:ListTenantResources",
        "ses:PutTenantSuppressionAttributes"
      ],
      "Resource": "arn:aws:ses:REGION:ACCOUNT_ID:tenant/sendalto-WORKSPACE_ID/*"
    },
    {
      "Sid": "TenantResources",
      "Effect": "Allow",
      "Action": "ses:CreateTenantResourceAssociation",
      "Resource": [
        "arn:aws:ses:REGION:ACCOUNT_ID:tenant/sendalto-WORKSPACE_ID/*",
        "arn:aws:ses:REGION:ACCOUNT_ID:identity/example.com",
        "arn:aws:ses:REGION:ACCOUNT_ID:configuration-set/sendalto-WORKSPACE_ID"
      ]
    },
    {
      "Sid": "Send",
      "Effect": "Allow",
      "Action": "ses:SendEmail",
      "Resource": [
        "arn:aws:ses:REGION:ACCOUNT_ID:identity/example.com",
        "arn:aws:ses:REGION:ACCOUNT_ID:configuration-set/sendalto-WORKSPACE_ID"
      ]
    }
  ]
}

В политике ровно те вызовы API SES, которые Sendalto делает с вашим ключом, и ничего больше. Каждый ограничен вашим доменом, набором конфигурации и тенантом — кроме ses:GetAccount: его AWS ограничить не позволяет.

Зачем нужно каждое право
ПравоКогда Sendalto его использует
ses:GetAccountПроверка подключения и каждая отправка: рабочий доступ, статус отправки и квота.
ses:GetEmailIdentityПроверка подключения, каждая отправка и «Настройки → Доставка»: статус домена, DKIM и MAIL FROM.
ses:GetConfigurationSetПроверка подключения и каждая отправка: набор конфигурации не на паузе и сохраняет исключения тенанта.
ses:GetConfigurationSetEventDestinationsПроверка подключения и каждая отправка: получатель обратной связи SNS настроен.
ses:GetTenantПроверка подключения, каждая отправка и «Создать ресурсы SES»: статус отправки и исключений тенанта.
ses:ListTenantResourcesПроверка подключения и каждая отправка: домен и набор конфигурации принадлежат вашему тенанту.
ses:SendEmailОтправка согласованного или тестового письма.
ses:PutEmailIdentityMailFromAttributesНастройка поддомена MAIL FROM в «Настройки → Доставка».
ses:CreateTenant, ses:TagResource«Создать ресурсы SES»: создаёт тенант sendalto-WORKSPACE_ID с меткой ID пространства.
ses:CreateEmailIdentity«Создать ресурсы SES»: добавляет домен отправки в SES, если его там ещё нет.
ses:CreateConfigurationSet«Создать ресурсы SES»: создаёт набор конфигурации sendalto-WORKSPACE_ID.
ses:CreateTenantResourceAssociation«Создать ресурсы SES»: привязывает домен и набор конфигурации к тенанту.
ses:PutTenantSuppressionAttributes, ses:PutConfigurationSetSuppressionOptions«Создать ресурсы SES»: включает для тенанта исключение адресов после возвратов и жалоб.

2. Создайте тему SNS для обратной связи

В консоли Amazon SNS, в том же регионе, создайте тему типа «Стандартная» (Standard; в темы FIFO SES не публикует), например sendalto-feedback. Скопируйте её ARN, например arn:aws:sns:REGION:ACCOUNT_ID:sendalto-feedback. Подписку пока не добавляйте: Sendalto подтвердит её, только когда ARN темы уже сохранён в пространстве.

3. Введите данные в Sendalto

  1. Откройте «Настройки → Интеграции» и нажмите «Настроить» у Amazon SES.
  2. Укажите регион AWS, идентификатор ключа доступа и секретный ключ IAM-пользователя. Поле токена сессии оставьте пустым: временные ключи истекают, и тогда проверки и отправка останавливаются.
  3. Укажите домен отправки (домен вида example.com, не адрес почты), оставьте набор конфигурации sendalto-WORKSPACE_ID и вставьте ARN темы SNS.
  4. Нажмите «Сохранить зашифрованно», затем «Создать ресурсы SES». Sendalto создаст тенант sendalto-WORKSPACE_ID, добавит домен и набор конфигурации, привяжет их к тенанту и включит для него исключение адресов после возвратов и жалоб. Уже существующие ресурсы сохранятся.

Новые ключи сбрасывают статус подключения и отменяют письма в очереди через старые ключи — меняйте ключи в спокойный момент.

4. Добавьте DNS-записи

В разделе «Настройки → Доставка» показаны точные записи для вашего домена и отмечено, какие уже найдены. Технический специалист может работать там без доступа к контактам и ключам.

  • DKIM. SES использует Easy DKIM: три записи CNAME TOKEN._domainkey.example.com → TOKEN.dkim.amazonses.com. Токены появятся после «Создать ресурсы SES».
  • Собственный MAIL FROM. Выберите поддомен, например bounce.example.com, в «Настройки → Доставка» (Sendalto включит в SES отклонение писем при ошибке MX — этого требует проверка) и добавьте его записи MX и SPF. Если настраиваете в консоли SES, выберите поведение при ошибке MX Reject message.
  • DMARC. Запись TXT ровно на имени _dmarc.<домен отправки> с p=none, p=quarantine или p=reject. Sendalto смотрит только это имя: если вы пишете с mail.example.com, опубликуйте _dmarc.mail.example.com, даже если у example.com есть своя запись. Начните с p=none и адреса rua для отчётов.
DNS-записи (пример)
; DKIM (Easy DKIM): three records, tokens come from SES
TOKEN1._domainkey.example.com  CNAME  TOKEN1.dkim.amazonses.com
TOKEN2._domainkey.example.com  CNAME  TOKEN2.dkim.amazonses.com
TOKEN3._domainkey.example.com  CNAME  TOKEN3.dkim.amazonses.com

; Custom MAIL FROM, for example bounce.example.com
bounce.example.com  MX   10 feedback-smtp.REGION.amazonses.com
bounce.example.com  TXT  "v=spf1 include:amazonses.com ~all"

; DMARC, exactly at _dmarc.<sending domain>
_dmarc.example.com  TXT  "v=DMARC1; p=none; rua=mailto:[email protected]"

Изменения DNS появляются от нескольких минут до нескольких часов. SES подтвердит домен, как только увидит записи DKIM.

5. Настройте обратную связь о возвратах и жалобах

  1. В консоли SES откройте Configuration sets → sendalto-WORKSPACE_ID → Event destinations → Add destination.
  2. Отметьте как минимум Hard bounces, Complaints, Deliveries и Rejects (эти четыре Sendalto требует, остальные — по желанию), оставьте публикацию событий включённой, выберите Amazon SNS и тему из шага 2.
  3. Разрешите SES публиковать в тему: в консоли SNS измените политику доступа темы (Access policy) и добавьте правило ниже.
  4. В консоли SNS создайте подписку на тему: протокол HTTPS, адрес https://sendalto.com/api/webhooks/email?workspace=WORKSPACE_ID с ID вашего пространства. Опцию Enable raw message delivery не включайте.
  5. Sendalto проверит подписанное подтверждение от SNS и подтвердит подписку сам: в течение минуты она станет Confirmed. Если она осталась в Pending confirmation, проверьте, что в Sendalto сохранён тот же ARN темы, и нажмите Request confirmation.
Политика доступа темы SNS (добавляемое правило)
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowSesEventPublishing",
      "Effect": "Allow",
      "Principal": { "Service": "ses.amazonaws.com" },
      "Action": "sns:Publish",
      "Resource": "arn:aws:sns:REGION:ACCOUNT_ID:TOPIC_NAME",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "ACCOUNT_ID",
          "AWS:SourceArn": "arn:aws:ses:REGION:ACCOUNT_ID:configuration-set/sendalto-WORKSPACE_ID"
        }
      }
    }
  ]
}

Когда обратная связь настроена, жёсткий возврат или жалоба сразу исключают адрес в Sendalto и отменяют его письма в очереди. После жалобы вся отправка в пространстве приостанавливается. Владелец разбирается в причине и возобновляет отправку в «Настройки → Пространство» → «Отправка» кнопкой «Возобновить отправку…» (нужны двухфакторный вход и недавний вход в аккаунт). Адреса, на которые пожаловались, остаются исключёнными.

6. Запросите рабочий доступ SES

Новый аккаунт SES работает в песочнице: письма уходят только на подтверждённые адреса. В консоли SES вашего региона откройте Account dashboard → Request production access и опишите сценарий: письма подписчикам с их согласия, как люди подписываются и как вы обрабатываете возвраты, жалобы и отписки (Sendalto добавляет отписку в один клик в каждое маркетинговое письмо). Обычно AWS отвечает в течение суток. Рабочий доступ выдаётся отдельно для каждого региона.

7. Запустите проверку подключения

Нажмите «Проверить подключение» на карточке Amazon SES. Sendalto прочитает ваш аккаунт SES сохранённым ключом и перечислит, чего не хватает, в «Результат проверки». Подключение готово, когда выполнены все пункты ниже.

Сообщения проверки и что делать
СообщениеЧто сделать
В этом регионе для SES не включён production access.Шаг 6 — в регионе, сохранённом в Sendalto.
Отправка в аккаунте SES приостановлена или находится под ограничениями AWS.Разберите уведомление в Account dashboard SES вместе с AWS.
Домен отправки не подтверждён.Шаг 4: домен подтверждается записями DKIM.
DKIM не подтверждён или не включён.Шаг 4: все три записи CNAME для DKIM и включённая подпись DKIM.
Нужен подтверждённый custom MAIL FROM с отклонением писем при ошибке MX.Шаг 4: поддомен MAIL FROM с MX и SPF, поведение Reject message.
Configuration set приостановлен.Возобновите отправку для набора конфигурации в консоли SES.
Отправка для tenant SES не включена.Снова включите отправку для тенанта sendalto-WORKSPACE_ID в консоли SES.
Нужно включить подавление адресов по возвратам и жалобам на уровне tenant.Повторно нажмите «Создать ресурсы SES».
Настройки подавления configuration set не должны отменять защиту tenant.Уберите собственные настройки исключений у набора конфигурации или повторно нажмите «Создать ресурсы SES».
Домен и configuration set должны быть привязаны к этому tenant.Повторно нажмите «Создать ресурсы SES».
Настройте SNS-получателя обратной связи для возвратов, жалоб, доставок и отказов.Шаг 5: получатель событий со всеми четырьмя типами, включённый, на сохранённой теме.
Подтвердите подписку SNS на адрес обратной связи этого пространства.Шаг 5: подпишите HTTPS-адрес с ID вашего пространства.
Нужна корректная DNS-запись политики DMARC.Шаг 4: одна запись DMARC на _dmarc.<домен отправки>.
Не удалось проверить DNS-запись DMARC.Шаг 4: записи TXT на _dmarc.<домен отправки> ещё нет или DNS не успел обновиться. Опубликуйте её и повторите проверку позже.
Квота отправки SES недоступна или исчерпана.Дождитесь, пока освободится суточная квота, или попросите AWS её увеличить.
Проверка не удалась. Проверьте ключи, сетевой доступ и разрешения у провайдера.SES отказал в запросе или не ответил. Проверьте идентификатор и секрет ключа, что регион совпадает с регионом ваших ресурсов SES и что к пользователю привязана IAM-политика из шага 1. Если вы ещё не нажимали «Создать ресурсы SES», сделайте это сначала: к моменту проверки тенант уже должен существовать.

Sendalto повторяет эти проверки перед каждой отправкой, а проверку старше 24 часов нужно запустить заново. Письма отправляются с адресов на самом домене отправки: если подключён example.com, пишите с [email protected].

Когда проверка пройдена

Тестовые письма на свой адрес можно отправлять сразу. Для реальной отправки вашей аудитории также нужны одобренная Sendalto проверка бизнеса и платный тариф или пилотный ранний доступ. Тарифы пока не продаются; в раннем доступе Sendalto бесплатно открывает пилот проверенным пространствам. Подробнее — что работает уже сейчас.