Настройка SMTP
Status200 может отправлять почту через ваш SMTP с тремя вариантами аутентификации:
- Username and Password — классическая SMTP-аутентификация
- OAuth 2.0 — для Microsoft 365 и Google Workspace
- None — relay без аутентификации
Ниже — OAuth 2.0 для Microsoft 365 и Google Workspace.
OAuth 2.0
OAuth 2.0 удобен там, где отключили basic auth. Status200 поддерживает:
- Client Credentials — Microsoft 365 и большинство OAuth-провайдеров
- JWT Bearer — service account Google Workspace
Поля для OAuth
| Поле | Описание |
|---|---|
| Hostname | Адрес SMTP-сервера |
| Port | Обычно 587 (STARTTLS) или 465 (implicit TLS) |
| Username | Адрес отправителя |
| Authentication Type | OAuth |
| OAuth Provider Type | Client Credentials (Microsoft) или JWT Bearer (Google) |
| Client ID | Application/Client ID у провайдера (для Google — email service account) |
| Client Secret | Client secret (для Google — private key) |
| Token URL | Endpoint выдачи токена |
| Scope | Нужные scope для SMTP |
Microsoft 365
Нужна регистрация приложения в Microsoft Entra (Azure AD) и нужные permissions.
Шаг 1: регистрация в Microsoft Entra
- Microsoft Entra admin center
- Identity → Applications → App registrations
- New registration
- Имя (например, «Status200 SMTP»)
- Supported account types: только ваш каталог
- Redirect URI не нужен для client credentials
- Register
На Overview сохраните:
- Application (client) ID — Client ID
- Directory (tenant) ID — для Token URL
Шаг 2: client secret
- Certificates & secrets
- New client secret
- Описание и срок действия
- Add
- Сразу скопируйте secret — позже не покажут
Шаг 3: SMTP API permissions
- API permissions → Add a permission
- APIs my organization uses
- Office 365 Exchange Online
- Application permissions
- Включить SMTP.SendAsApp
- Add permissions
- Grant admin consent (нужны права админа)
Шаг 4: service principal в Exchange Online
- Модуль PowerShell:
Install-Module -Name ExchangeOnlineManagement -Force- Подключение:
Import-Module ExchangeOnlineManagement
Connect-ExchangeOnline -Organization <your-tenant-id>- Регистрация service principal (Object ID из Enterprise Applications, не из App Registrations):
# Object ID: Microsoft Entra → Enterprise Applications → ваше приложение
New-ServicePrincipal -AppId <application-client-id> -ObjectId <enterprise-app-object-id>- Права на ящик отправителя:
Add-MailboxPermission -Identity "sender@yourdomain.com" -User <service-principal-id> -AccessRights FullAccess
# или только SendAs
Add-RecipientPermission -Identity "sender@yourdomain.com" -Trustee <service-principal-id> -AccessRights SendAsШаг 5: настройка в Status200
| Поле | Значение |
|---|---|
| Hostname | smtp.office365.com |
| Port | 587 |
| Username | Ящик, которому выдали права |
| Authentication Type | OAuth |
| OAuth Provider Type | Client Credentials |
| Client ID | Application (client) ID |
| Client Secret | Secret из шага 2 |
| Token URL | https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token |
| Scope | https://outlook.office365.com/.default |
| From Email | Как Username |
| Secure (TLS) | Включено |
<tenant-id> — Directory (tenant) ID.
Google Workspace
Нужен service account с domain-wide delegation. Прямой client credentials flow для Gmail SMTP Google не поддерживает.
Требования
- Google Workspace (не consumer Gmail)
- Super Admin в Admin Console
- Доступ к Google Cloud Console
Шаг 1: проект в Google Cloud
- Google Cloud Console
- New Project → создать и выбрать проект
Шаг 2: Gmail API
- APIs & Services → Library
- Найти Gmail API → Enable
Шаг 3: service account
- Credentials → Create Credentials → Service account
- Имя и описание → Create and Continue → Done
Шаг 4: ключи
- Открыть созданный service account → Keys
- Add Key → Create new key → JSON
- Файл содержит
client_idиprivate_key(используются как Client ID / Secret в смысле ключа)
Шаг 5: domain-wide delegation
- Show Advanced Settings
- Запомнить числовой Client ID
- Включить Enable Google Workspace Domain-wide Delegation → Save
Шаг 6: авторизация в Google Workspace Admin
- Google Workspace Admin
- Security → Access and data control → API Controls → Manage Domain Wide Delegation
- Add new
- Client ID из шага 5
- OAuth Scopes:
https://mail.google.com/ - Authorize
Распространение делегирования может занять от минут до 24 часов.
Шаг 7: настройка в Status200
| Поле | Значение |
|---|---|
| Hostname | smtp.gmail.com |
| Port | 587 |
| Username | Адрес Workspace, от имени которого идёт отправка (impersonation) |
| Authentication Type | OAuth |
| OAuth Provider Type | JWT Bearer |
| Client ID | client_email из JSON service account |
| Client Secret | Полный private_key из JSON (включая -----BEGIN PRIVATE KEY----- / END) |
| Token URL | https://oauth2.googleapis.com/token |
| Scope | https://mail.google.com/ |
| From Email | Как Username |
| Secure (TLS) | Включено |
Важно: для Google в поле Client ID указывается email service account (client_email), а не числовой client_id. Service account имперсонирует пользователя из Username.
Устранение неполадок
Microsoft 365
| Проблема | Что проверить |
|---|---|
| Authentication unsuccessful | Service principal в Exchange и права на ящик |
| AADSTS700016 | Client ID и наличие приложения в tenant |
| AADSTS7000215: Invalid client secret | Secret истёк — выпустить новый |
| Mailbox not enabled | Выполнить Add-MailboxPermission |
Google Workspace
| Проблема | Что проверить |
|---|---|
| invalid_grant | Domain-wide delegation и время распространения |
| unauthorized_client | Client ID в Admin Console |
| access_denied | Scope https://mail.google.com/ |
| Third-party Drive disabled | Security → API Controls в Admin |
Общее
- Проверка кнопкой Send Test Email в Status200
- Логи Status200 для деталей ошибок
- Токены кэшируются и обновляются до истечения
Безопасность
- Регулярная ротация secret’ов
- Отдельные service account / приложения под Status200
- Минимальные права (SMTP.SendAsApp / mail.google.com)
- Мониторинг входов и отправки
- Не хранить секреты в репозитории