Домены
`domains.list`, `get` и `update`.
Все методы
const domains = await openemail.domains.list()const domain = await openemail.domains.get('b3e1f0a4-6c2d-4e8a-9f17-2d5c8a0b4e6f') console.log(domain.receiving.verified, domain.sending.status)for (const address of domain.addresses) console.log(address.address, address.enabled) const updated = await openemail.domains.update(domain.id, { trackingHost: 'links.acme.com' })console.log(updated.tracking.status, updated.tracking.record?.name, updated.tracking.record?.value) await openemail.domains.update(domain.id, { trackingHost: null })Приём и отправка — два независимых факта, и возвращаются они двумя объектами. receiving.verified означает, что MX домена приводит его почту сюда и что опубликовано подтверждение владения. sending сообщает о проверке исходящей подписи: status равен verified, pending, failed, no_identity или unknown, а canSend говорит, будет ли отправка с домена принята прямо сейчас. Отрицательный вердикт старше суток считается неизвестностью, а не отказом, так что ветвитесь по canSend, а не по status.
update задаёт, перепроверяет или снимает собственный домен трекинга — поддомен вроде links.acme.com — и разрешается в тот же DomainDetailResource, что и get. tracking сообщает о нём при каждом чтении. Пока проверка не прошла, tracking.status равен pending, и отслеживаемые ссылки и пиксель открытия продолжают использовать хост OpenEmail по умолчанию. Как только проверка проходит, он становится active, и новая почта с домена использует домен трекинга для обоих.
get также перечисляет адреса на домене. addresses.list() — родственный вызов: все адреса, которые ЭТОТ КЛЮЧ может поставить в заголовок From, а это уже. This is narrower.
Параметры: domains.get
domainIdstringобязательно- Идентификатор из `domains.list` — UUID, созданный при добавлении домена, а не имя хоста, так что `get('example.com')` ничего не найдёт. Поиск ограничен не только идентификатором, но и собственным подключением ключа, так что домен другого рабочего пространства — это 404, а не 403.
Параметры: domains.update
idstringобязательно- Тот же идентификатор домена, что принимает `get`. Нужная область доступа — `domains:write`.
patch.trackingHoststring | nullобязательно- Поддомен этого домена, не длиннее 512 символов, например `links.acme.com`. Он обрезается и приводится к нижнему регистру, а ведущие `https://` или `http://`, путь и завершающая точка удаляются. Новое значение проверяется, сохраняется и тут же проверяется на месте тем же вызовом. Значение, которое у домена уже есть, запускает проверку заново, если только предыдущая не была меньше 30 секунд назад. `null` или пустая строка удаляет домен трекинга.
Отклонённый хост бросает OpenEmailApiError с trackingHost в param: 422 invalid_tracking_host для имени, которое использовать нельзя, например вне домена; 409 domain_not_verified для нового хоста, пока receiving.verified равно false и TXT-запись _openemail-challenge домена ещё не опубликована; и 409 tracking_host_in_use для имени, которое уже использует другой домен, либо когда доменом трекинга управляет другой сервер OpenEmail. Ключ, ограниченный конкретными адресами, получает 422 capability_unsupported, потому что домен трекинга применяется ко всем адресам домена.
Ответ: DomainDetailResource
object'domain'- Всегда строка `domain` — и в строках `list`, и здесь.
idstring- UUID домена. Стабилен всё время жизни строки и единственная ручка, которую принимают остальные вызовы по доменам.
domainstring- Голое имя хоста в нижнем регистре: `example.com`. Уникально в рамках всего продукта, один владелец на домен, так что два рабочих пространства не могут заявить на него права одновременно.
receiving.verifiedboolean- True с того момента, как DNS показал MX домена, называющий хост, который приводит его почту сюда, и, если строка несёт токен подтверждения, соответствующую TXT-запись `_openemail-challenge`. Один MX ничего не доказывает, поскольку каждый домен, для которого мы принимаем почту, публикует одни и те же имена хостов, — поэтому и существует токен, и поэтому именно этот флаг является воротами, которые входящая доставка проверяет перед приёмом почты.
receiving.verifiedAtstring | null- Когда подтверждение прошло, ISO-8601. Null, пока оно не прошло, а `verified` выводится ровно из этой колонки, так что эти двое не могут разойтись.
receiving.catchAllboolean- Принимается ли любая локальная часть. Включено по умолчанию для доменов, добавленных с тех пор, как это стало правилом; при выключенном принимаются только адреса, названные на домене, а остальные отвергаются во время SMTP, так что отправитель получает отбой, а не тишину.
receiving.lastCheckedAtstring | null- Когда DNS в последний раз спрашивали об этом домене. Null означает, что не смотрели ни разу, и для того, кто добавил домен минуту назад, это читается совсем иначе, чем неудача. Этот эндпоинт сообщает сохранённый результат и никогда не запускает собственную проверку.
receiving.errorstring | null- Почему последняя проверка не прошла, словами, по которым владелец может действовать: типичное — `No MX records yet. DNS changes can take a few minutes to spread.` Null, когда она проходит, и хранится, а не выводится, чтобы перезагрузка и плановая перепроверка говорили одно и то же.
sending.status'verified' | 'pending' | 'failed' | 'no_identity' | 'unknown'- Состояние исходящей подписи таким, каким его увидела последняя проверка. Читается из сохранённой проверки, а не зондируется при этом запросе, так что `sending.checkedAt` говорит, насколько оно старое.
sending.canSendboolean- Будет ли отправка с этого домена принята прямо сейчас. Отрицательный вердикт старше суток считается неизвестностью, а не отказом, так что это может быть true, пока `status` равен `pending`. Ветвитесь по нему перед отправкой: false означает, что `emails.send` с этого домена будет отклонена с 409 `domain_not_sendable`.
sending.checkedAtstring | null- Когда состояние подписи проверялось в последний раз, ISO-8601. Null означает «никогда», что читается совсем иначе, чем сбой.
sending.errorstring | null- Последний сбой подписи словами или null, когда проверка проходит.
sending.notestring- Одно из пяти предложений, выбираемое по `sending.status`, объясняющее, что это состояние значит, словами, по которым владелец домена может действовать. Проза для чтения человеком. Ветвитесь по `sending.canSend`, а не по этому полю.
trackingDomainTracking- Собственный домен трекинга этого домена — и в строках `list`, и здесь; это то, что меняет `update`.
tracking.hoststring | null- Домен трекинга, например `links.acme.com`, или null, когда он не задан.
tracking.status'none' | 'pending' | 'active' | 'failed'- `none` означает, что домен трекинга не задан, `pending` — что он ни разу не проходил проверку, `active` — что новая почта его использует, а `failed` — что он проходил раньше и с тех пор выбыл из использования. Активный хост выбывает после трёх неудачных проверок подряд либо когда его последней успешной проверке больше 2 часов.
tracking.activeboolean- True ровно тогда, когда `status` равен `active`, то есть когда отслеживаемые ссылки и пиксель открытия в новой почте с домена используют этот хост.
tracking.targetstring- Адрес, на который указывает запись CNAME, подготовленный только для этого домена трекинга. Пустая строка, пока `host` равен null и пока адрес для нового хоста ещё готовится.
tracking.record{ type: 'CNAME'; name: string; value: string } | null- Запись, которую нужно опубликовать: названа по `host`, значением — `target`. Null, когда домена трекинга нет и пока адрес для нового хоста ещё готовится.
tracking.checkedAtstring | null- Когда хост проверялся в последний раз, ISO-8601. Null до первой проверки.
tracking.verifiedAtstring | null- Когда проверка в последний раз прошла, ISO-8601. Null у хоста, который её ни разу не проходил.
tracking.errorstring | null- Что нашла последняя проверка, словами, по которым владелец домена может действовать. Null, когда последняя проверка прошла или ни одной ещё не было. Хост, провалившийся один или два раза, всё ещё `active` и несёт причину здесь.
addressesArray<{ address: string; enabled: boolean }>- Все строки адресов на домене — это то, что `get` добавляет к строке `list`. Сюда входят строки, которые доставка написала сама при catch-all, и они перестают приниматься в тот момент, когда catch-all выключают, так что этот массив не является списком того, что будет принимать почту.
addresses[].addressstring- Полный адрес, собранный заново из сохранённой локальной части и имени хоста и приведённый к нижнему регистру, так что он всегда соответствует `domain` выше, а не расходится с ним.
addresses[].enabledboolean- False отключает адрес, а отключённый отвергается даже при включённом catch-all. Все строки перечисляются в любом случае, так что фильтруйте по этому полю, а не читайте массив как набор работающих адресов.
createdAtstring- Когда была добавлена строка домена, ISO-8601. Не когда он подтвердился: это `receiving.verifiedAt`, который может быть null, пока это поле заполнено.