Отправка отдельных писем через Haskimail так же проста, как отправка HTTP POST-запроса к нашему эндпоинту /email c JSON-сообщением в теле запроса.
curl "https://api.haskimail.ru/email" \
-X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Haskimail-Server-Token: server token" \
-d '{
"From": "sender@example.com",
"To": "receiver@example.com",
"Subject": "Haskimail test",
"TextBody": "Привет дорогой пользователь Хаски",
"HtmlBody": "<html><body><strong>Привет</strong> дорогой пользователь Хаски.</body></html>",
"MessageStream": "2081"
}'
Для аутентификации в сервисе необходимо использовать заголовок X-Haskimail-Server-Token. У каждого сервера Haskimail есть свой собственный API-токен, что позволяет изолировать доступ и данные для каждого приложения, подключающегося к Haskimail.
Название заголовка и его значение нечувствительны к регистру. Если вы выполните запрос с неправильными или отсутствующими заголовками, вы получите ответ HTTP 401 (Ошибка авторизации).
Для целей тестирования Haskimail позволяет отправлять тестовые письма, которые фактически не будут доставлены получателю. Этот метод обычно используется для проверки корректности ваших данных. Вы можете сделать это, передав HASKIMAIL_API_TEST в качестве API-токена сервера.
X-Haskimail-Server-Token: server token
JSON-сообщения передаются в теле HTTP POST-запроса. Поля From и To могут принимать имя в формате Иван Иванов <email@example.com>. Вы можете указать HtmlBody для сообщений в формате HTML, TextBody для простого текста или включить оба для создания многокомпонентного сообщения. Многокомпонентный формат отправляет HTML с текстовой версией для клиентов, которые не поддерживают HTML. Передача заголовков необязательна.
From: "From": "Иван Петров <sender@example.com>". Так же можно указать имена в полях To, Cc и Bcc.To, Cc и Bcc можно передать несколько адресов через запятую. Всего получателей (To, Cc и Bcc) — не больше 50. Каждый получатель получает отдельное письмо со своим MessageID.Tag. Это позволяет получать подробную статистику по всем письмам с тегами. Для каждого сообщения можно использовать только один тег. Максимальный размер тега — 1000 символов.Metadata."To" : "\"Иван Иванов, маркетолог.\" <receiver@example.com>""Headers": [{"Name":"Message-ID", "Value": "<my-id-123@example.com>"}]MessageStream — это ID канала из списка каналов. Если канал не указан, письмо уходит через транзакционный канал сервера по умолчанию.{
"From": "sender@example.com",
"To": "receiver@example.com",
"Cc": "copied@example.com",
"Bcc": "blank-copied@example.com",
"Subject": "Тест",
"Tag": "Приглашение",
"HtmlBody": "<b>Привет</b>",
"TextBody": "Привет",
"ReplyTo": "reply@example.com",
"Metadata": {
"Color":"blue",
"Client-Id":"12345"
},
"Headers": [
{
"Name": "CUSTOM-HEADER",
"Value": "value"
}
],
"TrackOpens": true,
"TrackLinks": true,
"MessageStream": "2081"
}
Существует два способа активировать отслеживание открытий для ваших писем:
{
...
"TrackOpens" : true
}
Вы можете включить отслеживание ссылок, чтобы получать информацию о ссылках, по которым переходят получатели ваших писем. Отслеживание ссылок можно включить для каждого отдельного письма или для всего сервера.
{
...
"TrackLinks" : true
}
Вложения указываются в массиве Attachments в JSON-сообщении. Каждое вложение представлено отдельным объектом внутри этого массива.
Поле Name содержит имя файла, которое будет отображаться получателю сообщения. Во избежание распространения вирусов и шпионских программ мы запрещаем определенные типы файлов:
Поле ContentType указывает MIME-тип контента, который почтовые клиенты используют для интерпретации вложения.
Поле Content хранит двоичные данные файла, которые должны быть переданы в виде строки, закодированной в формате base64. Большинство языков программирования и библиотек имеют встроенные функции для кодирования в base64, например, Java, .NET, PHP, Ruby
Ограничения:
TextBody и HtmlBody могут иметь размер до 5 МБ каждый.{
...
"Attachments": [
{
"Name": "readme.txt",
"Content": "dGVzdCBjb250ZW50",
"ContentType": "text/plain"
},
{
"Name": "report.pdf",
"Content": "dGVzdCBjb250ZW50",
"ContentType": "application/octet-stream"
}
]
}
Haskimail также позволяет отправлять изображения, встраиваемые в HTML-сообщения. Изображения должны быть закодированы в формате base64, а поле ContentID должно соответствовать CID изображения.
Haskimail автоматически встроит изображения в HTML-код, если CID-теги совпадают. ПРИМЕЧАНИЕ: Если вы ссылаетесь на вложенное изображение несколько раз в вашем сообщении, достаточно вложить изображение только один раз. Haskimail будет использовать изображение столько раз, сколько на него ссылаются в вашем HTML-коде. Это сэкономит трафик и позволит эффективнее использовать ограничение на размер вложений.
{
...
"Attachments": [
{
"Name": "bacon.jpg",
"Content": "/9j/4AAQSkZJRgABAgEAAAAAAAD/4",
"ContentType": "image/jpeg",
"ContentID": "cid:part1.01030607.06070005@gmail.com"
}
]
}
<img src="cid:part1.01030607.06070005@gmail.com">
В случае успеха вы получите JSON-сообщение, подобное приведенному в примере.
Поле MessageID можно использовать для ведения журнала в вашей системе. Его можно использовать для сопоставления отправленного письма с возвратом из вебхука или API возвратов. Если получателей несколько, их ID перечислены через запятую.
Полный список ошибок API.
{
"ErrorCode": 0,
"Message": "OK",
"MessageID": "6f1c0b2d9e8a4f7b3c5d2e1a0b9c8d7e",
"SubmittedAt": "2026-10-07 14:30:12",
"To": "receiver@example.com"
}
Вложения невозможно получить через пользовательский интерфейс, API или вебхуки Haskimail, так как Haskimail не хранит вложения.