← Каналы поддержки

Email как канал приёма заявок в helpdesk: типичные грабли и как их обойти

Email кажется простым каналом: открыли почтовый ящик support@, и пускай сыплется. На практике у каждого helpdesk-внедрения именно через email-канал собираются грабли, которые ломают процесс месяцами. Bounce-письма создают тикеты от «Mail Delivery System», autoreply из отпуска порождает бесконечные циклы, ответы пользователей теряются из-за неправильного парсинга threading, вложения отваливаются по кодировке. Разбираем каждую проблему с примерами из production и решения, которые работают в реальности.

10 мин чтения Команда TIQQET
EmailКаналы поддержкиIMAPSMTP
Email как канал приёма заявок в helpdesk: типичные грабли и как их обойти

Bounce и auto-reply — создают тикеты-мусор

Самая частая проблема свежеподключённого email-канала: на второй день в helpdesk появляются тикеты с темой «Mail Delivery Failed» и от отправителя «Mail Delivery System». Это bounce — уведомление почтового сервера о том, что какое-то ваше письмо не доставилось. Парсер видит «новое письмо в support@» — заводит тикет.

Хуже того: пользователь ушёл в отпуск и поставил автоответ. Вы отправляете ему «ваша заявка принята №12345». Его автоответчик отвечает «я в отпуске». Парсер видит новое письмо — заводит ВТОРОЙ тикет. Вы отвечаете на него «принято». Цикл. За ночь в helpdesk сотни одинаковых тикетов.

Как фильтровать (универсально):

Любое совпадение → пропустить, не создавать тикет, пометить как прочитанное в IMAP. В TIQQET этот фильтр включён по умолчанию и закрывает 99% случаев.

Threading — потерянные ответы

Пользователь создал тикет #1234, через 2 часа отвечает на письмо «ваша заявка зарегистрирована». Helpdesk должен понять, что это ответ к тикету 1234, и подцепить как комментарий. Если не понял — заведёт НОВЫЙ тикет 1235, и оператор видит два тикета на одну проблему, не связанные между собой.

Стандартный механизм — заголовки In-Reply-To и References. При исходящем письме helpdesk генерирует уникальный Message-ID для тикета 1234. Когда пользователь отвечает — его почтовый клиент копирует Message-ID в In-Reply-To. Helpdesk при приёме парсит этот заголовок и находит тикет.

Когда threading ломается:

Запасной механизм: номер тикета в теме письма. Helpdesk пишет [ServiceDesk] Заявка #1234: текст темы. Если In-Reply-To не сработал, парсер ищет в Subject регулярку #(\d+) и привязывает к тикету. В TIQQET это второй уровень threading: сначала Message-ID, потом #N в теме, потом — новый тикет.

Кодировки и проблемы с кириллицей

Тема письма закодирована по RFC 2047: Subject: =?UTF-8?B?0J/RgNC40LLQtdGCINC80LjRgA==?=. Если парсер не декодирует — в helpdesk видна каша из вопросительных знаков.

Имена вложений — отдельная история. Старые версии Outlook (до 2016) кодируют имя файла по RFC 2047 нестандартно. iOS Mail вообще шлёт без кодировки, в latin1, и пишет «Отчёт.docx» как «Î¢Ï‡ç‘Ñ‚.docx». Когда такое имя сохраняется на диск — файл вообще нечитаем.

Решение, которое работает в большинстве случаев:

  1. При декодировании subject — пробуйте сначала UTF-8, потом windows-1251, потом koi8-r
  2. Имя файла декодируйте через библиотеку (в Node — mailparser делает это автоматически правильно). Если получили «battlecharacters» — попробуйте latin1→utf8 reinterpret
  3. Если декодирование не удалось — сохраняйте файл с сгенерированным именем (UUID + расширение) и в карточке вложения показывайте оригинальное имя из заголовка

Вложения — что фильтровать

Email — основной вектор фишинга. Если бесконтрольно принимать все вложения — это вопрос времени, когда кто-то пришлёт macro-enabled Excel или подменённый PDF с эксплоитом.

Базовая защита:

Что часто забывают: имена файлов с traversal-патернами. Файл с именем ../../etc/passwd при сохранении на диск может выйти за пределы каталога attachments. Защита: regex [^a-zA-Z0-9._-] заменять на _, плюс отдельно проверять, что итоговый путь начинается с allowed-каталога.

Спам в support@

Любой публичный support-адрес через 2-3 месяца попадает в базы рассыльщиков. Объём спама может достигать 200-500 писем в день, что засоряет очередь оператора и снижает доверие к системе.

Многоуровневая защита:

  1. SPF + DKIM + DMARC на стороне почтового провайдера — 80% спама отсеивается до парсера
  2. Blacklist отправителей в helpdesk — если домен/email прислал 5 раз подряд явный спам, добавить в чёрный список одним кликом
  3. Whitelist для известных доменов — корпоративные адреса своих клиентов автоматически проходят без триажа
  4. Регистрационные ворота — для «новых» отправителей создавать не тикет, а заявку на регистрацию (одобряет оператор). Защищает от спама и от случайных писем не по адресу

В TIQQET все четыре уровня — встроенный функционал, настраиваются за 10 минут в админке.

Попробуйте TIQQET в деле

On-premise ServiceDesk с полным циклом заявок, SLA-контролем и мобильными приложениями. Развёртывание за 1 день.

Посмотреть демо

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

Через какой почтовый протокол лучше принимать заявки — IMAP или POP3?

IMAP. POP3 удаляет письма с сервера после скачивания — теряете возможность парсить тот же ящик повторно или диагностировать проблемы. IMAP оставляет копии, и можно «прочитать заново» через флаг \Seen.

Можно ли совмещать email-канал с порталом самообслуживания?

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

Что делать, если пользователь отвечает на письмо с большой цитатой переписки?

Парсер должен отрезать quoted-блок. В большинстве почтовиков он начинается с строки «On 2025-01-15, ... wrote:» или «15.01.2025, ... написал:». Регулярка по этим маркерам + удаление префикса «>» в строках.

Как обработать ответ от секретаря (forward от другого человека)?

Если в From стоит уже секретарь, а в теме есть «Fwd:» — попытаться извлечь оригинального отправителя из тела письма (часто там «From: original@user»). В TIQQET это делается опционально, иначе тикет создаётся от имени секретаря.

Нужен ли отдельный почтовый ящик под helpdesk, или можно использовать общий?

Только отдельный. Общий с другими целями (info@, sales@) приводит к смешению заявок и не-заявок. Под helpdesk должен быть только трафик заявок, и весь содержательный — обрабатывается.