Перейти к содержанию

Почта: бизнес-логика

Обзор

Почтовая подсистема 1Формы реализует полноценный встроенный почтовый клиент, интегрированный с задачами и автоматизацией. Система подключается к внешним почтовым серверам по протоколам IMAP, POP3 и через EWS (Exchange Web Services), обеспечивая приём, отправку и синхронизацию писем. Письма хранятся в БД и могут быть привязаны к задачам: автоматически (через привязку ящика к категории или почтовые смарты) или вручную из интерфейса. Поддерживаются почтовые провайдеры: mail.ru, yandex.ru, gmail.com, Microsoft Exchange, а также собственные IMAP/SMTP-серверы.

Ключевые возможности: - Встроенный почтовый клиент в навигационной панели пользователя - Автоматическое создание задач из входящих писем - Почтовые смарт-правила для маршрутизации входящей корреспонденции - HTML-шаблоны для всех типов системных уведомлений - Фоновые задания (джобы) для асинхронной обработки очередей - Вынесение резолюций по подписям прямо из email-уведомлений

Почтовые серверы

Почтовый сервер -- это подключение к внешнему mail-серверу с заданными параметрами IMAP/SMTP. Администратор регистрирует серверы в разделе "Система - Почта", указывая адреса и порты IMAP/SMTP, параметры SSL/TLS (рекомендуется TLS 1.2), тип провайдера и дополнительные настройки.

Типы провайдеров

  • SyncedMailProvider -- стандартный провайдер с фоновой синхронизацией через джобы
  • ImapMailProvider -- провайдер с онлайн-синхронизацией (требуется отключить флаг "Синхронизируется" в ящике)
  • ExchangeMailProvider -- для Microsoft Exchange (рекомендуется вместо ImapMailProvider + Exchange Server, т.к. поддерживает фильтрацию, сортировку и русскоязычный поиск)

Дополнительные параметры сервера

  • Exchange Server -- флаг принадлежности к MS Exchange (зарезервирован; принудительно проверяет доступ по IMAP)
  • Gmail -- флаг принадлежности к Google Mail
  • CalDav -- интеграция с CalDav-календарём (адрес, провайдер: Kerio / Default)
  • EWS URL -- адрес Exchange Web Services
  • Анонимная аутентификация по SMTP -- отправка без авторизации (для ящиков "только для отправки")
  • Разрешённые почтовые домены -- домены, с которых допустима подмена адреса отправителя (через запятую)
  • Ошибки прекращения обработки -- список ошибок, при которых обработка письма останавливается и джоб переходит к следующему

Протокол MAPI не поддерживается. Для работы с MAPI рекомендуется использовать промежуточный обработчик (DavMail). Таймаут IMAP-операций настраивается через пользовательский ключ ImapTimeout (по умолчанию 40 секунд).

Почтовые ящики

Системный ящик

Системный почтовый ящик предназначен для отправки уведомлений платформы (создание задач, смена статусов, комментарии и т.д.). Настраивается в разделе "Настройки почты" через опцию "Использовать почтовый ящик для системных писем". Также должна быть активна опция "Отправлять письма от имени системного ящика" в общих настройках приложения.

Рекомендации для системных ящиков: - Хранить письма 5-15 дней (предотвращение переполнения БД устаревшими уведомлениями) - Синхронизировать письма за 5-15 дней - Не использовать для повседневной переписки

В общих настройках приложения определяются два специальных системных ящика: - Почтовый ящик для ответов -- принимает ответы пользователей на уведомления и регистрирует их как комментарии к задачам - Внешний почтовый ящик для ответов -- аналог для пользователей без доступа к внутренней сети

Для корректной работы ответов необходимо создать системную категорию "Почта" в разделе "Системный" и подключить к ней соответствующий ящик.

Пользовательские ящики

Каждому пользователю может быть предоставлен доступ к почте (флаг "Доступ к почте" в профиле или через список в настройках почтового клиента). После этого в навигационной панели появляется вкладка "Почта", где пользователь может добавлять внешние почтовые ящики (Gmail, Yandex, корпоративные и др.).

Пользовательские ящики не должны быть синхронизируемыми -- при активной синхронизации письма хранятся в таблице Emails, что при большом потоке ведёт к переполнению БД. Отправка автоматических писем на эти ящики через смарт-действия при этом работает.

Настройки ящика

Основные параметры почтового ящика: - Почтовый сервер -- привязка к зарегистрированному серверу - Название -- отображаемое имя на вкладке "Почта" - Имя и email отправителя -- подставляются в исходящие письма - Логин / Пароль -- учётные данные; логин заполняется автоматически - Логин / Пароль CalDav -- отдельные учётные данные для CalDav - Использовать только для отправки -- отключает приём входящих - Хранить письма N дней -- автоочистка (0 = хранить всегда; для системных ящиков рекомендуется 5-15 дней) - Синхронизировать письма за N дней -- глубина синхронизации - Количество неудачных попыток синка -- порог, после которого ящик исключается из синхронизации; счётчик можно сбросить вручную - Временно отключить -- альтернатива удалению - Не использовать в смартах -- скрывает ящик из списка доступных в смарт-действии "Отправить email" - Не формировать адресную книгу -- отключает список контактов при создании письма - Синхронизируется -- должен быть включён только для служебных ящиков, работающих с почтовыми смартами - Включить события о новых письмах (Exchange) -- с версии 2.260 Пегас; активирует глобальное смарт-событие "Пришло новое письмо"

Синхронизация папок

При настройке ящика можно выбрать, какие папки синхронизировать и к какой папке на сервере привязать каждую системную папку 1Формы:

  • Входящие -- папка для полученных писем
  • Черновики -- папка для неотправленных писем
  • Отправленные -- папка для отправленных писем
  • Удалённые (Корзина) -- папка для удалённых писем
  • Архив -- папка для архивных писем
  • Спам -- папка для нежелательной почты

Опция "Синхронизировать все папки" подключает все созданные в ящике папки. Для каждой из основных системных папок явно указывается соответствующая папка на сервере (по умолчанию -- стандартные папки IMAP: INBOX, Drafts, Sent, Trash/Junk).

Пользователи и владельцы ящика

К каждому ящику назначаются пользователи (видят ящик на вкладке "Почта") и владельцы (дополнительно могут менять настройки ящика).

Почтовый клиент

Встроенный почтовый клиент доступен на вкладке "Почта" в навигационной панели и предоставляет функциональность, аналогичную Outlook (только веб-версия). В мобильных приложениях функциональность ограничена: iOS поддерживает только чтение почты, Android -- чтение и отправку (см. mobile.md). Пользователь может:

  • Читать входящую и исходящую почту из подключённых ящиков
  • Писать и отправлять письма
  • Создать задачу из письма -- превращает входящее письмо в задачу
  • Связать письмо с существующей задачей -- привязка к уже созданной задаче
  • Написать письмо из задачи -- отправка письма в контексте задачи

Все письма, получаемые и отправляемые через встроенный клиент, хранятся в БД.

Настройки частоты и антиспам

Администратор может ограничить частоту отправки писем (количество писем в минуту) для соответствия корпоративным политикам и противодействия спаму. Пользователю может быть предоставлено право самостоятельно определять правила синхронизации своего ящика (через настройки индивидуальных джобов).

Настройки клиента

Контекстное меню почтового ящика предоставляет пользователю дополнительные операции:

Пункт меню Описание
Новое письмо Создать новое письмо для отправки из данного ящика
Настройки Управление настройками ящика (доступно владельцам)
Шрифты и подписи Выбор шрифтов и добавление автоматической подписи к исходящим сообщениям
Добавить папку поиска Создать виртуальную папку для поиска писем по заданным критериям
Добавить ящик Подключение нового почтового ящика
Удалить Удаление ящика (доступно владельцам)

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

Действия с папкой: В избранное, Отметить все как прочитанные, Очистить папку.

Индикаторы рядом с системными папками (Входящие, Черновики, Удалённые) — количество писем. При ошибке авторизации в ящик отображается красный индикатор с кнопкой «Войти» для повторной авторизации.

Добавление почтового ящика

Добавить ящик можно с пустой вкладки «Почта» (кнопка «Создать»), либо при наличии уже подключённых — кнопкой + или через пункт «Добавить ящик» в контекстном меню. Открывается 4-шаговый мастер; для перехода на следующий шаг — Enter или кнопка «Далее».

Шаг 1. Вход в почту:

Поле Описание
Почтовый сервер Выбор из списка. При нестандартном — обратиться к администратору
Логин / Пароль Учётные данные. Логин заполняется автоматически
Логин CalDav / Пароль CalDav / Адрес CalDav Появляются при выборе сервера CalDav. Адрес автоподтягивается; при отсутствии — обязателен

Шаг 2. Настройка ящика:

Поле Описание
Название почтового ящика Имя на вкладке «Почта». Макс. 25 символов
Имя отправителя Будет в поле «От»
Email отправителя По умолчанию — значение из профиля пользователя
Владельцы ящика Сотрудники, у которых ящик доступен и которые могут менять его настройки
Другие пользователи ящика Сотрудники, у которых ящик появится во вкладке «Почта» (без прав на настройки)

Шаг 3. Папки для синхронизации:

  • «Синхронизировать все папки» — флаг включает все папки ящика.
  • Соответствие системных папок 1Формы (Входящие, Черновики, Отправленные, Удалённые/Корзина, Архив, Спам) папкам в почтовом ящике.

Шаг 4. Дополнительные настройки:

  • Использовать в смартах — ящик отображается в списке доступных у смарт-действия «Отправить email». Доступно только администратору.
  • Отображать количество непрочитанных писем в меню — включает индикатор над вкладкой «Почта» в боковой панели (сумма по всем подключённым ящикам).

Поиск и фильтрация писем

В списке писем поддерживается: - поиск по тексту, отправителю и теме; - сортировка по колонкам; - фильтрация и группировка.

Поиск писем на русском языке не работает для почтового сервера EWS с доступом по IMAP.

Отправка писем извне почтового клиента

Помимо почтового клиента (вкладка "Почта"), пользователь может отправить письмо из нескольких мест интерфейса.

Из карточки задачи. В меню «Документы» на панели инструментов карточки задачи доступна кнопка «Написать письмо». При её нажатии открывается форма создания письма, где поле «От кого» заполнено автоматически -- подставлен почтовый ящик текущего пользователя.

Из профиля пользователя. При наведении курсора на адрес электронной почты на вкладке «Информация» в профиле пользователя появляются две кнопки: скопировать адрес в буфер обмена и открыть форму создания письма (если у текущего пользователя подключён почтовый ящик). Если ящик не подключён, кнопка открывает почтовое приложение устройства.

Из справочника сотрудников. При нажатии на адрес электронной почты в колонке «Контакты» справочника сотрудников открывается форма нового письма с предзаполненным полем получателя (при наличии у текущего пользователя подключённого почтового ящика).

Окно создания письма

Форма создания письма содержит стандартные поля: - От кого -- почтовый ящик отправителя (автозаполнение) - Кому, Копия, СК (скрытая копия) -- получатели - Тема -- заголовок письма - Текст письма -- тело в HTML - Вложения -- файлы - Уведомление о прочтении -- флаг запроса подтверждения

Просмотр и работа с письмом

При выборе письма в списке оно отображается снизу или справа от списка — в зависимости от персональных настроек. Если отправитель — пользователь системы, клик по его имени открывает мини-карточку.

Кнопки в шапке письма:

Действие Поведение
Ответить Форма нового письма с цитатой; в «Кому» — отправитель
Ответить всем Форма с цитатой; в «Кому» — отправитель и все адресаты исходного
Переслать Форма с цитатой; «Кому» и «Копия» пустые
Удалить Удалить письмо из папки
Предыдущее / Следующее Навигация по списку
Свернуть / Развернуть Развернуть письмо на весь экран

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

Вложения в письме

Если в письме есть вложения, они отображаются в отдельном блоке. По умолчанию свернут до 2 файлов, кнопка «Развернуть» показывает полный список. Файлы содержимого письма (HTML-изображения в тексте) во вложениях не отображаются.

По клику файлы открываются во встроенном просмотрщике; офисные документы — в R7/OnlyOffice (см. files/business.md).

Привязка письма к задаче

Связь между письмом и задачей можно установить тремя способами:

  • Из почтового клиента, привязка к существующей задаче — кнопкой на панели инструментов открытого письма. Если письмо только что отправлено, оно сначала попадает в папку «Исходящие», а затем (после синхронизации с сервером) перемещается в «Отправленные». Связь можно установить, не дожидаясь этого перемещения — открыв письмо из «Исходящих»; после попадания в «Отправленные» связь сохраняется.
  • Из почтового клиента, создание новой задачи — действие «Создать задачу и вложить письмо» в карточке письма открывает выбор категории, затем карточку создания задачи. После сохранения письмо в формате .eml появляется во вкладке «Письма» в блоке «Файлы» задачи.
  • Из карточки задачи — кнопка в панели блока «Файлы» открывает папку «Входящие» во встроенном почтовом клиенте; выбранное письмо привязывается к задаче и попадает на вкладку «Письма».

Письмо .eml из карточки задачи открывается во встроенном просмотрщике без скачивания.

Привязка почты к категориям

К категории может быть подключён выделенный почтовый ящик. При поступлении письма на этот ящик автоматически создаётся задача в категории от имени отправителя. Логика маппинга полей: - Кому -- становятся исполнителями задачи (если есть в системе) - Копия -- становятся подписчиками - Тело письма -- текст задачи / комментарий (опционально и то, и другое) - Вложения -- файлы задачи - Комментарии из задачи автоматически отправляются отправителю письма

Важное ограничение: ящик, подключённый к категории, не должен быть закреплён за пользователем.

Параметры ящика категории

  • Протокол: IMAP или POP3
  • IMAP-папка (например, INBOX)
  • Количество писем для загрузки за сессию (по умолчанию 100)
  • Дублирование тела в текст задачи
  • Автоматическое создание пользователей из поля "Кому" (новые попадают в группу для внешних пользователей)
  • Обработка авто-ответов (ответы становятся комментариями, а не новыми задачами)
  • Вложение оригинала письма
  • Хранимая процедура SQL, вызываемая после обработки всех писем

Формат заголовков для маршрутизации

Система распознаёт специальные маркеры в теме письма для маршрутизации: - Пустой заголовок -- создание новой задачи - [1f]<taskid> -- запись в существующую задачу - [1f]c<commentid> -- ответ на комментарий

Где [1f] -- значение "Краткое имя приложения" из общих настроек.

Заполнение ДП из письма

Тело письма может содержать XML-теги <extparams><extparam id="ID">значение</extparam></extparams> для автоматического заполнения дополнительных параметров. Требование: HTML должен быть отключён в настройках категории.

Настройки уведомлений в категории

На уровне категории можно управлять почтовыми уведомлениями: - Полностью отключить отправку почтовых сообщений (при этом уведомления продолжают отображаться в ленте) - Добавить значение ДП или произвольный текст в заголовок писем - Указать отдельный ящик и имя отправителя для внешних пользователей - Задать текст письма об отклонении

Почтовые смарт-правила

Почтовые смарты позволяют автоматически обрабатывать входящие письма по условиям без выделения отдельного ящика на каждую категорию. Настраиваются в разделе "Почта - Smart" и привязываются к конкретной папке конкретного ящика.

Обязательное условие: ящик должен иметь активную опцию "Синхронизируется".

Принцип работы

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

Почтовый контекст в смарт-выражениях пакета

Пакет действий, привязанный к папке почтового ящика, исполняется в почтовом контексте события. Это отличает его от пакета, привязанного к категории задач. При создании или редактировании смарт-выражения внутри такого пакета (например, для значения ДП в действии «Создать задачу») в дереве сущностей доступны почтовые параметры входящего письма: отправитель, получатели, тема, тело, дата получения, вложения и др. Кроме новых выражений, в списке выбора отображаются ранее созданные почтовые смарт-выражения — их можно переиспользовать. Почтовый контекст появляется автоматически при входе в редактор из пакета, привязанного к ящику; отдельной настройки не требуется. В категорийных пакетах почтовый контекст недоступен — там используется контекст задачи.

Доступные действия

Стандартные: - Создать задачу - Привязать письмо к задаче - Переместить письмо в папку - Перейти в заданный статус / сделать переход / принудительно изменить статус - Изменить значение ДП / массово изменить ДП / копировать ДП / очистить ДП - Отправить email / email на группу / системный email / SMS - Вложить файл - Создать / уволить пользователя - Назначить / удалить заместителя - Обновить расширенное свойство пользователя

Из сторонних DLL: - Синхронизировать дополнительные параметры задач

Пример сценария

Один ящик для входящих обращений, письма сортируются по теме: - Тема содержит "Обращение" -- создаётся задача в категории "Обращения граждан", текст письма копируется в текст задачи, адрес отправителя записывается в ДП - Тема содержит "Заявка" -- создаётся задача в другой категории

Если в категории настроена постановка задач из почты, изображения в теле письма вставляются как картинки (при разрешённом HTML) или вырезаются (если HTML запрещён).

Шаблоны писем

Шаблоны почтовых уведомлений -- HTML-конструктор для типизации системных писем. Каждый шаблон привязан к событию (имя шаблона = имя события) и может быть ограничен конкретной категорией и языком интерфейса.

Система событий

Около 40 типов событий, для которых можно создать шаблоны. Основные группы: - Задачи: TaskCreated, StateChanged, StateChangedForcibly, TaskTextChanged, DueChanged, DueChangedOverdue - Исполнители: PerformerAdded, PerformerRemoved, ResponsibleAdded, ResponsibleRemoved, PerformerRefused - Комментарии: NewComment, NewCommentSimple, EditComment, EditCommentSimple - Подписи / акцепт: AcceptantAssigned, SignatureAccepted, SignatureRejected, DynSignatureAccepted, DynSignatureRejected, TaskAccepted (+ варианты с эскалацией, делегированием, пустыми полями) - Пользователи: UserInvitation, NewPassword, PasswordRecovery, AssistantAdded, AssistantRemoved - ДП: ExtParamsChanged - Прочие: SubscriberAdded, AccessDenied, FileDescriptionUpdated, Absence, HelperNotification - Встречи (Exchange): MeetingCreated (id=54), MeetingCreatedWithLinkedTask (id=55) — письмо-уведомление участникам Exchange-встречи при создании; второй шаблон добавляет блок «Перейти к задаче» при наличии LinkedTaskId (добавлено в v2.267)

Структура шаблона

Шаблон содержит: - <subject> -- тема письма (составляется из параметров и ресурсов) - <mailbody> -- тело письма в HTML с таблицей - <style> -- CSS-стили (шрифты, цвета шапки, кнопок, ссылок)

Доступны три категории элементов: - Parameters -- данные задачи: taskid, tasktext, tasktextshort, state, userid, performer, orderedtime, createdtask и др. - Resources -- локализованные текстовые строки: "Новая задача", "Исполнитель", "Заказчик" и др. - Controls -- интерактивные элементы: ссылка на задачу (gototask), путь к категории, ДП, кнопки резолюций подписи, ссылка отписки, вложения

Привязка к языку и категории

При отправке используется язык интерфейса получателя. Приоритет выбора шаблона: 1. Шаблон для языка получателя 2. Шаблон для международного языка (Languages.IsInternational = 1) 3. Шаблон для языка по умолчанию (Languages.IsDefault = 1)

Шаблон может быть привязан к конкретной категории (например, отдельный дизайн для определённого типа задач) или быть общим.

Резолюции по подписям из email

Шаблоны поддерживают кнопки для вынесения резолюций по подписям. Формат ссылок зависит от настройки UseMailToLinksForSignaturesFromEmails: - 0 (URL) -- кнопка открывает интерфейс 1Формы в браузере - 1 (mailto) -- кнопка открывает почтовый клиент, ответ обрабатывается джобом ServiceMailBoxesJob и регистрирует резолюцию; текст ответа сохраняется как комментарий к резолюции

Ответы на уведомления как комментарии

Если тема письма содержит маркер [1F]<номер_задачи>, ответ на него будет опубликован как комментарий в задаче. Если в теле присутствует 1f-system-comment-id:<номер>, ответ станет ответным комментарием к указанному. Без этих маркеров ответ создаст новую задачу в привязанной категории.

Импорт / экспорт

Шаблоны экспортируются в XML-файл (TemplatesExportFile.xml) с возможностью выгрузки только дефолтных (без привязки к категории). При импорте шаблоны добавляются в конец списка с опциями: автоматически включить и/или сохранить существующие одноимённые.

Фоновые задания (джобы)

Вся почтовая обработка выполняется асинхронно через систему фоновых заданий. Каждый джоб запускается по расписанию и обрабатывает свою очередь.

Джоб Класс Назначение
Синхронизация EmailJobSyncFolders Проверяет наличие новых писем и синхронизирует флаги прочтения. Формирует очередь на получение, но сам письма не скачивает
Получение EmailJobReceive Скачивает письма из очереди, сформированной джобом синхронизации
Получение (вторая очередь) EmailJobReceiveSecondary Обрабатывает "проблемные" письма (>5 неудачных попыток получения), чтобы не блокировать основную очередь
Отправка EmailJobSend Обрабатывает очередь на отправку
Отправка (вторая очередь) EmailJobSendSecondary Аналогично -- повторяет отправку писем с >5 ошибками
Синхронизация удаления EmailJobSyncDelete Двусторонняя синхронизация удаления: удалённые на сервере удаляются в 1Форме и наоборот
Очистка удалённых EmailJobPurgeDeleted Физическое удаление из БД писем, помеченных для удаления (после завершения синхронизации)
Очистка ящиков EmailJobCleanMailBoxes Удаляет письма старше N дней (параметр "Хранить письма N дней")

Очередь на отправку

Администратор может просматривать очередь отправки (кнопка "Очередь на отправку" на странице почты). Отчёт содержит: ID записи, ID письма, дату постановки, количество неудачных попыток и текст ошибки. Очередь можно очистить целиком.

Логи

Журнал почтовых заданий (кнопка "Логи почтовых джобов") позволяет фильтровать по периоду, типу задания, наличию ошибок и тексту сообщения. Записи включают количество успешно обработанных писем и количество ошибок.

ДП "Адресаты Email"

Специальный тип дополнительного параметра, предназначенный для выбора email-адресов пользователей системы. Поддерживает ограничение списка выбора: без ограничений (все работающие сотрудники), по группе или по смарт-выражению (возвращает список ID пользователей). Текстовые ресурсы (заголовок кнопки, подсказки) настраиваются.

Связи с другими доменами

Задачи

  • Создание задачи из входящего письма (через привязку ящика к категории или почтовый смарт)
  • Привязка письма к существующей задаче из почтового клиента
  • Отправка письма из контекста задачи
  • Ответы на уведомления регистрируются как комментарии

Категории

  • Подключение почтового ящика к категории для автоматического приёма заявок
  • Настройка почтовых сообщений на уровне категории (вкл/выкл, заголовки, ящик для внешних)
  • Привязка шаблонов уведомлений к конкретным категориям

Подписи

  • Шаблоны уведомлений о запросе подписи (AcceptantAssigned и варианты)
  • Вынесение резолюций из email (через URL или mailto)
  • Обработка ответов через джоб ServiceMailBoxesJob

Смарт-логика

  • Почтовые смарты -- автоматическая обработка входящих писем по условиям
  • Глобальное смарт-событие "Пришло новое письмо" (Exchange, с версии 2.260)
  • Смарт-действия "Отправить email" / "Отправить email на группу" / "Отправить системный email"

Дополнительные параметры

  • ДП типа "Адресаты Email"
  • Заполнение ДП из тела письма через XML-теги
  • Добавление значения ДП в заголовки уведомлений

Пользователи и группы

  • Управление доступом к почте (флаг в профиле)
  • Автоматическое создание внешних пользователей из входящих писем
  • Назначение пользователей и владельцев на почтовые ящики

Календарь

  • Интеграция с CalDav через настройки почтового сервера
  • Синхронизация с Exchange-календарём (счётчик неудачных попыток)

Уведомления

  • Системная категория "Уведомления о прочтении" с подключённым ящиком
  • Шаблоны уведомлений для ~40 типов событий
  • Настройка отправки: от имени системного ящика или с подменой адреса (в рамках разрешённых доменов)