## Что такое входящий канал

Входящий канал принимает письма, разбирает их и отправляет на ваш сервер в виде JSON: отправитель, получатели, тема, текст и HTML, заголовки и вложения в base64. У каждого SMTP-сервера есть один входящий канал по умолчанию, его нельзя архивировать.

Откройте **SMTP-серверы → ваш сервер → Входящий по умолчанию**. У канала четыре вкладки:

| Вкладка                 | Для чего                                               |
| ----------------------- | ------------------------------------------------------ |
| Активность              | Список полученных писем и их статусы                   |
| Правила блокировки      | Адреса и домены, письма от которых не уходят на вебхук |
| Инструкции по настройке | Пошаговый чек-лист и пример обработчика                |
| Настройки               | Адрес, вебхук, свой домен, название канала             |

На вкладке **Инструкции по настройке** три шага отмечены статусом «Не сделано», пока вы их не выполните. Ниже они разобраны по порядку.

## Входящий адрес и MailboxHash

Все письма на входящий адрес приходят в канал. Адрес показан в **Настройках** (блок «Входящий адрес»), на вкладке **Активность** и во втором шаге инструкции.

![Вкладка «Активность» входящего канала: входящий адрес и список писем](https://chat.dashamail.ru/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBbWhzIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--234ea0fc89b934d4c82e33ca399781baf27107a1/haskimail-inbound-activity.png)

На него можно пересылать почту со своего ящика или указывать его в Reply-To.

К адресу можно добавить `+что-угодно` перед `@`. Значение после плюса (`order-123`) придёт в поле `MailboxHash`. Так удобно связывать ответ с заказом, тикетом или пользователем: подставьте ID в Reply-To исходящего письма, и ответ клиента сам укажет, к чему он относится.

![Настройки входящего канала: входящий адрес и подсказка про MailboxHash](https://chat.dashamail.ru/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBbWxzIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--0935879feb000de70d548fd0c8bb0dc227fbd8d3/haskimail-inbound-address-mailboxhash.png)

## Шаг 1. Укажите вебхук

Вебхук — это URL вашего приложения, на который Haskimail отправит POST-запрос с JSON каждого входящего письма.

1. Создайте в приложении обработчик POST-запросов, который принимает JSON и отвечает кодом 200 (пример — в разделе «Пример обработчика» ниже).

2. Откройте вкладку **Настройки** → блок **Вебхук** (или нажмите **Открыть настройки** в инструкции).

3. Введите адрес в поле **URL вебхука**, например `https://example.ru/haski/inbound`.

4. Выберите режим **Спам-фильтра** (по умолчанию «Выключен»).

5. При необходимости отметьте **Исходник письма** — тогда полный исходник будет приходить в поле `RawEmail`.

6. Нажмите **Сохранить изменения**, затем **Проверить вебхук**. Вы получите уведомление о  его работе.

   ![Блок «Вебхук» в настройках входящего канала: URL, спам-фильтр, исходник письма, кнопки «Сохранить изменения» и «Проверить вебхук»](https://chat.dashamail.ru/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBbXBzIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--7fe09ecff5e1e7fcc7d6056d6a8d0180b2369877/haskimail-inbound-webhook.png)

**Как обрабатывается ответ сервера:**

| Ответ вашего сервера | Что происходит                                     |
| -------------------- | -------------------------------------------------- |
| 200                  | Письмо считается обработанным                      |
| 403                  | Повторы прекращаются                               |
| Любой другой         | Haskimail повторит отправку 10 раз в течение ~10 часов |

**Спам-фильтр.** Если он включён, письма с оценкой спама не ниже порога получают статус «Заблокировано» и на вебхук не уходят. Такие письма можно пропустить вручную на вкладке **Активность**.

## Шаг 2. Отправьте тестовое письмо

1. Скопируйте входящий адрес сервера из второго шага инструкции.

2. Напишите на него из любого почтового ящика.

3. Через несколько секунд письмо появится на вкладке **Активность**. Если его нет, нажмите **Обновить**.

На вкладке **Активность** видна таблица писем: статус, отправитель, тема, MailboxHash и время получения. Над таблицей есть поиск по отправителю, получателю, теме и MailboxHash, а также фильтр **Все статусы**.

| Статус                    | Что значит                                                               |
| ------------------------- | ------------------------------------------------------------------------ |
| Обработано                | Письмо доставлено на вебхук, сервер ответил 200                          |
| Обработано, «мимо правил» | Письмо пропущено вручную, несмотря на правило блокировки или спам-фильтр |
| Заблокировано             | Письмо отсеяно правилом блокировки или спам-фильтром и не ушло на вебхук |

## Шаг 3. Подключите свой домен (необязательно)

Свой домен позволяет принимать письма на любой адрес вида `support@inbound.example.ru`. Лучше использовать отдельный поддомен: MX-запись перенаправит в Haskimail всю почту этого домена.

![Блок «Входящий домен»: поле домена и MX-запись для DNS](https://chat.dashamail.ru/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBbXRzIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--17d0e24fed601136f3181d1447b3d75f0f2730ee/haskimail-inbound-domain.png)

1. Откройте **Настройки** → блок **Входящий домен**.

2. Введите домен в поле **Домен**, например `inbound.example.ru`.

3. До сохранения добавьте в DNS домена запись из блока **MX-запись**:

| Поле      | Значение                                                       |
| --------- | -------------------------------------------------------------- |
| Тип       | MX                                                             |
| Значение  | `inbound.haskimail.ru` (точное значение — в настройках канала) |
| Приоритет | 10                                                             |

4. Нажмите **Сохранить домен**. Haskimail проверит MX-запись. Обновление DNS может занять до нескольких часов.

## Пример обработчика и формат JSON

JSON приходит в теле запроса с заголовком `Content-Type: application/json`. Минимальный обработчик на PHP:

```
<?php
$email = json_decode(file_get_contents('php://input'), true);

$from    = $email['From'];             // адрес отправителя
$subject = $email['Subject'];
$reply   = $email['StrippedTextReply']; // текст ответа без цитаты
$ticket  = $email['MailboxHash'];       // то, что после «+» в адресе

foreach ($email['Attachments'] ?? [] as $file) {
    file_put_contents('/tmp/' . basename($file['Name']), base64_decode($file['Content']));
}

http_response_code(200); // иначе Haskimail повторит отправку
```

Проверить обработчик можно запросом с примером JSON (полный пример — на вкладке **Инструкции по настройке**):

```
curl https://example.ru/haski/inbound \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "From": "support@haskimail.ru",
    "FromName": "Haskimail",
    "Subject": "Тестовое входящее письмо",
    "MailboxHash": "SampleHash",
    "TextBody": "Это тестовое входящее письмо от Haskimail.",
    "StrippedTextReply": "Это тестовое входящее письмо от Haskimail.",
    "Attachments": []
  }'
```

**Основные поля JSON**

| Поле                             | Что содержит                                                                  |
| -------------------------------- | ----------------------------------------------------------------------------- |
| `From`, `FromName`, `FromFull`   | Адрес и имя отправителя; `FromFull` — объект с `Email`, `Name`, `MailboxHash` |
| `To`, `ToFull`                   | Получатели строкой и массивом объектов                                        |
| `Cc`, `CcFull`, `Bcc`, `BccFull` | Копии и скрытые копии                                                         |
| `OriginalRecipient`              | Адрес, на который пришло письмо                                               |
| `Subject`                        | Тема                                                                          |
| `MessageID`                      | Идентификатор письма                                                          |
| `ReplyTo`                        | Адрес для ответа                                                              |
| `MailboxHash`                    | Значение после «+» в адресе получателя                                        |
| `Date`                           | Дата отправки, например `Fri, 30 Oct 2026 05:40:22 +0300`                     |
| `TextBody`, `HtmlBody`           | Текст и HTML письма целиком, с цитатой                                        |
| `StrippedTextReply`              | Только новый текст ответа, без цитаты                                         |
| `Tag`                            | Тег                                                                           |
| `Headers`                        | Массив заголовков `{Name, Value}`, например `X-Spam-Score`                    |
| `Attachments`                    | Вложения; содержимое в base64                                                 |
| `RawEmail`                       | Исходник письма, если включена галочка «Исходник письма»                      |
| `MessageStream`                  | ID канала                                                                     |

## Правила блокировки

Письма от заблокированных отправителей получают статус «Заблокировано» и не уходят на вебхук. Пока правил нет, на вебхук отправляются все входящие письма, кроме отсеянных спам-фильтром.

![Вкладка «Правила блокировки» входящего канала: поле «email или домен» и кнопка «Заблокировать»](https://chat.dashamail.ru/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBbXhzIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--d180cf838b72721537877c69ef0716c3498bf34b/haskimail-inbound-rules.png)

1. Откройте вкладку **Правила блокировки**.

2. Введите в поле **email или домен** конкретный адрес (`spam@example.com`) или весь домен (`example.com`).

3. Нажмите **Заблокировать**.

Если заблокированное письмо всё же нужно обработать, его можно пропустить вручную на вкладке **Активность** — в списке оно будет отмечено «мимо правил».

![Заблокированное входящее письмо: причина блокировки и кнопка «Пропустить мимо правил»](https://chat.dashamail.ru/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBbmRzIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--16569f7ce31d14dac9ba2378391d141c1ffea46d/haskimail-inbound-blocked-bypass.png)

![Пропуск заблокированного входящего письма на вкладке «Активность»](https://chat.dashamail.ru/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBbTlwIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--5d4f10f1d329fe3fb1109d90107c778c76343472/image.png)