Проверка доступности конечной точки BPMSoft для синхронизации
почты
Данный материал предназначен для продвинутых пользователей. Если у вас есть вопросы по применению, обратитесь в Техническую поддержку BPMSoft.
Для проверки состояния почтового механизма в BPMSoft можно отправить запрос к конечной точке POST /ServiceModel/ExchangeListenerService.svc/ProcessFullEmail. Этот запрос создает записи объектов системы, представляющие данные о загруженных письмах. Успешная отправка запроса подтверждает готовность BPMSoft к синхронизации электронной почты при успешной диагностике почтового механизма.
Прямой запрос к конечной точке POST /ServiceModel/ExchangeListenerService.svc/ProcessFullEmail дает возможность эмулировать целевой процесс загрузки письма. Сервис синхронизации почты при синхронизации отправляет идентичный запрос на загрузку сообщения с бинарными данными о письме (POST /ServiceModel/ExchangeListenerService.svc/ProcessBinarySerializedEmail).
POST #BPMSoft_URL# HTTP/1.1
Host: #BPMSoft_URN#
Content-Type: application/json
Accept: */*
{
"Emails": [
{
"Subject": "TestMessageSubject",
"Body": "TestMessageBody",
"Sender": #Sender_Email_Address#,
"Recepients": [ #Recipient_Email_Address# ],
"CopyRecepients": [],
"BlindCopyRecepients": [],
"Headers": [],
"Importance": "2",
"Attachments": [],
"SendDateTimeStamp": #SendDateTimeStamp_Value#,
"MessageId": #MessageId_Value#
}
],
"SubscriptionInfo": {
"MailboxId": #Target_Mailbox_Id#,
"SysAdminUnit": #Mailbox_Owner#,
"Id": #Target_Mailbox_Id#
}
}
Где:
- #BPMSoft_URL# — адрес развертывания целевого инстанса BPMSoft;
- #BPMSoft_URN# — адрес конечной точки:
- для .NET Framework: /0/ServiceModel/ExchangeListenerService.svc/ProcessFullEmail
- для .NET Core/.NET 8: /ServiceModel/ExchangeListenerService.svc/ProcessFullEmail
- #Sender_Email_Address# — значение адреса электронной почты отправителя сообщения электронной почты;
- #Recipient_Email_Address# — значение адреса электронной почты получателя сообщения электронной почты;
- #SendDateTimeStamp_Value# — значение числа тактов, которое представляет определенную дату и время (например, количество тактов 638910720000000000 эквивалентно дате и времени "18/08/2025 00:00:00");
- #MessageId_Value# — значение почтового заголовка "Message-ID";
- #Target_Mailbox_Id# — идентификатор почтового ящика в BPMSoft (таблица "MailboxSyncSettings", столбец "Id"), в отношении которого осуществляется загрузка письма;
- #Mailbox_Owner# — наименование учетной записи, являющейся владельцем почтового ящика в системе (таблица "SysAdminUnit", столбец "Name").
Текстовые значения должны быть указаны в кавычках. Например: "Sender": "test@mail.ru".
Сценарии применения
Проверить сетевую доступность после настройки сервиса
После настройки Сервиса синхронизации почты выполните запрос из среды его развертывания, чтобы проверить сетевую доступность по пути [Exchange Listener → BPMSoft]. Это поможет заранее выявить проблемы на сетевом уровне, которые могут проявляться в логах почтового сервиса следующими ошибками:
- Mailbox*#mailbox_name#: error sending emails ['#message_unique_identifier#' in folder#target_folder_name#] to #BPMSoft_Url#**/ServiceModel/ExchangeListenerService.svc/NewEmail. System.Threading.Tasks.TaskCanceledException: The operation was canceled. at System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken) ...*
- Mailbox*#mailbox_name#: error sending emails ['#message_unique_identifier#' in folder#target_folder_name#] to #BPMSoft_Url#**/ServiceModel/ExchangeListenerService.svc/NewEmail. System.Net.Http.HttpRequestException: Connection refused ---> System.Net.Sockets.SocketException (111): Connection refused ...*
Ошибка 404 при синхронизации почтовых сообщений на уровне компонента exchangelistener-worker
Процесс синхронизации почтовых сообщений на уровне компонента exchangelistener-worker может завершиться ошибкой с кодом 404, если выполнить запрос (POST /ServiceModel/ExchangeListenerService.svc/ProcessBinarySerializedEmail) по пути Exchange Listener → BPMSoft:
Mailbox*#mailbox_name#can't send events ['#message_unique_identifier#' in folder#target_folder_name#] to#BPMSoft_Url#**/ServiceModel/ExchangeListenerService.svc/NewEmail. System.Exception: Code 'NotFound', Reason 'Not Found', Content 'System.Net.Http.HttpConnectionResponseContent'.*
В таком случае запрос извне почтового сервиса поможет локализовать проблему. Например, при развертывании BPMSoft на нескольких нодах запрос к конкретной ноде может выявить влияние балансировщика на проблему.
Пример: В логах балансировщика зафиксирована ошибка:
"GET /ServiceModel/ExchangeListenerService.svc/ProcessBinarySerializedEmail HTTP/1.1" 404 0 "-" "curl/7.58.0"
При этом в целевом логе видно, что был выполнен GET-запрос вместо ожидаемого POST.
Ошибка 400 при синхронизации почтовых сообщений на уровне компонента exchangelistener-worker
Процесс синхронизации почтовых сообщений на уровне компонента exchangelistener-worker может завершиться ошибкой с кодом 400, если выполнить запрос (POST /ServiceModel/ExchangeListenerService.svc/ProcessBinarySerializedEmail) по пути Exchange Listener → BPMSoft:
Mailbox*#mailbox_name#can't send events ['#message_unique_identifier#' in folder #target_folder_name#] to #BPMSoft_Url#**/ServiceModel/ExchangeListenerService.svc/NewEmail. System.Exception: Code 'BadRequest', Reason 'Bad Request', Content 'System.Net.Http.HttpConnectionResponseContent'.*
Запрос извне почтового сервиса также поможет выявить проблему. Если запрос завершается с указанной ошибкой, убедитесь, что учетная запись, сохраненная в Exchange Listener (параметр "SubscriptionInfo.SysAdminUnit"), присутствует в целевом экземпляре BPMSoft.
Проверка значения "$null" в параметре «Message-ID»
В системе есть условие: «Каждое входящее письмо должно содержать уникальное значение в параметре «Message-ID».». Если со стороны почтового сервера приходит значение "$null" (эквивалент отсутствия значения в заголовке), письма теряются. Это можно проверить, выполнив запрос и указав в параметре Emails.MessageId значение "$null". В результате система создаст одно сообщение с этим значением, а все последующие будут исключены из обработки.
Рекомендуем изучить
Общие принципы диагностики проблем эксплуатации микросервисов