руководство · postmark api

Как продуктовой команде безопасно внедрить Postmark API?

Вызывайте Postmark API из авторизованного серверного воркера. Подтвердите домен отправки или подпись отправителя, изолируйте каждое окружение и тип нагрузки в соответствующем сервере Postmark и потоке сообщений, храните токен сервера в менеджере секретов и сохраняйте надёжную задачу отправки в приложении до вызова POST /email. Передавайте только одобренные поля, сохраняйте MessageID и точный ErrorCode от Postmark и считайте приём через API свидетельством обработки, а не доставки. Защищайте вебхуки доставки и отказов и устраняйте в них дубликаты, проверяйте стоп-лист получателей перед каждой отправкой, сверяйте неоднозначные тайм-ауты и до продакшена протестируйте ротацию, частичные сбои, повторы и экспорт.

Определите границы приложения до подключения Postmark

Отталкивайтесь от авторизованного бизнес-события — чека, подтверждения, запрошенного оповещения или уведомления безопасности. Сохраняйте надёжную задачу исходящей отправки со стабильным ключом события, тенантом, классом письма, ревизией шаблона, одобренными отправителем и получателями, основанием (согласие или необходимость), текущим решением по стоп-листу и начальным состоянием. Ввод из браузера, мобильного приложения, шаблона или от пользователя не должен выбирать токен сервера Postmark, произвольный адрес From, поток сообщений, вебхук, неограниченного получателя или метаданные провайдера. Выполняйте все вызовы провайдера через один серверный адаптер. Разделяйте транзакционный трафик и массовые или маркетинговые рассылки в соответствии с моделью согласия и репутации продукта. API Postmark доставляет письмо, но не устанавливает авторизацию тенанта, согласие получателя или идемпотентность на уровне бизнес-логики. Захватывайте внутреннюю задачу один раз, фиксируйте каждую попытку у провайдера и храните идентификаторы провайдера как свидетельства, привязанные к событию приложения, а не как единственный источник истины.

Используйте токены сервера с узкой операционной областью

Email API Postmark документирует заголовок X-Postmark-Server-Token для доступа к API на уровне сервера. Храните каждый токен в управляемом сервисе секретов и предоставляйте доступ к нему только воркеру, которому нужны этот сервер и окружение. Никогда не размещайте токены в клиентском коде, системе контроля версий, URL, журналах, аналитике, шаблонах, скриншотах, тикетах, промптах или тестовых фикстурах. Отделяйте продакшен от разработки и несвязанных продуктов, чтобы отзыв или злоупотребление имели ограниченные последствия. Отрепетируйте ротацию: выпустите замену через одобренное администрирование, обновите воркер, отправьте контрольные письма, подтвердите данные API и событий, а затем отзовите старый токен. Считайте неожиданные ошибки аутентификации поводом для паузы, а не приглашением быстро повторять попытки с учётными данными. Ограничьте администрирование панели строгой аутентификацией и ролями. Токен сервера авторизует операции Postmark API для своего сервера; приложение всё равно должно авторизовать тенанта, отправителя, получателя, шаблон и класс письма.

Подтвердите точный адрес отправителя

Используйте подпись отправителя или подтверждённый домен, которые контролирует организация, и проверьте точный адрес From, используемый каждым потоком. На исходных образцах полученных писем составьте перечень: видимый домен From, обратный путь SMTP, домен DKIM d= и селектор, адрес для ответов и поток сообщений отправки. Публикуйте только те DNS-записи, которые Postmark сейчас требует для выбранной схемы, предварительно разобравшись, кто владеет существующими SPF, DKIM и DMARC. Сохраните прежние значения и инструкции по откату. Подтверждение у провайдера — свидетельство того, что его проверка конфигурации пройдена; оно не доказывает, что этот адрес используют все пути приложения, что DMARC выровнен, что получатели дали согласие или что письма попадают во «Входящие». Храните авторизацию отправителей для каждого тенанта в приложении и блокируйте значения From другого тенанта. Тестируйте поддомены, ответы, отказы, нижестоящие окружения и пути шаблонов. Не ослабляйте политику SPF или DMARC организации только ради того, чтобы индикатор в панели стал зелёным.

Формируйте один явный запрос POST email

Postmark документирует POST /email с JSON-полями для отправителя, получателей, темы, текстового или HTML-тела, ReplyTo, заголовков, тегов или метаданных, потока сообщений, вложений и параметров отслеживания. Предоставляйте доступ только к тем полям, которые нужны продукту. Проверяйте и нормализуйте адреса, ограничивайте число получателей и вложений, отклоняйте внедрение заголовков, экранируйте значения шаблона с учётом контекста вывода и генерируйте текст и HTML из одной одобренной ревизии. Не помещайте секреты или лишние персональные данные в теги, метаданные, заголовки, темы или имена вложений: они могут появиться в журнале активности и событиях провайдера. Выбирайте MessageStream из доверенной конфигурации, а не из произвольных входных данных запроса. Держите полезную нагрузку провайдера в одном адаптере, чтобы бизнес-код не зависел от каждого поля Postmark. Сохраняйте ревизию содержимого или безопасный для конфиденциальности хеш, если это оправдано требованиями аудита, вместо журналирования полного тела письма.

Интерпретируйте немедленный ответ строго в его рамках

Эндпоинт Postmark для отправки одного письма документирует поля ответа, включая ErrorCode, Message, MessageID, SubmittedAt и информацию о получателях. Сохраняйте точный HTTP-статус и структурированный ответ провайдера вместе с попыткой в приложении. Успешный ответ и MessageID показывают, что Postmark принял API-запрос в рамках задокументированной семантики; они не показывают, что сервер назначения принял письмо или что оно попало во «Входящие». Классифицируйте ошибки валидации, подписи отправителя, аутентификации, некорректной полезной нагрузки, квоты и политики до повтора. Тайм-аут запроса неоднозначен: Postmark мог принять операцию, а клиент — не получить ответ. Оставьте такую попытку в состоянии «неизвестно», найдите её в активности провайдера или последующих событиях по безопасным данным корреляции и примените правило сверки для конкретного класса писем, прежде чем отправлять повторно. Никогда не обещайте доставку ровно один раз и не создавайте новое логическое событие только потому, что один HTTP-запрос завершился ошибкой.

Проектируйте повторы на основе данных провайдера и транспорта

Повторяйте только подходящие сетевые сбои, ответы об ограничении частоты и серверные ошибки провайдера — с экспоненциальной задержкой, случайным разбросом, конечным числом попыток и лимитом возраста очереди. Постоянные ошибки запроса, отправителя, получателя, токена, шаблона и политики исправляйте, а не воспроизводите заново. Сохраняйте тот же ключ события приложения и фиксируйте связанные попытки. Непосредственно перед каждым повтором снова проверяйте стоп-лист и авторизацию, потому что состояние получателя или бизнес-логики может измениться, пока задача в очереди. Ограничивайте параллельность и частоту по серверу, тенанту, потоку сообщений, домену отправителя и группе адресатов, чтобы один сбой не захватил всю ёмкость. Останавливайтесь при истёкших событиях, отозванном адресе отправителя, жалобе, отписке, постоянном сбое получателя или паузе из-за инцидента. Отслеживайте возраст повторов, неизвестные исходы, классы ответов, сбои токенов и задержку провайдера. Если Postmark после приёма уже выполняет повторы SMTP на следующем этапе, не создавайте поверх этого транспортного поведения агрессивный дублирующий цикл в приложении.

Защитите вебхуки доставки и отказов

Настраивайте только те типы вебхуков Postmark, которые нужны приложению, и используйте HTTPS. Применяйте актуальные задокументированные механизмы защиты вебхуков, ограничьте эндпоинт ожидаемым сервером или потоком, задайте ограничения на размер запроса и тип содержимого и никогда не доверяйте идентификаторам писем, получателям, тегам, метаданным или диагностике только потому, что JSON успешно разобрался. Сохраняйте или ставьте в очередь аутентифицированное либо иным образом безопасно принятое событие до возврата успешного ответа. Устраняйте дубликаты по стабильному идентификатору события у провайдера, если он есть, или по консервативному составному ключу, который не сольёт разных получателей, типы событий или попытки. Храните время события и время обработки отдельно. Будьте готовы к задержкам, повторам, дублированию и доставке не по порядку. Сопоставляйте MessageID и доверенные метаданные с внутренним тенантом и задачей до изменения состояния. Ротируйте учётные данные или URL вебхуков независимо от API-токенов, отслеживайте неавторизованные запросы и отставание и храните исходную полезную нагрузку не дольше, чем оправдано операционными потребностями и политикой.

Моделируйте состояния доставки, отказов и стоп-листа

Сопоставляйте данные Postmark о доставке и отказах с внутренней моделью на уровне получателя, сохраняя исходный тип у провайдера, MessageID, метку времени, статус или классификацию отказа и диагностику. Приём через API, обработка в Postmark, приём сервером назначения, последующая недоставка, попадание в папку почтового ящика и вовлечённость — разные состояния. Событие delivered обычно отражает задокументированное наблюдение провайдера о сервере назначения, а не взгляд в итоговую папку. Временные сбои могут оправдывать ограниченную транспортную обработку; подтверждённые постоянные сбои адреса должны приводить к добавлению получателя в стоп-лист. Жалобы и отписки должны обновлять состояние безопасности получателя до следующих задач. Защищайте ручное восстановление получателя авторизацией, причиной и историей аудита. Храните состояние согласий и стоп-листа в продукте, чтобы миграция не уничтожила защиту получателей. Не делайте выводов о прочтении человеком по отслеживанию открытий и кликов: это инструменты измерения вовлечённости, на которые могут влиять технологии защиты приватности.

Тестируйте песочницу, продакшен и сценарии сбоев

Для детерминированных сбоев используйте задокументированные тестовые средства или песочницу Postmark и отдельных контролируемых получателей, а не реальные адреса клиентов. Протестируйте корректные и некорректные токены, неавторизованные адреса From, разрешённых и заблокированных получателей, текст и HTML, Unicode, вложения, минимизацию метаданных, потоки сообщений, тайм-аут запроса до и после приёма, ответ об ограничении частоты, аутентификацию вебхуков, повторную доставку, события не по порядку, классификацию отказов, стоп-лист и ротацию токенов. Проверьте заголовки полученных писем, выравнивание DKIM и DMARC, Reply-To, настройки отслеживания и сопоставление MessageID. Убедитесь, что нижестоящие окружения не могут отправлять письма реальным получателям. Проведите тесты экспорта и миграции для стоп-листов и операционных данных. Блокируйте запуск при доступе к отправителям или событиям другого тенанта, невозможности применять стоп-лист, неоднозначном приёме вебхуков, секретах в журналах, неограниченных повторах или невозможности безопасно приостановить затронутый сервер или поток.

Как SendHQ вписывается в эту схему

SendHQ — email API в рамках рабочего пространства для ожидаемой продуктовой коммуникации. Его публичная документация охватывает отправку с подтверждённого домена, входящую почту, хранимые шаблоны, события доставки, стоп-листы и веб-панель управления.

Частые вопросы

Какой эндпоинт отправляет одно письмо через Postmark?

Актуальная документация Email API Postmark описывает POST /email с токеном сервера и структурированными JSON-полями письма. Вызывайте его только из авторизованного серверного кода.

Где хранить токен сервера Postmark?

В управляемой серверной системе секретов — с узкой областью действия по окружению и нагрузке, аудитом доступа, проверенной ротацией и без доступа с клиента.

Доказывает ли успешный ответ Postmark API доставку?

Нет. Он фиксирует приём провайдером в рамках немедленного контракта API. Приём сервером назначения, отказ, попадание в почтовый ящик и вовлечённость требуют последующих свидетельств соответствующего уровня.

Как повторять запросы к Postmark после тайм-аута?

Считайте тайм-аут после возможной отправки неоднозначным. Перед повторной отправкой сверьтесь с активностью провайдера или последующими событиями, используя тот же надёжный ключ бизнес-события.

Можно ли считать вебхуки Postmark уникальными и упорядоченными?

Нет. Проектируйте с расчётом на задержки, повторы, дублирование и приход не по порядку. Безопасно принимайте события, надёжно их сохраняйте, устраняйте дубликаты и применяйте монотонные переходы состояний на уровне получателя.

Можно ли хранить секреты клиентов в метаданных Postmark?

Нет. Используйте ограниченные значения корреляции, безопасные для конфиденциальности. Метаданные, теги, заголовки, журналы активности, события, логи и выгрузки могут раскрывать эти поля в ходе эксплуатации.

Доказывает ли событие delivered попадание во «Входящие»?

Нет. Это свидетельство провайдера ограниченного уровня — обычно о приёме сервером назначения. Фильтрация у получателя, правила почтового ящика, итоговая папка и реакция человека остаются отдельными результатами.

Где найти документацию API SendHQ?

Смотрите публичную документацию SendHQ по его email API, отправке с подтверждённого домена, входящей почте, шаблонам, событиям доставки и стоп-листам.

Источники