Мастер-Тур(15):MailService — различия между версиями

Материал из Megatec
Перейти к: навигация, поиск
[досмотренная версия][досмотренная версия]
(Установка службы MailService)
 
(не показано 13 промежуточных версий 2 участников)
Строка 1: Строка 1:
 
==Введение==
 
==Введение==
MailService – это сервис для отправки email-уведомлений и сообщений, которые требуется формировать в процессе бронирования туров. Сервис обеспечивает интеграцию с внешними почтовыми системами, логирование операций и управление настройками для различных типов сообщений.
+
MailService – это служба для отправки email-уведомлений и сообщений, формируемых в процессе бронирования туров. Сервис поддерживает очередь отправки, работу с шаблонами, исключение повторной отправки на одинаковые адреса, логирование и приоритетное использование пользовательских шаблонов с суффиксом _custom.
  
 
==Установка службы MailService==
 
==Установка службы MailService==
* Скопировать папку ''MailService'' из дистрибутива на сервер приложений.
 
* Указать настройки ''MailServiceUrl'' – адреса сервиса отправки почтовых сообщений в '''Megateс.TourSearchOwin.exe.config''' службы [[Мастер-Тур(15):Установка#Установка службы поиска|'''TourSearchOwin''']]
 
* Включить ''MailServiceLogger'' – Логгер функционала отправки почтовых сообщений в '''Megateс.TourSearchOwin.exe.config''' службы [[Мастер-Тур(15):Установка#Установка службы поиска|'''TourSearchOwin''']]
 
* Перед установкой службы необходимо настроить конфигурационный файл ''appsettings.json''.<br>
 
  
;Настройка службы '''MailService'''
+
*Скопировать папку ''MailService'' из дистрибутива на сервер приложений.
 +
 
 +
*Указать настройки ''MailServiceUrl'' – адрес сервиса отправки сообщений в '''Megateс.TourSearchOwin.exe.config''' службы [[Мастер-Тур(15):Установка#Установка службы поиска|'''TourSearchOwin''']]. При заполнении данной настройки – письма через Мастер-Web больше не отправляются. За отправку начинает отвечать служба MailService.
 +
 
 +
*Включить ''MailServiceLogger'' – логгер отправки сообщений в '''Megateс.TourSearchOwin.exe.config''' службы [[Мастер-Тур(15):Установка#Установка службы поиска|'''TourSearchOwin''']]
 +
 
 +
*Перед установкой необходимо настроить конфигурационный файл ''appsettings.json''.
 +
 
 +
==Настройка службы MailService==
  
 
В разделе ''Install'' конфигурационного файла задаются параметры установки и адреса службы '''MailService'''.
 
В разделе ''Install'' конфигурационного файла задаются параметры установки и адреса службы '''MailService'''.
  
 
{| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse" width="800px"
 
{| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse" width="800px"
 
 
|- style="background-color:#F2F2F2"
 
|- style="background-color:#F2F2F2"
 +
! №
 +
! Описание
 +
! Настройка
  
! width="50%" | Описание
+
|- style="vertical-align:text-middle"
! width="50%" | Настройка
+
| 1
 
+
| Название службы (по умолчанию — MegatecMailService)
|- style="vertical-align:text-top"
+
| <syntaxhighlight lang="json" enclose="div">
 
+
"ServiceName": "MegatecMailService"
| Имя службы  
 
| <syntaxhighlight lang="json" enclose="div">  
 
"ServiceName": "MegatecMailService"  
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
|- style="vertical-align:text-top"
+
|- style="vertical-align:text-middle"
 
+
| 2
| Адрес службы
+
| Путь к службе MailService. Используется порт 7705 (рекомендуется).
| <syntaxhighlight lang="json" enclose="div">  
+
<font style="color:red">''Внимание!''</font><br />
"ServiceAddress": [ "http://localhost:7705" ]  
+
При смене порта нужно изменить его и в _Install.bat.
 +
| <syntaxhighlight lang="json" enclose="div">
 +
"ServiceAddress": [ "http://localhost:7705" ]
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
|- style="vertical-align:text-middle"
 +
| 3
 +
| IP-адрес, на котором будет работать MailService.
  
|- style="vertical-align:text-top"
+
*IPAddress.IPv6Any — слушать все доступные IPv6-интерфейсы.
 +
*IPAddress.Any — слушать все IPv4-интерфейсы.
 +
*Также можно задать конкретный IP-адрес сервера.
 +
<font style="color:red">''Важно:''</font> Указание IPAddress.IPv6Any позволяет принимать запросы на всех интерфейсах по протоколу IPv6. Для IPv4 рекомендуется использовать IPAddress.Any или конкретный IP.
 +
| <syntaxhighlight lang="json" enclose="div">
 +
"IPAddress": "IPAddress.IPv6Any"
  
| IP-адрес службы
 
| <syntaxhighlight lang="json" enclose="div">
 
"IPAddress": "IPAddress.IPv6Any"
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
|- style="vertical-align:text-middle"
|- style="vertical-align:text-top"
+
| 4
 
+
| Список разрешённых хостов, с которых можно обращаться к MailService.
| Разрешенные хосты  
+
* "*" — разрешены все хосты (небезопасно для продакшена).
 +
* Укажите конкретные имена хостов или домены, если необходимо ограничить доступ.
 +
Пример: ["https://partner.tour.com", "https://office.megatec.ru"]
 
| <syntaxhighlight lang="json" enclose="div">
 
| <syntaxhighlight lang="json" enclose="div">
"AllowedHosts": "*"  
+
"AllowedHosts": "*"
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
|}
 
|}
  
Пример конфигурации для установки службы
+
Пример конфигурации:
 
+
<syntaxhighlight lang="json" enclose="div">  
<syntaxhighlight lang="json" enclose="div">
+
{  
{
+
"Install": {  
  "Install": {
+
  "ServiceName": "MegatecMailService",  
    "ServiceName": "MegatecMailService",
+
  "ServiceAddress": [ "http://localhost:7705" ],  
    "ServiceAddress": [ "http://localhost:7705" ],
+
  "IPAddress": "IPAddress.IPv6Any"  
    "IPAddress": "IPAddress.IPv6Any"
+
},  
  },
+
"AllowedHosts": "*"  
  "AllowedHosts": "*"
+
}  
}
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
[[Файл:Am 063.png|Внимание]]
 
[[Файл:Am 063.png|Внимание]]
Убедитесь, что адреса и IP-адреса службы настроены правильно, а доступ к службе ограничен только необходимыми хостами для обеспечения безопасности.<br />
+
Убедитесь, что IP-адрес и доступ к службе ограничены только необходимыми хостами.
  
 +
===Настройка отправки e-mail сообщений через MailService===
  
;Настройка отправки e-mail сообщений через MailService
+
Из системы отправляются следующие сообщения:
 
 
Из системы бронирования через ''MailService'' отправляются следующие сообщения:
 
  
 
{| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse" width="600px"
 
{| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse" width="600px"
 
 
|- style="background-color:#F2F2F2"
 
|- style="background-color:#F2F2F2"
 +
! №
 +
! Сообщение
 +
! Получатели
  
! width="2%" | №
+
|- style="vertical-align:text-middle"
! width="49%" | Сообщение
 
! width="49%" | Получатели сообщения
 
 
 
|- style="vertical-align:text-top"
 
 
 
 
| 1
 
| 1
| Уведомление о новой агентской резервации
+
| Сообщение о новой заявке от агента
| Администратор системы
+
|  
 
+
*Ведущий менеджер по путевке
|- style="vertical-align:text-top"
+
*Администратор системы
 +
*Дополнительный e-mail для агента (AddRcptToAgent)
 +
*E-mail по [[Мастер-Тур(15):Страны|стране]]
  
 +
|- style="vertical-align:text-middle"
 
| 2
 
| 2
| Уведомление о персональном бронировании
+
| Сообщение о новой заявке от частного лица
| Администратор системы, e-mail филиала
+
|  
 
+
* Ведущий менеджер по путевке
|- style="vertical-align:text-top"
+
* Администратор системы
 
+
* Дополнительный e-mail для частного лица (AddRcptToPerson)
| 3
+
* E-mail по [[Мастер-Тур(15):Страны|стране]]
| Сообщения для менеджера
 
| Менеджер (филиал или страна в зависимости от настроек)
 
 
 
|- style="vertical-align:text-top"
 
 
 
| 4
 
| Уведомление об ошибке
 
| Администратор системы
 
 
 
|- style="vertical-align:text-top"
 
 
 
| 5
 
| Уведомление для подагентства
 
| Администратор системы (при активном параметре `SubAgency`)
 
 
 
|- style="vertical-align:text-top"
 
 
 
| 6
 
| Дополнительные уведомления
 
| Указанные дополнительные адреса e-mail
 
 
 
 
|}
 
|}
  
+
===Настройки почты в конфигурации===
 
 
 
 
;Основные параметры конфигурации для MailService
 
  
 
{| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse" width="800px"
 
{| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse" width="800px"
 
 
|- style="background-color:#F2F2F2"
 
|- style="background-color:#F2F2F2"
 +
! №
 +
! Описание
 +
! Настройка
  
! width="50%" | Описание
+
|- style="vertical-align:text-middle"
! width="50%" | Настройка
+
| 1
 
+
| Адрес, с которого отправляются письма из системы бронирования, обязателен для заполнения
|- style="vertical-align:text-top"
 
 
 
| Отправка бронирований через агентства
 
| <syntaxhighlight lang="xml" enclose="div">
 
"SendAgencyReservation": true,
 
</syntaxhighlight>
 
 
 
|- style="vertical-align:text-top"
 
 
 
| Отправка личных сообщений на почту
 
| <syntaxhighlight lang="xml" enclose="div">
 
"SendPersonalEmail": true,
 
</syntaxhighlight>
 
 
 
|- style="vertical-align:text-top"
 
 
 
| Приоритет менеджера в работе с заявками
 
| <syntaxhighlight lang="xml" enclose="div">
 
"ManagerPriority": "filial",
 
</syntaxhighlight>
 
 
 
|- style="vertical-align:text-top"
 
 
 
| Включение персональных бронирований
 
| <syntaxhighlight lang="xml" enclose="div">
 
"PersonalBooking": true,
 
</syntaxhighlight>
 
 
 
|- style="vertical-align:text-top"
 
 
 
| Доступность расширенного выбора филиала
 
| <syntaxhighlight lang="xml" enclose="div">
 
"AdvancedFilialChoise": false,
 
</syntaxhighlight>
 
 
 
|- style="vertical-align:text-top"
 
 
 
| Отправка сообщений менеджеров на адрес страны
 
| <syntaxhighlight lang="xml" enclose="div">
 
"SendManagerMessagesToCountryEmail": false,
 
</syntaxhighlight>
 
 
 
|- style="vertical-align:text-top"
 
 
 
| Включение использования субагентов
 
| <syntaxhighlight lang="xml" enclose="div">
 
"SubAgency": false,
 
</syntaxhighlight>
 
 
 
|}
 
 
 
В таблице приведено описание почтовых настроек, которые должны быть заданы для работы '''MailService'''.
 
 
 
{| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse" width="800px"
 
 
 
|- style="background-color:#F2F2F2"
 
 
 
! width="50%" | Описание
 
! width="50%" | Настройка
 
 
 
|- style="vertical-align:text-top"
 
 
 
| Адрес, с которого отправляются письма
 
 
| <syntaxhighlight lang="json" enclose="div">
 
| <syntaxhighlight lang="json" enclose="div">
"MailFrom": "primer@Mail.com"
+
"MailFrom": "primer@mail.com"
 
</syntaxhighlight>
 
</syntaxhighlight>
  
|- style="vertical-align:text-top"
+
|- style="vertical-align:text-middle"
 
+
| 2
| Основной адрес получателя
+
| Адрес администратора системы (можно добавить несколько адресов через « ; »), обязателен для заполнения
 
| <syntaxhighlight lang="json" enclose="div">
 
| <syntaxhighlight lang="json" enclose="div">
"RcptTo": "primer@Mail.com"
+
"RcptTo": "admin@mail.com"
 
</syntaxhighlight>
 
</syntaxhighlight>
  
|- style="vertical-align:text-top"
+
|- style="vertical-align:text-middle"
 
+
| 3
| Дополнительные e-mail адреса
+
| Дополнительные e-mail адреса для получения сообщения о новой заявке от агентов (можно добавить несколько e-mail адресов через « ; »)
 
| <syntaxhighlight lang="json" enclose="div">
 
| <syntaxhighlight lang="json" enclose="div">
"AddRcptTo": "primer@Mail.com"
+
"AddRcptToAgent": "agent1@mail.com;agent2@mail.com"
 
</syntaxhighlight>
 
</syntaxhighlight>
  
|- style="vertical-align:text-top"
+
|- style="vertical-align:text-middle"
 
+
| 4
| e-mail адреса для Visa
+
| Дополнительные e-mail адреса для получения сообщения о новой заявке от частного лица (можно добавить несколько e-mail адресов через « ; »)
 
| <syntaxhighlight lang="json" enclose="div">
 
| <syntaxhighlight lang="json" enclose="div">
"Visa": "primer@Mail.com"
+
"AddRcptToPerson": "client1@mail.com;client2@mail.com"
 
</syntaxhighlight>
 
</syntaxhighlight>
  
|- style="vertical-align:text-top"
+
|- style="vertical-align:text-middle"
 
+
| 5
| e-mail адреса для Finance
+
| Почта для отправки отчетов об ошибках, возникающих при работе системы (можно добавить несколько почтовых ящиков через « ; »)
 
| <syntaxhighlight lang="json" enclose="div">
 
| <syntaxhighlight lang="json" enclose="div">
"Finance": "primer@Mail.com"
+
"AdminEmail": "errors@mail.com"
 
</syntaxhighlight>
 
</syntaxhighlight>
  
|- style="vertical-align:text-top"
+
|- style="vertical-align:text-middle"
 
+
| 6
| e-mail адрес менеджера
+
| Почтовый сервер SMTP, обязателен для заполнения
| <syntaxhighlight lang="json" enclose="div">
 
"Manager": "primer@Mail.com"
 
</syntaxhighlight>
 
 
 
|- style="vertical-align:text-top"
 
 
 
| Адрес администратора
 
| <syntaxhighlight lang="json" enclose="div">
 
"AdminEmail": "primer@Mail.com"
 
</syntaxhighlight>
 
 
 
|- style="vertical-align:text-top"
 
 
 
| Адрес для анкет
 
| <syntaxhighlight lang="json" enclose="div">
 
"AnkEmail": "primer@Mail.com"
 
</syntaxhighlight>
 
 
 
|- style="vertical-align:text-top"
 
 
 
| Адрес для дополнительного персонального e-mail
 
 
| <syntaxhighlight lang="json" enclose="div">
 
| <syntaxhighlight lang="json" enclose="div">
"AdditionalPersonalEmail": "primer@Mail.com"
+
"SmtpServer": "smtp.mail.com"
 
</syntaxhighlight>
 
</syntaxhighlight>
  
|- style="vertical-align:text-top"
+
|- style="vertical-align:text-middle"
 
+
| 7
| SMTP сервер
+
| SMTP порт почтового сервера (по умолчанию — 25), обязателен для заполнения
| <syntaxhighlight lang="json" enclose="div">
 
"SmtpServer": "smtp.yandex.ru"
 
</syntaxhighlight>
 
 
 
|- style="vertical-align:text-top"
 
 
 
| SMTP порт
 
 
| <syntaxhighlight lang="json" enclose="div">
 
| <syntaxhighlight lang="json" enclose="div">
 
"SmtpPort": 587
 
"SmtpPort": 587
 
</syntaxhighlight>
 
</syntaxhighlight>
  
|- style="vertical-align:text-top"
+
|- style="vertical-align:text-middle"
 
+
| 8
| Тип авторизации
+
| Тип авторизации на сервере: None, Base64 или TLS/SSL, обязателен для заполнения
 
| <syntaxhighlight lang="json" enclose="div">
 
| <syntaxhighlight lang="json" enclose="div">
 
"Authentication": "TLS/SSL"
 
"Authentication": "TLS/SSL"
 
</syntaxhighlight>
 
</syntaxhighlight>
  
|- style="vertical-align:text-top"
+
|- style="vertical-align:text-middle"
 
+
| 9
| Имя пользователя SMTP
+
| Имя пользователя для подключения к почтовому серверу, обязателен для заполнения
 
| <syntaxhighlight lang="json" enclose="div">
 
| <syntaxhighlight lang="json" enclose="div">
"SmtpUser": "primer@Mail.com"
+
"SmtpUser": "primer@mail.com"
 
</syntaxhighlight>
 
</syntaxhighlight>
  
|- style="vertical-align:text-top"
+
|- style="vertical-align:text-middle"
 
+
| 10
| Пароль пользователя SMTP
+
| Пароль пользователя почтового сервера, обязателен для заполнения
 
| <syntaxhighlight lang="json" enclose="div">
 
| <syntaxhighlight lang="json" enclose="div">
 
"SmtpPassword": "••••••••"
 
"SmtpPassword": "••••••••"
 
</syntaxhighlight>
 
</syntaxhighlight>
  
|- style="vertical-align:text-top"
+
|- style="vertical-align:text-middle"
 
+
| 11
| Включение SSL
+
| Активация протокола SSL (Нужно включить при использовании TLS/SSL авторизации.)
 
| <syntaxhighlight lang="json" enclose="div">
 
| <syntaxhighlight lang="json" enclose="div">
 
"EnableSSL": true
 
"EnableSSL": true
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
|}
 
|}
  
 +
[[Файл:Am 063.png|left|Внимание]]
 +
Все email-адреса, полученные из разных источников, сравниваются. Повторные email исключаются: если один и тот же адрес указан несколько раз, письмо отправляется только один раз.<br /><br />
  
Пример почтовых настроек appsettings.json для использования почты '''Google Mail'''.
 
 
<syntaxhighlight lang="json" enclose="div">
 
"Mail": {
 
    "SendAgencyReservation": true,
 
    "SendPersonalEmail": true,
 
    "ManagerPriority": "filial",
 
    "PersonalBooking": true,
 
    "AdvancedFilialChoise": false,
 
    "SendManagerMessagesToCountryEmail": false,
 
    "SubAgency": false,
 
    "Accounts": [
 
{
 
        "MailFrom": "primer@GoogleMail.com",
 
        "SmtpServer": "smtp.gmail.com",
 
        "SmtpPort": 25, //or 587
 
        "Authentication": "TLS/SSL",
 
        "SmtpUser": "GMailUser@GoogleMail.com",
 
        "SmtpPassword": "Pa$$w0rd",
 
        "DebugPurposeMail": "GMailDebugPurposeMail@GoogleMail.ru",
 
        "EnableSSL": true
 
      }
 
],
 
"Addressees": {
 
      "RcptTo": "primer@GMail.com",
 
      "AddRcptTo": "primer@GMail.com",
 
      "Visa": "primer@GMail.com",
 
      "Finance": "primer@GMail.com",
 
      "Manager": "primer@GMail.com",
 
      "AdminEmail": "primer@GMail.com",
 
      "AnkEmail": "primer@GMail.com",
 
      "AdditionalPersonalEmail": "primer@GMail.com"
 
    }
 
},
 
</syntaxhighlight>
 
<font style="color:red">'''Внимание!'''</font> Необходимо также настроить почтовый ящик '''Google Mail''':
 
* Осуществить вход в почтовый ящик '''Google Mail'''
 
* Выбрать раздел "Мой аккаунт" в списке "Приложения Google"
 
* Перейти в раздел "Безопасность и вход", ''включить'' опцию '''Ненадежные приложения разрешены'''<br /><br />
 
  
 
Пример почтовых настроек appsettings.json для использования почты '''Yandex''', если почта со своим доменным именем на yandex.
 
Пример почтовых настроек appsettings.json для использования почты '''Yandex''', если почта со своим доменным именем на yandex.
Строка 345: Строка 202:
 
         "Authentication": "TLS/SSL",
 
         "Authentication": "TLS/SSL",
 
         "SmtpUser": "primer@yandex.ru",
 
         "SmtpUser": "primer@yandex.ru",
         "SmtpPassword": "Pa$$w0rd",
+
         "SmtpPassword": "Pa$$w0rd",      
        "DebugPurposeMail": "primerDebugPurposeMail@yandex.ru",
 
 
         "EnableSSL": true
 
         "EnableSSL": true
 
       }   
 
       }   
Строка 361: Строка 217:
 
         "Authentication": "TLS/SSL",
 
         "Authentication": "TLS/SSL",
 
         "SmtpUser": "primer",
 
         "SmtpUser": "primer",
         "SmtpPassword": "Pa$$w0rd",
+
         "SmtpPassword": "Pa$$w0rd",      
        "DebugPurposeMail": "primerDebugPurposeMail",
 
 
         "EnableSSL": true
 
         "EnableSSL": true
 
       }   
 
       }   
Строка 378: Строка 233:
 
         "Authentication": "TLS/SSL",
 
         "Authentication": "TLS/SSL",
 
         "SmtpUser": "primer@mail.ru",
 
         "SmtpUser": "primer@mail.ru",
         "SmtpPassword": "Pa$$w0rd",
+
         "SmtpPassword": "Pa$$w0rd",      
        "DebugPurposeMail": "primerDebugPurposeMail@mail.ru",
 
 
         "EnableSSL": true
 
         "EnableSSL": true
 
       }   
 
       }   
Строка 387: Строка 241:
 
Для корректной работы сервиса необходимо убедиться, что доступ к конфигурационному файлу ограничен.<br />
 
Для корректной работы сервиса необходимо убедиться, что доступ к конфигурационному файлу ограничен.<br />
  
 +
==Работа с шаблонами писем==
  
 +
MailService использует шаблоны для формирования текста email-сообщений. Все используемые шаблоны описываются в конфигурационном файле ''templates.xml''. В этом файле задаются:
 +
 +
* '''class''' – логический идентификатор шаблона, используемый в коде,
 +
* '''name''' – имя файла шаблона (например, ''annulateReport.xml''),
 +
* '''format''' – формат содержимого (''plain-text'', ''html'' и т.д.).
 +
 +
Пример структуры файла '''templates.xml''':
 +
 +
<syntaxhighlight lang="xml" enclose="div">
 +
<?xml version="1.0" encoding="utf-8" ?>
 +
<templates>
 +
  <template>
 +
    <class>annulateReport</class>
 +
    <name>annulateReport.xml</name>
 +
    <format>plain-text</format>
 +
  </template>
 +
  <template>
 +
    <class>manager order report</class>
 +
    <name>manager order report_html.xml</name>
 +
    <format>plain-text</format>
 +
  </template>
 +
  ...
 +
</templates>
 +
</syntaxhighlight>
 +
 +
===Поддержка пользовательских шаблонов===
 +
 +
Если в каталоге с шаблонами присутствует файл '''templates_custom.xml''', то именно он используется вместо стандартного '''templates.xml'''.
 +
 +
Это позволяет настраивать список и поведение шаблонов без изменения стандартной сборки. При наличии файла '''templates_custom.xml''':
 +
 +
* Файл '''templates.xml''' игнорируется.
 +
* Пользователь может переопределить любые шаблоны (по классам, именам файлов, форматам).
 +
 +
;Используемые шаблоны
 +
 +
{| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse\:collapse" width="800px"
 +
|- style="background-color:#F2F2F2"
 +
! Шаблон
 +
! Назначение письма
 +
 +
 +
|- style="vertical-align\:text-middle"
 +
| manager order report.xml / manager order report_html.xml
 +
| Новая заявка от агентства (для агента и менеджера)
 +
 +
|- style="vertical-align\:text-middle"
 +
| personal order report.xml
 +
| Новая заявка от частного лица (для агента и менеджера)
 +
 +
|}
 +
<br />
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример новой заявки от агенства
 +
<div class="mw-collapsible-content">
 +
<TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="99%"><TR><TD>
 +
[[Файл:Ag 334.png]]
 +
 +
</TD></TR></TABLE>
 +
</div></div><br />
 +
 +
==Установка и удаление службы==
 
* Установка осуществляется запуском скрипта ''_Install.bat'' от имени администратора. [[Файл:Bm135.png|Запуск от имени администратора]]
 
* Установка осуществляется запуском скрипта ''_Install.bat'' от имени администратора. [[Файл:Bm135.png|Запуск от имени администратора]]
* При установке в Брандмауэре Windows создаются правила для входящих подключений для открытия порта службы поиска. [[Файл:Mb_193.png‎|Правила для входящих подключений службы поиска]]
+
* При установке в Брандмауэре Windows создаются правила для входящих подключений для открытия порта службы MailService (например TCP 7705 и UDP 7705)
 
* В Службах Windows добавляется служба ''MegatecMailService''.<br />
 
* В Службах Windows добавляется служба ''MegatecMailService''.<br />
 
[[Файл:Ag 207.png|MegatecMailService]]<br />
 
[[Файл:Ag 207.png|MegatecMailService]]<br />
  
 
* Для удаления службы кэширования необходимо запустить скрипт ''_UnInstall.bat'' от имени администратора. При этом будут удалены правила для входящих подключений.
 
* Для удаления службы кэширования необходимо запустить скрипт ''_UnInstall.bat'' от имени администратора. При этом будут удалены правила для входящих подключений.
 +
;Настройка логирования
 +
 +
MailService поддерживает логирование событий и ошибок в консоль и/или файл. Все параметры задаются в конфигурационном файле '''appsettings.json''', в секции '''"Logger"'''.
 +
 +
{| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse\:collapse" width="800px"
 +
|- style="background-color:#F2F2F2"
 +
! №
 +
! Описание
 +
! Настройка
 +
 +
|- style="vertical-align\:text-middle"
 +
| 1
 +
| Включить логирование в консоль
 +
 +
* '''true''' – логирование в консоль активно
 +
* '''false''' – логирование в консоль отключено
 +
| <syntaxhighlight lang="json" enclose="div">
 +
  "EnableConsole": true
 +
 +
  </syntaxhighlight>
 +
 +
|- style="vertical-align\:text-middle"
 +
| 2
 +
| Путь к файлу логов.
 +
Если путь не указан (пустая строка), лог-файл не создается.
 +
| <syntaxhighlight lang="json" enclose="div">
 +
"FilePath": "" </syntaxhighlight>
 +
 +
|- style="vertical-align\:text-middle"
 +
| 3
 +
| Максимальный размер лог-файла в мегабайтах.
 +
При достижении лимита файл архивируется, и создается новый.
 +
| <syntaxhighlight lang="json" enclose="div">
 +
"MaxLogFileSize": 10 </syntaxhighlight>
 +
 +
|- style="vertical-align\:text-middle"
 +
| 4
 +
| Количество хранимых старых лог-файлов.
 +
Старые архивы удаляются при превышении лимита.
 +
| <syntaxhighlight lang="json" enclose="div">
 +
"MaxOldLogFilesCount": 30 </syntaxhighlight>
 +
|}
 +
 +
Пример секции '''"Logger"''' в '''appsettings.json''':
 +
 +
<syntaxhighlight lang="json" enclose="div">
 +
"Logger": {
 +
  "EnableConsole": true,
 +
  "FilePath": "C:\\Logs\\mailservice.log",
 +
  "MaxLogFileSize": 10,
 +
  "MaxOldLogFilesCount": 30
 +
}
 +
</syntaxhighlight>
 +
 +
<font style="color:red">'''Важно!'''</font> При запуске службы, если обязательные параметры конфигурации отсутствуют или некорректны, ошибки выводятся в лог и консоль (при активном логировании).

Текущая версия на 13:26, 11 августа 2025

Введение

MailService – это служба для отправки email-уведомлений и сообщений, формируемых в процессе бронирования туров. Сервис поддерживает очередь отправки, работу с шаблонами, исключение повторной отправки на одинаковые адреса, логирование и приоритетное использование пользовательских шаблонов с суффиксом _custom.

Установка службы MailService

  • Скопировать папку MailService из дистрибутива на сервер приложений.
  • Указать настройки MailServiceUrl – адрес сервиса отправки сообщений в Megateс.TourSearchOwin.exe.config службы TourSearchOwin. При заполнении данной настройки – письма через Мастер-Web больше не отправляются. За отправку начинает отвечать служба MailService.
  • Включить MailServiceLogger – логгер отправки сообщений в Megateс.TourSearchOwin.exe.config службы TourSearchOwin
  • Перед установкой необходимо настроить конфигурационный файл appsettings.json.

Настройка службы MailService

В разделе Install конфигурационного файла задаются параметры установки и адреса службы MailService.

Описание Настройка
1 Название службы (по умолчанию — MegatecMailService)
"ServiceName": "MegatecMailService"
2 Путь к службе MailService. Используется порт 7705 (рекомендуется).

Внимание!
При смене порта нужно изменить его и в _Install.bat.

"ServiceAddress": [ "http://localhost:7705" ]
3 IP-адрес, на котором будет работать MailService.
  • IPAddress.IPv6Any — слушать все доступные IPv6-интерфейсы.
  • IPAddress.Any — слушать все IPv4-интерфейсы.
  • Также можно задать конкретный IP-адрес сервера.

Важно: Указание IPAddress.IPv6Any позволяет принимать запросы на всех интерфейсах по протоколу IPv6. Для IPv4 рекомендуется использовать IPAddress.Any или конкретный IP.

"IPAddress": "IPAddress.IPv6Any"
4 Список разрешённых хостов, с которых можно обращаться к MailService.
  • "*" — разрешены все хосты (небезопасно для продакшена).
  • Укажите конкретные имена хостов или домены, если необходимо ограничить доступ.

Пример: ["https://partner.tour.com", "https://office.megatec.ru"]

"AllowedHosts": "*"

Пример конфигурации:

 
{ 
 "Install": { 
   "ServiceName": "MegatecMailService", 
   "ServiceAddress": [ "http://localhost:7705" ], 
   "IPAddress": "IPAddress.IPv6Any" 
 }, 
 "AllowedHosts": "*" 
}

Внимание Убедитесь, что IP-адрес и доступ к службе ограничены только необходимыми хостами.

Настройка отправки e-mail сообщений через MailService

Из системы отправляются следующие сообщения:

Сообщение Получатели
1 Сообщение о новой заявке от агента
  • Ведущий менеджер по путевке
  • Администратор системы
  • Дополнительный e-mail для агента (AddRcptToAgent)
  • E-mail по стране
2 Сообщение о новой заявке от частного лица
  • Ведущий менеджер по путевке
  • Администратор системы
  • Дополнительный e-mail для частного лица (AddRcptToPerson)
  • E-mail по стране

Настройки почты в конфигурации

Описание Настройка
1 Адрес, с которого отправляются письма из системы бронирования, обязателен для заполнения
"MailFrom": "primer@mail.com"
2 Адрес администратора системы (можно добавить несколько адресов через « ; »), обязателен для заполнения
"RcptTo": "admin@mail.com"
3 Дополнительные e-mail адреса для получения сообщения о новой заявке от агентов (можно добавить несколько e-mail адресов через « ; »)
"AddRcptToAgent": "agent1@mail.com;agent2@mail.com"
4 Дополнительные e-mail адреса для получения сообщения о новой заявке от частного лица (можно добавить несколько e-mail адресов через « ; »)
"AddRcptToPerson": "client1@mail.com;client2@mail.com"
5 Почта для отправки отчетов об ошибках, возникающих при работе системы (можно добавить несколько почтовых ящиков через « ; »)
"AdminEmail": "errors@mail.com"
6 Почтовый сервер SMTP, обязателен для заполнения
"SmtpServer": "smtp.mail.com"
7 SMTP порт почтового сервера (по умолчанию — 25), обязателен для заполнения
"SmtpPort": 587
8 Тип авторизации на сервере: None, Base64 или TLS/SSL, обязателен для заполнения
"Authentication": "TLS/SSL"
9 Имя пользователя для подключения к почтовому серверу, обязателен для заполнения
"SmtpUser": "primer@mail.com"
10 Пароль пользователя почтового сервера, обязателен для заполнения
"SmtpPassword": "••••••••"
11 Активация протокола SSL (Нужно включить при использовании TLS/SSL авторизации.)
"EnableSSL": true
Внимание
Все email-адреса, полученные из разных источников, сравниваются. Повторные email исключаются: если один и тот же адрес указан несколько раз, письмо отправляется только один раз.


Пример почтовых настроек appsettings.json для использования почты Yandex, если почта со своим доменным именем на yandex. MailFrom и smtpUser должны совпадать, smtpPort="587".

 
{
        "MailFrom": "primer@yandex.ru",
        "SmtpServer": "smtp.yandex.ru",
        "SmtpPort": 587, //or 587
        "Authentication": "TLS/SSL",
        "SmtpUser": "primer@yandex.ru",
        "SmtpPassword": "Pa$$w0rd",        
        "EnableSSL": true
      }


Пример почтовых настроек appsettings.json для использования почты Yandex, если почта на уandex без своего домена. В качестве smtpUser берется имя пользователя из mailFrom без @yandex.ru, smtpPort="587".

 
{
        "MailFrom": "primer@yandex.ru",
        "SmtpServer": "smtp.yandex.ru",
        "SmtpPort": 587, //or 587
        "Authentication": "TLS/SSL",
        "SmtpUser": "primer",
        "SmtpPassword": "Pa$$w0rd",        
        "EnableSSL": true
      }


Пример почтовых настроек appsettings.json для использования почты Mail.ru.

 
{
        "MailFrom": "primer@mail.ru",
        "SmtpServer": "smtp.mail.ru",
        "SmtpPort": 587, //or 587
        "Authentication": "TLS/SSL",
        "SmtpUser": "primer@mail.ru",
        "SmtpPassword": "Pa$$w0rd",        
        "EnableSSL": true
      }

Внимание Для корректной работы сервиса необходимо убедиться, что доступ к конфигурационному файлу ограничен.

Работа с шаблонами писем

MailService использует шаблоны для формирования текста email-сообщений. Все используемые шаблоны описываются в конфигурационном файле templates.xml. В этом файле задаются:

  • class – логический идентификатор шаблона, используемый в коде,
  • name – имя файла шаблона (например, annulateReport.xml),
  • format – формат содержимого (plain-text, html и т.д.).

Пример структуры файла templates.xml:

<?xml version="1.0" encoding="utf-8" ?> 
<templates>
  <template>
    <class>annulateReport</class>
    <name>annulateReport.xml</name>
    <format>plain-text</format>
  </template>
  <template>
    <class>manager order report</class>
    <name>manager order report_html.xml</name>
    <format>plain-text</format>
  </template>
  ...
</templates>

Поддержка пользовательских шаблонов

Если в каталоге с шаблонами присутствует файл templates_custom.xml, то именно он используется вместо стандартного templates.xml.

Это позволяет настраивать список и поведение шаблонов без изменения стандартной сборки. При наличии файла templates_custom.xml:

  • Файл templates.xml игнорируется.
  • Пользователь может переопределить любые шаблоны (по классам, именам файлов, форматам).
Используемые шаблоны
Шаблон Назначение письма


manager order report.xml / manager order report_html.xml Новая заявка от агентства (для агента и менеджера)
personal order report.xml Новая заявка от частного лица (для агента и менеджера)


развернутьПример новой заявки от агенства


Установка и удаление службы

  • Установка осуществляется запуском скрипта _Install.bat от имени администратора. Запуск от имени администратора
  • При установке в Брандмауэре Windows создаются правила для входящих подключений для открытия порта службы MailService (например TCP 7705 и UDP 7705)
  • В Службах Windows добавляется служба MegatecMailService.

MegatecMailService

  • Для удаления службы кэширования необходимо запустить скрипт _UnInstall.bat от имени администратора. При этом будут удалены правила для входящих подключений.
Настройка логирования

MailService поддерживает логирование событий и ошибок в консоль и/или файл. Все параметры задаются в конфигурационном файле appsettings.json, в секции "Logger".

Описание Настройка
1 Включить логирование в консоль
  • true – логирование в консоль активно
  • false – логирование в консоль отключено
  "EnableConsole": true
2 Путь к файлу логов.

Если путь не указан (пустая строка), лог-файл не создается.

"FilePath": ""
3 Максимальный размер лог-файла в мегабайтах.

При достижении лимита файл архивируется, и создается новый.

"MaxLogFileSize": 10
4 Количество хранимых старых лог-файлов.

Старые архивы удаляются при превышении лимита.

"MaxOldLogFilesCount": 30

Пример секции "Logger" в appsettings.json:

"Logger": {
  "EnableConsole": true,
  "FilePath": "C:\\Logs\\mailservice.log",
  "MaxLogFileSize": 10,
  "MaxOldLogFilesCount": 30
}

Важно! При запуске службы, если обязательные параметры конфигурации отсутствуют или некорректны, ошибки выводятся в лог и консоль (при активном логировании).