# Автоответы и заголовки Auto-Submitted и X-Auto-Response-Suppress
## Основные сведения

Когда два почтовых робота отвечают друг другу, возникает петля, которую называют «битвой роботов». Например, Swarmica отправляет сотруднику уведомление о новом комментарии, почтовый сервер сотрудника отвечает автоответом «Нет на месте», автоответ попадает в email-канал и становится комментарием, а комментарий порождает новое уведомление. Без защиты такая переписка не заканчивается и засоряет заявки и почтовые ящики.

Чтобы этого не происходило, отправитель помечает автоматические письма служебными заголовками: «письмо отправил робот, отвечать на него автоматически не нужно». Начиная с [версии 6.2.0 Swarmica](https://support.swarmica.com/article/ru/2194-obnovlenie-v62x.html) по умолчанию добавляет такие заголовки в свои уведомления. Как посмотреть и изменить заголовки уведомления, рассказано в статье [Почтовые заголовки в уведомлениях Swarmica](https://support.swarmica.com/article/ru/2198-pochtovye-zagolovki-v-uvedomleniyakh-swarmica.html).

## Какие бывают автоматические письма

| Тип                                           | Пример                                                                     | Стандарт                                                                                               |
| --------------------------------------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| Автоматически сформированное письмо           | уведомление о новой заявке, отчёт, напоминание                             | [RFC 3834](https://www.rfc-editor.org/rfc/rfc3834)                                                     |
| Автоответ                                     | «Нет на месте», «Ваше письмо получено», ответ по правилу почтового клиента | [RFC 3834](https://www.rfc-editor.org/rfc/rfc3834)                                                     |
| Отчёт о доставке или недоставке (DSN, bounce) | «Письмо не доставлено: адрес не существует»                                | [RFC 3461](https://www.rfc-editor.org/rfc/rfc3461), [RFC 3464](https://www.rfc-editor.org/rfc/rfc3464) |
| Уведомление о прочтении (MDN)                 | «Ваше письмо прочитано»                                                    | [RFC 8098](https://www.rfc-editor.org/rfc/rfc8098)                                                     |

Отчёты о недоставке почтовые серверы отправляют с пустым адресом отправителя в конверте (`MAIL FROM:<>`, [RFC 5321](https://www.rfc-editor.org/rfc/rfc5321#section-4.5.5), раздел 4.5.5), поэтому у таких писем заголовок `Return-Path: <>`. Ответить на пустой адрес нельзя, и петля обрывается. RFC 3834 рекомендует отправлять так же и автоответы.

## Заголовок Auto-Submitted

`Auto-Submitted` описан в [RFC 3834](https://www.rfc-editor.org/rfc/rfc3834#section-5), раздел 5. Это стандартный заголовок, его понимает большинство почтовых серверов и систем поддержки.

| Значение         | Смысл                                                                                                          |
| ---------------- | -------------------------------------------------------------------------------------------------------------- |
| `no`             | письмо написал человек. То же самое, что отсутствие заголовка                                                  |
| `auto-generated` | письмо сформировано автоматически, но не в ответ на другое письмо: уведомления, отчёты, рассылки по расписанию |
| `auto-replied`   | автоматический ответ на конкретное входящее письмо: автоответ «Нет на месте», сообщение «Заявка не создана»    |
| `auto-notified`  | уведомление фильтра Sieve о пришедшем письме ([RFC 5436](https://www.rfc-editor.org/rfc/rfc5436))              |

Главное правило RFC 3834: на письмо, у которого `Auto-Submitted` имеет любое значение, кроме `no`, автоматически не отвечают. Автоответчик «Нет на месте» такое письмо пропустит, а система поддержки, которая соблюдает стандарт, не создаст из него заявку.

## Заголовок X-Auto-Response-Suppress

`X-Auto-Response-Suppress` — заголовок Microsoft, в RFC его нет. Его учитывают Microsoft Exchange и Outlook, описание — в спецификации [\[MS-OXCMAIL\]](https://learn.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-oxcmail/) (свойство `PidTagAutoResponseSuppress`).

В отличие от `Auto-Submitted`, этот заголовок не говорит, кто написал письмо. Он просит получателя не присылать определённые виды автоматических ответов. Значения перечисляются через запятую:

| Значение    | Что подавляет                                                        |
| ----------- | -------------------------------------------------------------------- |
| `DR`        | отчёты об успешной доставке (delivery receipt)                       |
| `NDR`       | отчёты о недоставке (non-delivery report)                            |
| `RN`        | уведомления о прочтении (read notification)                          |
| `NRN`       | уведомления об удалении письма без прочтения (non-read notification) |
| `OOF`       | автоответ «Нет на месте» (out of office)                             |
| `AutoReply` | прочие автоответы, например ответ по правилу Outlook                 |
| `All`       | всё перечисленное                                                    |

Разные почтовые системы смотрят на разные заголовки, поэтому Swarmica ставит оба: `Auto-Submitted` для серверов, которые следуют RFC 3834, и `X-Auto-Response-Suppress` для Exchange и Outlook.

## Заголовки в уведомлениях Swarmica по умолчанию

| Уведомления                                                                       | Auto-Submitted   | X-Auto-Response-Suppress      |
| --------------------------------------------------------------------------------- | ---------------- | ----------------------------- |
| Ответы в заявке, запрос оценки CSAT, письма об учётной записи, изменения в статье | —                | —                             |
| Моя заявка создана                                                                | `auto-generated` | —                             |
| Копии собственных сообщений, упоминания, любая новая заявка                       | `auto-generated` | `OOF, AutoReply, DR, RN, NRN` |
| Заявка не создана                                                                 | `auto-replied`   | `All`                         |
| Все остальные уведомления                                                         | `auto-generated` | `All`                         |

::::cut{title="Полный список уведомлений"}
### Без служебных заголовков

Эти письма уходят как обычная почта. В основном это письма с текстом, который написал человек, или письма, которые ждут от получателя действия: ответа, перехода по ссылке, ввода кода.

*   `ticket_comment_public_external` — Любой ответ добавлен в мою заявку
*   `ticket_comment_public_internal` — Публичный ответ добавлен
*   `ticket_requester_csat` — Запрос оценки CSAT
*   `user_account_invited` — Пользователь приглашен
*   `user_account_created` — Учетная запись создана
*   `user_registration` — Запрошена регистрация
*   `user_password_change` — Запрошен сброс пароля
*   `user_identity_email_verification` — Код подтверждения доступа к почте
*   `user_identity_bot_verification` — Код подтверждения доступа к почте при регистрации через мессенджер
*   `user_2fa_email_verification` — Код подтверждения для 2FA
*   `user_2fa_disable_verification` — Код для отключения 2FA
*   `user_article_changed` — Изменения в статье

### Auto-Submitted: auto-generated

*   `ticket_created_external` — Моя заявка создана

Письмо о регистрации обращения уходит клиенту автоматически, поэтому помечено `auto-generated`, и автоответчик клиента не должен на него отвечать. Подавление автоответов для Exchange в этом письме не включено.

### Auto-Submitted: auto-generated и X-Auto-Response-Suppress: OOF, AutoReply, DR, RN, NRN

*   `ticket_created_internal_all` — Любая новая заявка создана
*   `ticket_comment_public_internal_own` — Добавлен мой публичный комментарий
*   `ticket_comment_public_external_own` — Мой ответ добавлен
*   `ticket_chatmessage_public_my` — Мое сообщение в чате
*   `ticket_user_mention` — Меня упомянули в заявке
*   `ticket_group_mention` — Мою группу упомянули в заявке

Подавляются автоответы, отчёты о доставке и уведомления о прочтении. Отчёты о недоставке (`NDR`) не подавляются: если письмо не дошло, отправитель об этом узнает.

### Auto-Submitted: auto-replied и X-Auto-Response-Suppress: All

*   `ticket_email_error` — Заявка не создана

Это ответ на конкретное входящее письмо, которое Swarmica не смогла принять, поэтому значение `auto-replied`, а не `auto-generated`.

### Auto-Submitted: auto-generated и X-Auto-Response-Suppress: All

Все остальные уведомления: о назначении заявок, внутренних комментариях, смене статусов, KCS и оценках качества, CSAT для сотрудников, выгрузках и массовых действиях.

:::cut{title="Список уведомлений"}
*   `employee_agent_ticket_assigned`, `ticket_created_internal`, `ticket_comment_internal`, `ticket_comment_internal_own`
*   `ticket_issue_status_changed`, `employee_agent_ticket_reopened`, `employee_agent_ticket_resolved`
*   `ticket_chatmessage_public_others`, `ticket_chatmessage_public_transcript`
*   `employee_agent_csat`, `employee_manager_csat`
*   `employee_evaluator_assigned`, `employee_evaluator_unassigned`, `employee_agent_unapproved_articles`, `employee_agent_approved_articles`
*   `employee_agent_aqi`, `employee_agent_aqi_evaluator_comment`, `employee_evaluator_aqi_agent_comment`, `employee_agent_open_aqi`
*   `employee_agent_lai`, `employee_agent_lai_evaluator_comment`, `employee_evaluator_lai_agent_comment`, `employee_agent_open_lai`
*   `employee_agent_qa`, `employee_agent_qa_evaluator_comment`, `employee_evaluator_qa_agent_comment`, `employee_agent_open_qa`
*   `employee_agent_achievement`, `employee_agent_article_flagged`, `employee_agent_article_unflagged`
*   `employee_agent_links_required`, `employee_manager_links_required`, `admin_treenode_completed`
*   `filter_export_completed`, `report_export_completed`, `ticket_export_completed`, `metric_aggregate_completed`
*   `ticket_bulk_update`, `article_bulk_update`, `ticket_bulk_merge`
:::
::::

## Как Swarmica обрабатывает входящие автоматические письма

Защита работает и в обратную сторону. В настройках email-канала есть два переключателя, оба включены по умолчанию:

*   **Игнорировать автоответы**. Письма, у которых `Auto-Submitted` имеет любое значение, кроме `no`, и письма с `X-Spam-Flag: YES` не создают заявок и комментариев. `X-Auto-Response-Suppress` во входящих письмах не учитывается: это просьба к получателю, а не признак автоответа, и она встречается в обычных письмах.
*   **Игнорировать возвраты писем**. Отчёты о недоставке отбрасываются. Отчётом Swarmica считает письмо типа `multipart/report` с `report-type=delivery-status` ([RFC 3464](https://www.rfc-editor.org/rfc/rfc3464), [RFC 6522](https://www.rfc-editor.org/rfc/rfc6522)) или письмо с пустым `Return-Path` либо от `MAILER-DAEMON`.

Если выключить **Игнорировать возвраты писем**, отчёт о недоставке уведомления о создании заявки или о комментарии добавится в эту заявку внутренним комментарием, а заявку в статусе «Ожидает ответа клиента», «Ожидание» или «Решение предоставлено» переоткроет. Swarmica находит заявку по номеру, который записан в `Message-ID` вернувшегося письма. Номер заявки есть в `Message-ID` только у уведомлений `ticket_created_*` и `ticket_comment_*`, поэтому отчёты о недоставке остальных уведомлений, например CSAT-уведомлений менеджерам, в заявки не попадают.

Кроме того, Swarmica не принимает письма, отправленные с адресов её собственных email-каналов.

## Интеграция с другой системой по почте

Если другая система поддержки или другой экземпляр Swarmica должны создавать заявки из уведомлений вашей Swarmica, учтите: система, которая соблюдает RFC 3834, отбросит письмо с `Auto-Submitted: auto-generated`. Swarmica с включённым переключателем **Игнорировать автоответы** поступит так же.

Варианты:

*   убрать `Auto-Submitted` из заголовков нужного уведомления на отправляющей стороне;
*   выключить **Игнорировать автоответы** в email-канале принимающей стороны.

Оба варианта ослабляют защиту от петли между двумя системами, поэтому меняйте настройку только у тех уведомлений и каналов, которые участвуют в интеграции. Чтобы отличать письма партнёра от остальной почты, добавьте в уведомление собственный заголовок, например `X-Partner: acme`, и настройте по нему правила почтового сервера.

## Ссылки

*   [RFC 3834](https://www.rfc-editor.org/rfc/rfc3834) — Recommendations for Automatic Responses to Electronic Mail: заголовок `Auto-Submitted` и правила для автоответчиков
*   [RFC 5436](https://www.rfc-editor.org/rfc/rfc5436) — Sieve Notification Mechanism: mailto: значение `auto-notified`
*   [RFC 5321](https://www.rfc-editor.org/rfc/rfc5321) — Simple Mail Transfer Protocol: пустой адрес отправителя, раздел 4.5.5
*   [RFC 3461](https://www.rfc-editor.org/rfc/rfc3461) — SMTP Service Extension for Delivery Status Notifications
*   [RFC 3464](https://www.rfc-editor.org/rfc/rfc3464) — An Extensible Message Format for Delivery Status Notifications
*   [RFC 6522](https://www.rfc-editor.org/rfc/rfc6522) — The Multipart/Report Media Type for the Reporting of Mail System Administrative Messages
*   [RFC 8098](https://www.rfc-editor.org/rfc/rfc8098) — Message Disposition Notification: уведомления о прочтении
*   [\[MS-OXCMAIL\]](https://learn.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-oxcmail/) — спецификация Microsoft, где описан `X-Auto-Response-Suppress`