Отправка писем

14 статьи Сергей Виктория От Сергей and Виктория

Как отправлять письма через API и SMTP: реквизиты, каналы, пакетная отправка, коды ошибок, настройка Postfix и Sendmail.

Какие SMTP-реквизиты и API-ключи нужно использовать?

Какие данные нужны для подключения, зависит от способа отправки: через API или через SMTP. Если вы отправляете через API Используйте серверный API-ключ. Его выпускают в личном кабинете: SMTP-серверы → ваш сервер → API-ключи → Выпустить новый ключ. У каждого сервера свои ключи, значение показывается сразу после выпуска. Ключ передаётся в заголовке X-Haskimail-Server-Token. Как выпустить и заменить ключ — в статье «Как сменить серверный API-ключ». Вкладка «API-ключи» сервера: список ключей с датой создания, сроком действия и статусом, форма «Выпустить новый ключ» (значения ключей заменены на демонстрационные) Чтобы отправить письмо через определённый канал, укажите в запросе параметр MessageStream с ID канала. Если параметр не указан, письмо уйдёт через транзакционный канал сервера по умолчанию. Не смешивайте транзакционные и маркетинговые письма в одном канале — это важно для доставляемости. ID канала в правом верхнем углу страницы канала отправки — его передают в параметре MessageStream Если вы отправляете через SMTP Параметр Значение Сервер smtp.haskimail.ru Порт 587 (STARTTLS), 465 (SSL), 25 или 2525 (TLS) Логин и пароль SMTP-реквизиты канала отправки Вместо реквизитов канала можно авторизоваться серверным API-ключом: укажите его и как логин, и как пароль. SMTP-реквизиты есть у каждого канала. Найти их можно в настройках канала: SMTP-серверы → ваш сервер → канал → Инструкции по отправке → SMTP или на вкладке Настройки канала. По логину и паролю Haskimail понимает, через какой канал отправлять письмо, поэтому для транзакционных писем и для рассылок используйте реквизиты соответствующих каналов. Если реквизиты попали к посторонним, их можно перевыпустить в настройках канала. Вкладка «Инструкции по отправке» → SMTP: хост, порты и реквизиты канала (значения заменены на демонстрационные) Соединение с сервером всегда шифруется: на портах 25 и 2525 — по TLS, на порту 587 — через STARTTLS, на порту 465 — сразу по SSL. Подробнее — в документации по SMTP. Если вы отправляете письма через Postfix, воспользуйтесь инструкцией «Как настроить Postfix для отправки через Haskimail».

Настройки SMTP-сервера

На вкладке Настройки SMTP-сервера можно изменить его название и цветовую метку, включить или выключить отправку по SMTP, настроить отслеживание открытий и кликов по умолчанию и удалить сервер. Как открыть настройки Перейдите в раздел SMTP-серверы, откройте нужный сервер и выберите вкладку Настройки. Вкладка «Настройки» SMTP-сервера Основные настройки - Название сервера — так сервер называется в списке серверов и в отчётах. Название видите только вы и пользователи вашего аккаунта. - Тип сервера — «Живой» (письма доставляются получателям) или «Песочница» (письма проходят все проверки и видны в статистике, но не доставляются). Тип выбирается при создании сервера, изменить его потом нельзя. Подробнее — в статье «Сервер «Песочница»: руководство по использованию». - Цветовая метка — цвет точки рядом с названием сервера в списке. Метка помогает быстро отличать серверы, например рабочий и тестовый. Чтобы применить изменения, нажмите Сохранить изменения. Основные настройки: название, тип сервера и цветовая метка SMTP Переключатель SMTP включает отправку писем через SMTP-протокол для всего сервера. Если вы отправляете письма только через API, SMTP можно выключить. Логин, пароль и адрес для подключения по SMTP находятся в настройках каждого канала отправки. Подробнее — в статье «Какие SMTP-реквизиты и API-ключи нужно использовать?». Переключатель SMTP для всего сервера Трекинг Здесь включается отслеживание по умолчанию для всех писем, которые уходят через этот сервер: - Открытия — сколько получателей открыли письмо. - Клики по ссылкам — кто и по каким ссылкам перешёл. Отметьте, в каких версиях письма отслеживать ссылки: в HTML-версии, текстовой версии или в обеих. Для отдельного письма можно включить отслеживание открытий, даже если на сервере оно выключено, и так же включить отслеживание кликов. Выключить отслеживание для письма, когда оно включено на сервере, нельзя: настройка сервера приоритетна. Подробнее — в статьях «Отслеживание открытий. Как включить» и «Отслеживание ссылок. Как включить». Настройки трекинга открытий и кликов по умолчанию Удаление сервера Внизу страницы настроек есть кнопка Удалить сервер. Удаление необратимо: отправка писем через сервер сразу останавливается, а его настройки, логи писем и статистику восстановить не получится. Первый, базовый сервер аккаунта удалить нельзя: к нему привязаны настройки аккаунта и IP-адреса. Удаление сервера

Каналы отправки: создание, отправка, архивация

Каналы отправки помогают разделять письма разных типов внутри одного сервера. В каждом сервере можно создать дополнительные каналы двух типов. - Транзакционные каналы — для писем, которые отправляются в ответ на действие пользователя: сброс пароля, подтверждение заказа, уведомление об отправке. - Маркетинговые каналы — для писем, которые ваше приложение отправляет сразу многим получателям: новостные рассылки, анонсы, уведомления об изменении условий использования. Маркетинговые каналы работают на отдельной инфраструктуре, чтобы рассылки не влияли на доставляемость транзакционных писем. Важно: основным каналом сервера всегда остаётся транзакционный канал, созданный вместе с сервером. Маркетинговый канал нельзя сделать каналом по умолчанию. Чтобы отправить письмо через другой канал, его нужно явно указать одним из способов ниже. Как создать канал 1. Выберите сервер, в который хотите добавить канал. 2. Нажмите Создать канал отправки. Кнопка «Создать канал отправки» на вкладке «Каналы отправки» сервера 3. Укажите название канала и его тип: транзакционный или маркетинговый. 4. Нажмите Создать. Как отправить письмо через нужный канал У каждого канала есть ID — уникальный идентификатор. Он показан в правом верхнем углу страницы канала. Если канал при отправке не указан, письмо уходит через основной транзакционный канал сервера. ID канала в правом верхнем углу страницы канала отправки Через API Передайте ID канала в параметре MessageStream. Пример пакетной отправки через канал с ID 3007: curl "https://api.haskimail.ru/email/batch" \ -X POST \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "X-Haskimail-Server-Token: ваш_ключ_сервера" \ -d '[ { "From": "sender@example.com", "To": "recipient@example.com", "Subject": "Обновление условий использования", "Tag": "tosupdate", "HtmlBody": "<strong>Здравствуйте</strong>, наши условия изменились...", "TextBody": "Здравствуйте, наши условия изменились...", "MessageStream": "3007" }, { "From": "sender@example.com", "To": "another-recipient@example.com", "Subject": "Обновление условий использования", "Tag": "tosupdate", "HtmlBody": "<strong>Здравствуйте</strong>, наши условия изменились...", "TextBody": "Здравствуйте, наши условия изменились...", "MessageStream": "3007" } ]' Так же канал указывается при пакетной отправке по шаблонам. Ключи в TemplateModel — это переменные шаблона вместе с фигурными скобками: curl "https://api.haskimail.ru/email/batchWithTemplates" \ -X POST \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "X-Haskimail-Server-Token: ваш_ключ_сервера" \ -d '{ "Messages": [ { "From": "sender@example.com", "To": "recipient@example.com", "TemplateAlias": "tosupdate", "TemplateModel": { "{{customer_name}}": "Иван" }, "MessageStream": "3007" }, { "From": "sender@example.com", "To": "another-recipient@example.com", "TemplateAlias": "tosupdate", "TemplateModel": { "{{customer_name}}": "Анна" }, "MessageStream": "3007" } ] }' Подробнее о пакетной отправке — в статье «Пакетная отправка писем через API». Через SMTP При отправке по SMTP канал определяется по SMTP-реквизитам: у каждого канала свой логин и пароль. Чтобы отправить письмо через нужный канал: 1. Откройте настройки канала. 2. Скопируйте его SMTP-реквизиты: Блок SMTP в настройках канала: хост, порты, логин и пароль (значения заменены на демонстрационные) 3. Укажите их в настройках вашего SMTP-клиента: сервер smtp.haskimail.ru, порт 587 (STARTTLS), 465 (SSL), 25 или 2525 (TLS). Архивация канала В настройках канала можно нажать Архивировать канал. Архивный канал и его статистика автоматически удаляются через 45 дней. Блок «Архивировать канал» в настройках канала отправки Пока канал не удалён, его можно восстановить: на странице сервера выберите Посмотреть архивные каналы. Кнопка «Посмотреть архивные каналы» под списком каналов сервера Архивировать и восстанавливать каналы можно и через API.

Пакетная отправка писем через API

Один запрос заменяет сотни одиночных отправок. Письма в пакете проверяются независимо: ошибка в одном письме не мешает отправке остальных. У каждого письма в пакете свои получатели, тема и содержимое, поэтому пакет подходит и для персональных уведомлений, и для рассылок. Ограничения Параметр Значение Писем в одном запросе от 1 до 500 Размер запроса до 50 МБ, включая вложения Получателей в одном письме до 50, включая Cc и Bcc Метод для обычных писем POST /email/batch Метод для писем по шаблонам POST /email/batchWithTemplates Если писем больше 500, разделите их на несколько запросов. Как отправить пакет писем 1. Соберите письма в JSON-массив. Каждый элемент массива описывается так же, как при одиночной отправке: From, To, Subject, HtmlBody или TextBody. 2. Отправьте массив на /email/batch с серверным API-ключом в заголовке X-Haskimail-Server-Token. 3. Проверьте результат каждого письма в ответе. Пример запроса: curl "https://api.haskimail.ru/email/batch" \ -X POST \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "X-Haskimail-Server-Token: ваш_токен_сервера" \ -d '[ { "From": "Магазин <shop@example.com>", "To": "ivan@example.com", "Subject": "Ваш заказ отправлен", "TextBody": "Здравствуйте, Иван! Заказ №1042 передан в доставку." }, { "From": "Магазин <shop@example.com>", "To": "anna@example.com", "Subject": "Ваш заказ отправлен", "TextBody": "Здравствуйте, Анна! Заказ №1043 передан в доставку." } ]' Чтобы отправить письма через определённый канал, добавьте каждому письму параметр MessageStream с ID канала. Без него письма уходят через транзакционный канал сервера по умолчанию. В пакет /email/batch можно добавлять и письма по шаблону: укажите в письме TemplateId или TemplateAlias и TemplateModel так же, как при отправке письма с шаблоном. Как отправить пакет писем по шаблонам Для писем по сохранённым шаблонам используйте метод /email/batchWithTemplates. Письма передаются в поле Messages. У каждого письма указывается шаблон — его ID в TemplateId или название в TemplateAlias — и подстановки в TemplateModel. Подстановка в шаблонах буквальная: ключ TemplateModel — это фрагмент текста шаблона вместе со скобками. Например, {"{{name}}": "Иван"} заменит в шаблоне {{name}} на «Иван». curl "https://api.haskimail.ru/email/batchWithTemplates" \ -X POST \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "X-Haskimail-Server-Token: ваш_токен_сервера" \ -d '{ "Messages": [ { "TemplateId": 4521, "TemplateModel": { "{{name}}": "Иван", "{{order}}": "1042" }, "From": "Магазин <shop@example.com>", "To": "ivan@example.com" }, { "TemplateId": 4521, "TemplateModel": { "{{name}}": "Анна", "{{order}}": "1043" }, "From": "Магазин <shop@example.com>", "To": "anna@example.com" } ] }' Важно: шаблон каждого письма должен принадлежать серверу, чей ключ указан в запросе. Иначе это письмо получит ошибку 1101, а остальные письма пакета будут отправлены. Как читать ответ API возвращает HTTP 200 и массив результатов. Результаты идут в том же порядке, что и письма в запросе: первый результат относится к первому письму, второй ко второму и так далее. HTTP 200 означает, что пакет принят, но не означает, что принято каждое письмо. Результат каждого письма смотрите в его поле ErrorCode: - ErrorCode = 0 — письмо принято и поставлено в очередь, в поле MessageID его идентификатор. Если у письма несколько получателей, идентификаторы перечислены через запятую. - ErrorCode не 0 — письмо отклонено, причина в поле Message, а MessageID равен null. Остальные письма пакета это не затрагивает. Если элемент массива — не JSON-объект, пакет всё равно принимается: этот элемент получает в ответе ErrorCode 300 с сообщением «Письмо должно быть JSON-объектом», а остальные письма обрабатываются как обычно. Пример ответа, где у второго письма неверный адрес получателя: [ { "To": "ivan@example.com", "SubmittedAt": "2026-10-13 14:30:12", "MessageID": "6f1c0b2d9e8a4f7b3c5d2e1a0b9c8d7e", "ErrorCode": 0, "Message": "OK" }, { "To": "anna.example.com", "SubmittedAt": "2026-10-13 14:30:12", "MessageID": null, "ErrorCode": 6, "Message": "Некорректный email-адрес получателя" } ] Время в SubmittedAt указывается по Москве в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС. Важно: не проверяйте успех пакета только по HTTP 200. Обходите массив результатов и обрабатывайте отклонённые письма отдельно, например исправьте данные и отправьте их повторно. Когда не отправляется весь пакет В некоторых случаях API отклоняет пакет целиком, и ни одно письмо не уходит: Ответ Причина HTTP 422, ErrorCode 300 тело запроса не в том формате, в пакете нет писем или их больше 500 HTTP 413 размер запроса больше 50 МБ HTTP 403 в настройках аккаунта задан список разрешённых IP-адресов, а запрос пришёл с другого адреса Тестирование Тестовый ключ HASKIMAIL_API_TEST работает и для пакетной отправки. Передайте его в заголовке X-Haskimail-Server-Token вместо серверного ключа: API проверит каждое письмо пакета и вернёт результаты в обычном формате, но письма не создаются — их не будет ни в активности, ни в статистике. Тестовый ключ проверяет только сам запрос: обязательные поля, адреса и вложения. Канал отправки и другие настройки сервера он не проверяет. Поэтому письмо, принятое с тестовым ключом, при боевой отправке всё равно может получить ошибку — например, 1226, если указан канал другого сервера. Также для тестов подойдёт сервер «Песочница». Полное описание методов — в документации: пакетная отправка и пакетная отправка с шаблонами.

Ответ API при отправке письма и коды ошибок

Методы отправки одного письма POST /email и POST /email/withTemplate всегда возвращают один и тот же набор полей. По HTTP-статусу и полю ErrorCode ваше приложение понимает, принято ли письмо в отправку, а если нет — по какой причине. Результат HTTP-статус ErrorCode Письмо принято в отправку 200 0 Письмо не удалось принять 422 код причины Ответы пакетной отправки устроены иначе — они описаны в статье «Пакетная отправка писем через API». Поля ответа - To — получатели из запроса. - SubmittedAt — время приёма письма по Москве в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС. - MessageID — идентификатор письма. Если получателей несколько, идентификаторы перечислены через запятую в том же порядке. Если письмо не принято — null. По MessageID письмо ищут в API сообщений и в вебхуках. - ErrorCode — 0, если письмо принято. Иначе — код ошибки. - Message — описание результата или причина ошибки. Пример ответа, когда письмо принято (HTTP 200): { "To": "ivan@example.com", "SubmittedAt": "2026-10-20 14:30:12", "MessageID": "6f1c0b2d9e8a4f7b3c5d2e1a0b9c8d7e", "ErrorCode": 0, "Message": "OK" } Пример ответа, когда письмо не удалось принять (HTTP 422): { "To": "ivan.example.com", "SubmittedAt": "2026-10-20 14:30:12", "MessageID": null, "ErrorCode": 6, "Message": "Некорректный email-адрес получателя" } Частые коды ошибок ErrorCode Что случилось Что делать 3 не все обязательные параметры, например нет ни HtmlBody, ни TextBody дополнить запрос 4 аккаунт не может отправлять: заблокирован, удалён или ещё на модерации проверить статус аккаунта 6 некорректный email-адрес в From, To, Cc или Bcc исправить адрес 35 отправка недоступна: недостаточно средств, блокировка за спам или отправка отключена проверить баланс и статус аккаунта 36 временная ошибка отправки повторить запрос позже 52 адрес отправителя не подтверждён подтвердить адрес или домен 400 отправитель не подтверждён, пока аккаунт на модерации отправлять с подтверждённых адресов и доменов 412 получатель не подтверждён, пока аккаунт на модерации отправлять на подтверждённые адреса и домены 1101 шаблон не найден или принадлежит другому серверу проверить TemplateId или TemplateAlias 1226 канал не найден, принадлежит другому серверу или в архиве; если MessageStream не указан — у сервера нет активного транзакционного канала проверить MessageStream Полный список — в разделе «Коды ошибок API» документации. Если аккаунт на модерации, ошибка 412 может прийти раньше остальных: пока получатель не подтверждён, письмо без тела или с неверным адресом тоже получит код 412. Подтвердите адреса получателей и отправьте запрос ещё раз — тогда API покажет остальные ошибки, если они есть. Подробнее — в статье «Модерация аккаунта». Как обрабатывать ответ в приложении 1. Считайте письмо отправленным, только если пришли HTTP 200 и ErrorCode 0. Сохраните MessageID — по нему вы свяжете письмо с событиями доставки, открытиями и кликами. 2. При HTTP 422 запишите в лог ErrorCode и Message: по ним проще найти причину. 3. Повторяйте отправку только при коде 36 и с паузой. Остальные ошибки повтором не исправить: нужно поправить запрос или настройки аккаунта. 4. Убедитесь, что ответ 422 не приводит к падению приложения или к повторной отправке в бесконечном цикле. Как проверить обработку ошибок Передайте тестовый ключ HASKIMAIL_API_TEST в заголовке X-Haskimail-Server-Token и отправьте заведомо некорректное письмо, например с адресом без «@». Письма с тестовым ключом никуда не уходят. curl "https://api.haskimail.ru/email" \ -X POST \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "X-Haskimail-Server-Token: HASKIMAIL_API_TEST" \ -d '{ "From": "Магазин <shop@example.com>", "To": "ivan.example.com", "Subject": "Проверка", "TextBody": "Тестовое письмо" }' Учтите особенности тестового режима: - ошибки в данных приходят со своими кодами: 300 — неверное значение поля, 403 — неверное поле запроса, 411 — запрещённый тип вложения; - проверяется только сам запрос: обязательные поля, адреса и вложения. Канал отправки и другие настройки сервера не проверяются, поэтому ошибку 1226 на тестовом ключе не увидеть. Чтобы проверить отправку целиком, включая настройки сервера, используйте сервер «Песочница». Если вы работаете через наши клиентские библиотеки, проверьте, как библиотека сообщает об ответе 422 в вашем коде. Актуальные версии — в статье «Официальные библиотеки».

Теги и метаданные писем

Теги и метаданные помогают связать письмо с данными вашего приложения: понять, какой это тип письма, к какому заказу или пользователю оно относится. Теги Тег — одна текстовая метка письма, например welcome, password-reset или order. У письма может быть только один тег длиной до 1000 символов. По тегам удобно: - смотреть статистику отдельно по каждому типу писем — на вкладке Статистика канала есть фильтр по тегам; - фильтровать письма, открытия, клики и возвраты в API; - отличать события в вебхуках: тег приходит в поле campaign_id. Как задать тег Через API — полем Tag: { "From": "shop@example.ru", "To": "ivan@example.com", "Subject": "Ваш заказ оформлен", "TextBody": "Спасибо за заказ!", "Tag": "order" } Через SMTP — заголовком X-HM-Tag: X-HM-Tag: order Метаданные Метаданные — произвольные пары «ключ — значение», которые вы прикрепляете к письму: ID заказа, ID пользователя, номер тикета. Haskimail их не показывает получателю, а возвращает вам в вебхуках в поле custom_vars (строка с JSON). Так событие доставки или возврата сразу связывается с объектом в вашей системе — без поиска по MessageID. Через API — полем Metadata: { "From": "shop@example.ru", "To": "ivan@example.com", "Subject": "Ваш заказ оформлен", "TextBody": "Спасибо за заказ!", "Tag": "order", "Metadata": { "order_id": "1042", "user_id": "48213" } } Через SMTP — заголовком X-HM-Metadata. Формат заголовка описан в документации по SMTP. Советы - Используйте небольшой набор постоянных тегов по типам писем, а не уникальный тег на каждое письмо: иначе фильтр статистики станет бесполезным. - Уникальные значения — номер заказа, ID пользователя — передавайте в метаданных. - Не кладите в теги и метаданные персональные данные и секреты: пароли, токены, номера карт. Подробнее о полях запроса — в документации по отправке через API.

Ограничения по размеру

У писем, отправляемых через Haskimail, есть ограничения по размеру, числу получателей и типам вложений. Если письмо их нарушает, оно будет отклонено. Что ограничено Лимит Текстовая версия ( TextBody ) до 5 МБ HTML-версия ( HtmlBody ) до 5 МБ Письмо целиком, вместе с вложениями до 10 МБ Получателей в одном письме до 50 суммарно в To, Cc и Bcc Пакетная отправка до 500 писем и до 50 МБ на запрос Учитывайте кодирование. Вложения передаются в кодировке base64, а размер письма считается уже после кодирования. Закодированный файл примерно на треть больше исходного, поэтому, например, вложение весом 8 МБ превысит лимит. Запрещённые типы вложений Письмо будет отклонено, если в нём есть файл с одним из расширений: vbs, exe, bin, bat, chm, com, cpl, crt, hlp, hta, inf, ins, isp, jse, lnk, mdb, pcd, pif, reg, scr, sct, shs, vbe, vba, wsf, wsh, wsl, msc, msi, msp, mst. Если нужно передать большой файл или файл запрещённого типа, загрузите его в облачное хранилище и добавьте в письмо ссылку. Подробнее о вложениях — в документации по отправке через API.

Как отправлять письма от имени клиентов

Если вы веб-агентство, сервис поддержки или CRM, маркетплейс или другая платформа, вам, скорее всего, нужно отправлять письма от имени своих клиентов и партнёров. Правильная настройка поможет: - сохранить репутацию бренда клиента; - сделать так, чтобы получатели доверяли письмам, отправленным от имени клиента; - обеспечить хорошую доставляемость; - управлять письмами каждого клиента отдельно и ограничивать риски; - обслуживать клиентов на высоком уровне. Отправлять письма от имени клиентов можно тремя способами: - С вашего собственного домена. Самый простой способ, но бренд клиента виден только в имени отправителя. - С подтверждённого адреса клиента. Письма уходят с конкретного адреса на домене клиента. - С подтверждённого домена клиента. Письма можно отправлять с любого адреса на домене клиента. Способ 1. Отправка с вашего домена Это самый быстрый способ: клиентам ничего не нужно делать за пределами вашего приложения. Кроме того, им не нужно разбираться с DKIM, SPF и DMARC — всё это вы настраиваете за них на своём домене. Имя отправителя (поле «От кого») и адрес для ответа (Reply-To) можно задать для каждого письма. При отправке по SMTP укажите их в заголовках письма From и Reply-To. При отправке через API используйте поля From и ReplyTo: { "From": "Магазин клиента <notifications@ваш-домен.ru>", "To": "receiver@example.com", "Subject": "Ваш заказ оформлен", "HtmlBody": "<b>Здравствуйте!</b>", "TextBody": "Здравствуйте!", "ReplyTo": "support@домен-клиента.ru", "TrackOpens": true } Недостаток: адрес отправителя всегда на вашем домене. Если клиентам важно отправлять письма со своего домена, выберите один из способов ниже. Способ 2. Подтверждение адреса клиента Подходит, если клиенты хотят отправлять письма со своего домена, но вы не хотите просить их менять DNS-записи. Haskimail нужно знать, с какого адреса будет отправлять клиент: мы отправим на этот адрес письмо со ссылкой для подтверждения. 1. На странице «Домены и отправители» выберите Подтвердить обратный адрес. Кнопка «Подтвердить обратный адрес» 2. Укажите имя отправителя и адрес, который хотите использовать. Этот почтовый ящик должен существовать и принимать письма. 3. Клиент получит письмо от Haskimail и подтвердит адрес по ссылке. Важно: адреса бесплатных почтовых сервисов, например Mail.ru, Яндекс Почты или Gmail, подтвердить нельзя. Способ 3. Подтверждение домена клиента Этот способ требует от клиента чуть больше усилий, но они того стоят: клиент сможет отправлять письма с любого адреса на своём домене, а репутация будет копиться у его домена. 1. На странице «Домены и отправители» добавьте домен клиента. Кнопка «Добавить домен» 2. Haskimail покажет DKIM- и SPF-записи для этого домена. 3. Клиент добавляет эти записи в DNS своего домена. Изменения в DNS вступают в силу до 48 часов, но обычно быстрее. Подробнее — в статье «Как подтвердить домен». Совет 1. Подключайте домены клиентов через API Если клиентов много, добавлять домены вручную неудобно. Через Domains API можно добавить домен клиента, получить DNS-записи, показать их клиенту в вашем интерфейсе и запустить проверку. Для этого нужен API-ключ аккаунта. Подробнее — в статье «Как управлять доменами через API». Попробовать методы без кода можно в коллекции для Postman. Совет 2. Разделяйте письма клиентов по серверам и каналам Разделяйте письма клиентов по серверам и каналам. В аккаунте может быть до 3 серверов (все лимиты), поэтому крупным клиентам удобно выделить отдельный сервер, а остальных разделить каналами. Например: Сервер «Клиент 1» - Канал «Чеки» — транзакционный - Канал «Новости продукта» — маркетинговый Сервер «Клиент 2» - Канал «Внутренние уведомления» — транзакционный - Канал «Изменения условий» — маркетинговый - Канал «Подтверждения бронирования» — транзакционный Что это даёт: - Изоляция проблем. Если у клиента 2 возникнут проблемы с одним каналом, отправку можно приостановить только в нём, а остальные письма продолжат уходить. - Контроль рисков. Жалобы на спам, возвраты, боты и злоупотребления формами у одного клиента не затронут других. - Отдельная статистика по каждому клиенту: отправки, возвраты, жалобы, открытия, клики. - Отдельные стоп-списки и отписки для каждого канала. Создавать серверы программно можно через API серверов, а каналы — через API каналов.

Как переотправить письмо

Повторно отправить уже отправленное письмо через интерфейс Haskimail или API нельзя. Чтобы отправить письмо ещё раз, создайте новый запрос на отправку — так же, как для любого другого письма. Если письмо не дошло, сначала выясните причину: откройте его в логе активности канала и посмотрите статус и ответ почтового сервера. Повторная отправка на адрес, который попал в стоп-список после жёсткого возврата или жалобы на спам, не сработает, пока адрес не будет восстановлен. Подробнее — в статьях «Почему получатель не получил моё письмо» и «Как восстановить неактивный адрес». Каждая повторная отправка считается новым письмом и учитывается в лимите тарифа.

Ссылка отписки

Каждое письмо, которое отправляется через канал массовых рассылок Haskimail, должно содержать ссылку для отписки. В письмах из транзакционных каналов ссылка отписки тоже работает, но там она необязательна. Отписка происходит в один клик. Когда получатель нажимает на ссылку, Haskimail исключает его адрес из рассылок этого канала и показывает страницу об успешной отписке. Адрес появляется в разделе «Стоп-список» канала отправки. При желании получатель может подписаться снова. Как добавить ссылку для отписки По умолчанию текст ссылки — «Отписаться». Чтобы задать свой текст или разместить ссылку в нужном месте письма, вставьте плейсхолдер %ОТПИСАТЬСЯ% в адрес ссылки: <a class="unsub_link" href="%ОТПИСАТЬСЯ%">Отписаться от рассылки</a> При отправке Haskimail заменит плейсхолдер на персональную ссылку отписки для каждого получателя. Синхронизация отписок Если вы ведёте список подписчиков в своей системе, синхронизируйте его с отписками в Haskimail. Получить список отписавшихся можно через API стоп-списков, а узнавать об отписках сразу — через вебхук изменения подписки.

Как настроить Postfix для отправки через Haskimail

Postfix можно настроить как смарт-хост, который пересылает почту через SMTP-сервер Haskimail. Код приложения при этом менять не нужно, а Postfix сам ставит письма в очередь: если связь с Haskimail временно пропадёт, письма отправятся позже. Важно: для авторизации нужен пакет SASL. Установите его: - Debian, Ubuntu: apt-get install libsasl2-modules - CentOS, RHEL: yum install cyrus-sasl-plain Без него возникнет ошибка «SASL authentication failed; no mechanism available». Для подключения понадобятся SMTP-реквизиты канала — логин и пароль. Они находятся в настройках канала отправки в личном кабинете. По реквизитам Haskimail определяет, через какой канал отправлять письма. Пересылка всех писем через Haskimail Добавьте в файл /etc/postfix/main.cf: # Сервер Haskimail, порт 587 с STARTTLS relayhost = [smtp.haskimail.ru]:587 # Авторизация по SMTP-реквизитам канала smtp_sasl_auth_enable = yes smtp_sasl_password_maps = static:ЛОГИН:ПАРОЛЬ smtp_sasl_security_options = noanonymous # Обязательное шифрование smtp_tls_security_level = encrypt smtp_tls_loglevel = 1 Вместо ЛОГИН и ПАРОЛЬ подставьте SMTP-реквизиты канала. Пересылка писем только от определённых отправителей Если через Haskimail нужно отправлять только письма с определённых адресов, вместо relayhost добавьте в /etc/postfix/main.cf: sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay Настройки SASL и TLS оставьте такими же, как выше. Создайте файл /etc/postfix/sender_relay и перечислите в нём адреса: email@example.ru [smtp.haskimail.ru]:587 Затем соберите из этого файла таблицу, которую читает Postfix: postmap /etc/postfix/sender_relay После каждого изменения файла sender_relay команду нужно выполнять заново. Перезапуск Postfix После настройки перезапустите Postfix: systemctl restart postfix На старых системах без systemd: service postfix restart. Готово: письма, которые отправляет ваш сервер Postfix, будут уходить через Haskimail — все или только от указанных адресов, в зависимости от выбранного варианта. Если провайдер блокирует порт 587, используйте 2525. Подробнее о портах — в документации по SMTP. Настройка для Sendmail — в статье «Как настроить Sendmail для отправки через Haskimail».

Как настроить Sendmail для отправки через Haskimail

Sendmail можно настроить как смарт-хост, который пересылает почту через SMTP-сервер Haskimail. Код приложения при этом менять не нужно, а Sendmail сам ставит письма в очередь: если связь с Haskimail временно пропадёт, письма отправятся позже. Для подключения понадобятся SMTP-реквизиты канала — логин и пароль. Они находятся в настройках канала отправки в личном кабинете. По реквизитам Haskimail определяет, через какой канал отправлять письма. Подробнее — в статье «Какие SMTP-реквизиты и API-ключи нужно использовать?». Ниже — настройка для порта 587 с шифрованием STARTTLS. Команды выполняйте от имени root. Установка Sendmail Для авторизации нужны модули SASL, поэтому установите их вместе с Sendmail. - Debian, Ubuntu: apt-get install sendmail sasl2-bin - CentOS, RHEL: yum install sendmail sendmail-cf cyrus-sasl-plain Реквизиты для авторизации Создайте файл /etc/mail/authinfo со строкой: AuthInfo:smtp.haskimail.ru "U:ЛОГИН" "P:ПАРОЛЬ" "M:PLAIN LOGIN" Вместо ЛОГИН и ПАРОЛЬ подставьте SMTP-реквизиты канала. Затем закройте файл от посторонних и соберите из него таблицу, которую читает Sendmail: chmod 600 /etc/mail/authinfo makemap hash /etc/mail/authinfo < /etc/mail/authinfo Настройка смарт-хоста Добавьте в файл /etc/mail/sendmail.mc перед строками MAILER(...): define(`SMART_HOST', `[smtp.haskimail.ru]')dnl define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl define(`confAUTH_MECHANISMS', `PLAIN LOGIN')dnl FEATURE(`authinfo', `hash -o /etc/mail/authinfo.db')dnl Если строка SMART_HOST в файле уже есть, замените её. Соберите конфигурацию: cd /etc/mail && m4 sendmail.mc > sendmail.cf Проверка Перезапустите Sendmail: systemctl restart sendmail На старых системах без systemd: service sendmail restart. Отправьте тестовое письмо на свой адрес: echo "Тестовое письмо" | mail -s "Проверка Sendmail" ваш@адрес.ru Письмо должно появиться в логе активности канала в личном кабинете Haskimail. Если его там нет, ищите ошибку в журнале почты: /var/log/maillog в CentOS и RHEL или /var/log/mail.log в Debian и Ubuntu. Если провайдер блокирует порт 587, укажите 2525 в строках RELAY_MAILER_ARGS и ESMTP_MAILER_ARGS. Подробнее о портах — в статье «Что делать, если порт 25 заблокирован (AWS и другие облака)» и в документации по SMTP. Настройка для Postfix — в статье «Как настроить Postfix для отправки через Haskimail».

Что делать, если порт 25 заблокирован (AWS и другие облака)

Многие облачные провайдеры, в том числе Amazon Web Services, блокируют исходящие соединения на порт 25, чтобы бороться со спамом. Из-за этого приложение на таком сервере не может подключиться к Haskimail по SMTP. Проще всего подключиться через другой порт. Сервер smtp.haskimail.ru принимает письма на портах: Порт Шифрование 587 STARTTLS 2525 TLS 465 SSL 25 TLS Порты 587 и 2525 обычно не блокируются. Поменяйте порт в настройках SMTP вашего приложения или почтового сервера — больше ничего менять не нужно. Как разрешить порты в AWS EC2 Если в группе безопасности вашего экземпляра EC2 ограничен исходящий трафик, разрешите нужные порты: 1. Войдите в AWS Management Console и откройте EC2. 2. В левой панели выберите Security Groups. 3. Создайте группу безопасности, например Open Additional SMTP Ports. 4. Добавьте исходящие правила (Outbound rules) типа Custom TCP для портов 587, 2525 и при необходимости 465. 5. Для дополнительной безопасности можно разрешить подключение только к сети Haskimail: укажите в правилах диапазон 185.47.165.0/24. 6. Вернитесь к списку экземпляров, выберите свой и нажмите Actions → Networking → Change Security Groups. Добавьте созданную группу. 7. Поменяйте порт SMTP в настройках приложения или почтового сервера (sendmail, Postfix) на 587 или 2525. Как снять ограничение порта 25 в AWS Если нужен именно порт 25, попросите AWS снять ограничение через форму Request to Remove Email Sending Limitations. Для этого войдите под root-аккаунтом и опишите, как вы используете почту. Когда заявку одобрят, AWS пришлёт уведомление на почту. Другие хостинги Российские облачные провайдеры тоже часто закрывают порт 25 по умолчанию. Проверьте документацию своего провайдера или используйте порт 587 или 2525.

Проблемы с подключением

Иногда приложение не может подключиться к Haskimail, хотя сам сервис работает. Чаще всего причина — изменения в настройках сети, которые сделали в вашей инфраструктуре или у хостинг-провайдера. Что проверить в первую очередь: - Разрешены ли на вашем сервере исходящие подключения к Haskimail. Если вы ограничиваете исходящий трафик, разрешите диапазон 185.47.165.0/24. - Открыты ли нужные порты: 443 для API и 587, 465, 25 или 2525 для SMTP. Ниже — команды для диагностики. Если проблему не удалось решить, напишите в поддержку, приложите полный вывод этих команд и укажите публичный IP-адрес вашего сервера. Так мы быстрее найдём причину в логах. Проблемы с подключением к API Сначала проверьте, что работает DNS: nslookup api.haskimail.ru Команда должна вернуть IP-адрес нашего API. Если ответа нет, проверьте, разрешаются ли другие домены, например example.com или ya.ru. Если не разрешается ни один, проблема в настройках DNS вашего сервера. Затем проверьте, что соединение с API устанавливается: curl -v https://api.haskimail.ru Если в выводе есть ошибка проверки сертификата, скорее всего, на сервере устарели корневые сертификаты. Обновите пакет ca-certificates средствами вашей операционной системы и повторите проверку. Не отключайте проверку сертификатов в рабочем приложении: так ваш API-ключ может попасть к посторонним. Если вас беспокоят задержки, измерьте время запроса: time curl -v https://api.haskimail.ru Если все проверки прошли успешно, ищите причину в коде приложения. Проблемы с подключением по SMTP Убедитесь, что для сервера включена отправка по SMTP. На новых серверах она включена по умолчанию. Если её отключали, включите в настройках сервера. Проверьте DNS: nslookup smtp.haskimail.ru Затем проверьте, что порт доступен. Некоторые хостинг-провайдеры блокируют почтовые порты или перенаправляют трафик на свои SMTP-серверы. Для проверки порта 587 или 25 подключитесь через telnet и отправьте команды EHLO и QUIT: telnet smtp.haskimail.ru 587 EHLO localhost QUIT Если соединение установлено, сервер ответит строкой, которая начинается с 220, а на команду EHLO вернёт список возможностей со строками 250, в том числе 250-STARTTLS. Порт 465 работает сразу по SSL, поэтому telnet для него не подойдёт. Используйте openssl: openssl s_client -connect smtp.haskimail.ru:465 -quiet Если порт доступен, отправьте тестовое письмо утилитой swaks. Вместо ЛОГИН подставьте логин из SMTP-реквизитов канала — пароль swaks спросит сам и не сохранит его в истории команд: swaks --server smtp.haskimail.ru --port 587 --tls \ --auth-user ЛОГИН \ --from sender@example.com --to you@example.com Если тестовое письмо дошло, ищите причину в настройках SMTP-клиента вашего приложения. Если порт заблокирован, прочитайте статью «Что делать, если порт 25 заблокирован».