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

Материал из Megatec
Перейти к: навигация, поиск
[досмотренная версия][досмотренная версия]
(Установка службы MailService)
Строка 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''']]
 +
 
 +
*Включить ''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="2%" |
+
! Описание
! width="50%" | Описание
+
! Настройка
! width="48%" | Настройка
 
  
 
|- style="vertical-align:text-middle"
 
|- style="vertical-align:text-middle"
 
 
| 1
 
| 1
| Название службы. По умолчанию служба будет создана с названием MegatecMailService.
+
| Название службы (по умолчанию MegatecMailService)
| <syntaxhighlight lang="json" enclose="div">  
+
| <syntaxhighlight lang="json" enclose="div">
"ServiceName": "MegatecMailService"  
+
"ServiceName": "MegatecMailService"
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
|- style="vertical-align:text-middle"
 
|- style="vertical-align:text-middle"
 
 
| 2
 
| 2
| Путь к службе MailService.  
+
| Путь к службе MailService. Используется порт 7705 (рекомендуется).
По умолчанию служба отправки сообщений использует порт ''7705''. Рекомендуется использование порта по умолчанию.
 
 
<font style="color:red">''Внимание!''</font><br />
 
<font style="color:red">''Внимание!''</font><br />
При смене порта необходимо также изменить порт в установочном скрипте _Install.bat.  
+
При смене порта нужно изменить его и в _Install.bat.
| <syntaxhighlight lang="json" enclose="div">  
+
| <syntaxhighlight lang="json" enclose="div">
"ServiceAddress": [ "http://localhost:7705" ]  
+
"ServiceAddress": [ "http://localhost:7705" ]
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
|- style="vertical-align:text-middle"
 +
| 3
 +
| IP-адрес, на котором будет работать MailService.
  
|- style="vertical-align:text-middle"
+
*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"
  
| 3
 
| IP-адрес службы
 
| <syntaxhighlight lang="json" enclose="div">
 
"IPAddress": "IPAddress.IPv6Any"
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
|- style="vertical-align:text-middle"
 
|- style="vertical-align:text-middle"
 
 
| 4
 
| 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%" |
+
! Сообщение
! width="49%" | Сообщение
+
! Получатели
! width="49%" | Получатели сообщения
 
  
 
|- style="vertical-align:text-middle"
 
|- style="vertical-align:text-middle"
 
 
| 1
 
| 1
| Уведомление о новой агентской резервации
+
| Сообщение о новой заявке от агента
| администратор системы, дополнительный email (настройка ''AddRcptTo''), email ведущего менеджера (если указана настройка "ManagerPriority": "filial")
+
|  
 +
*Ведущий менеджер по путевке
 +
*Администратор системы
 +
*Дополнительный e-mail для агента (AddRcptToAgent)
 +
*E-mail по [[Мастер-Тур(15):Страны|стране]]
  
 
|- style="vertical-align:text-middle"
 
|- style="vertical-align:text-middle"
 
 
| 2
 
| 2
| Уведомление о персональном бронировании
+
| Сообщение о новой заявке от частного лица
| администратор системы, дополнительный email (настройка ''AddRcptTo''), email ведущего менеджера (если указана настройка "ManagerPriority": "filial")
+
|  
 
+
* Ведущий менеджер по путевке
|- style="vertical-align:text-middle"
+
* Администратор системы
 
+
* Дополнительный e-mail для частного лица (AddRcptToPerson)
| 3
+
* E-mail по [[Мастер-Тур(15):Страны|стране]]
| Сообщения для менеджера
 
| email ведущего менеджера (если указана настройка "ManagerPriority": "filial")
 
 
 
|- style="vertical-align:text-middle"
 
 
 
| 4
 
| Уведомление об ошибке
 
| Почта для отправки ошибок и уведомлений ''AdminEmail''
 
 
 
 
|}
 
|}
  
+
===Настройки почты в конфигурации===
 
 
 
 
;Основные параметры конфигурации для MailService
 
 
 
{| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse" width="800px"
 
 
 
|- style="background-color:#F2F2F2"
 
 
 
! width="2%" | №
 
! width="50%" | Описание
 
! width="48%" | Настройка
 
 
 
|- style="vertical-align:text-middle"
 
 
 
| 1
 
| Для отправки письма о бронировании покупателю, письмо отправляется на e-mail представителя, указанный в поле US_EMAIL из таблицы [DUP_USER]
 
*'''false''' – письма не отправляются
 
*'''true''' – письма отправляются
 
| <syntaxhighlight lang="xml" enclose="div">
 
"SendAgencyReservation": true,
 
</syntaxhighlight>
 
 
 
|- style="vertical-align:text-middle"
 
 
 
| 2
 
| Настройка, включающая отправку письма о новом бронировании частному лицу. При включенной настройке частнику отправляется письмо из шаблона templates/personal order report.xml.
 
*'''false''' – письма не отправляются
 
*'''true''' – письма отправляются
 
| <syntaxhighlight lang="xml" enclose="div">
 
"SendPersonalEmail": true,
 
</syntaxhighlight>
 
 
 
|- style="vertical-align:text-middle"
 
 
 
| 3
 
| Определение email почты ведущего менеджера по путевке.
 
*'''partner''' – ведущий менеджер по партнеру;
 
*'''filial''' – ведущий менеджер по филиалу (при включенной настройке useFilialChoice);
 
*'''tour''' или пустое значение или отсутствие настройки — ведущий менеджер по туру.
 
| <syntaxhighlight lang="xml" enclose="div">
 
"ManagerPriority": "filial",
 
</syntaxhighlight>
 
 
 
 
 
 
 
|- style="vertical-align:text-middle"
 
 
 
| 4
 
| Настройка, определяющая необходимость отправки копии письма с примечанием по заявке на e-mail по стране
 
*'''true''' – отправлять копию письма с сообщением по заявке на e-mail по стране
 
*'''false''' или отсутствие настройки – письмо с сообщением по заявке на e-mail по стране не отправляется
 
| <syntaxhighlight lang="xml" enclose="div">
 
"SendManagerMessagesToCountryEmail": false,
 
</syntaxhighlight>
 
 
 
|}
 
 
 
В таблице приведено описание почтовых настроек, которые должны быть заданы для работы '''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="2%" |
+
! Описание
! width="50%" | Описание
+
! Настройка
! width="48%" | Настройка
 
  
 
|- style="vertical-align:text-middle"
 
|- style="vertical-align:text-middle"
 
 
| 1
 
| 1
 
| Адрес, с которого отправляются письма из системы бронирования, обязателен для заполнения
 
| Адрес, с которого отправляются письма из системы бронирования, обязателен для заполнения
 
| <syntaxhighlight lang="json" enclose="div">
 
| <syntaxhighlight lang="json" enclose="div">
"MailFrom": "primer@Mail.com"
+
"MailFrom": "primer@mail.com"
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
|- style="vertical-align:text-middle"
 
|- style="vertical-align:text-middle"
 
 
| 2
 
| 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-middle"
 
|- style="vertical-align:text-middle"
 
 
| 3
 
| 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-middle"
 
|- style="vertical-align:text-middle"
 
+
| 4
| 5
+
| Дополнительные e-mail адреса для получения сообщения о новой заявке от частного лица (можно добавить несколько e-mail адресов через « ; »)
| Почта для отправки отчетов об ошибках, возникающих при работе системы
 
 
| <syntaxhighlight lang="json" enclose="div">
 
| <syntaxhighlight lang="json" enclose="div">
"AdminEmail": "primer@Mail.com"
+
"AddRcptToPerson": "client1@mail.com;client2@mail.com"
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
  
 
|- style="vertical-align:text-middle"
 
|- style="vertical-align:text-middle"
 
+
| 5
| 7
+
| Почта для отправки отчетов об ошибках, возникающих при работе системы (можно добавить несколько почтовых ящиков через « ; »)
| Настройка, определяющая e-mail, на который будут оправляться копии писем о новом бронировании от частников
 
 
| <syntaxhighlight lang="json" enclose="div">
 
| <syntaxhighlight lang="json" enclose="div">
"AdditionalPersonalEmail": "primer@Mail.com"
+
"AdminEmail": "errors@mail.com"
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
|- style="vertical-align:text-middle"
 
|- style="vertical-align:text-middle"
 
+
| 6
| 7
 
 
| Почтовый сервер SMTP, обязателен для заполнения
 
| Почтовый сервер SMTP, обязателен для заполнения
 
| <syntaxhighlight lang="json" enclose="div">
 
| <syntaxhighlight lang="json" enclose="div">
"SmtpServer": "smtp.yandex.ru"
+
"SmtpServer": "smtp.mail.com"
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
|- style="vertical-align:text-middle"
 
|- style="vertical-align:text-middle"
 
+
| 7
| 8
+
| SMTP порт почтового сервера (по умолчанию — 25), обязателен для заполнения
| SMTP порт почтового сервера (по умолчанию — 587), обязателен для заполнения
 
 
| <syntaxhighlight lang="json" enclose="div">
 
| <syntaxhighlight lang="json" enclose="div">
 
"SmtpPort": 587
 
"SmtpPort": 587
Строка 239: Строка 161:
  
 
|- style="vertical-align:text-middle"
 
|- style="vertical-align:text-middle"
 
+
| 8
| 9
 
 
| Тип авторизации на сервере: None, Base64 или TLS/SSL, обязателен для заполнения
 
| Тип авторизации на сервере: None, Base64 или TLS/SSL, обязателен для заполнения
 
| <syntaxhighlight lang="json" enclose="div">
 
| <syntaxhighlight lang="json" enclose="div">
Строка 247: Строка 168:
  
 
|- style="vertical-align:text-middle"
 
|- style="vertical-align:text-middle"
 
+
| 9
| 10
 
 
| Имя пользователя для подключения к почтовому серверу, обязателен для заполнения
 
| Имя пользователя для подключения к почтовому серверу, обязателен для заполнения
 
| <syntaxhighlight lang="json" enclose="div">
 
| <syntaxhighlight lang="json" enclose="div">
"SmtpUser": "primer@Mail.com"
+
"SmtpUser": "primer@mail.com"
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
|- style="vertical-align:text-middle"
 
|- style="vertical-align:text-middle"
 
+
| 10
| 11
+
| Пароль пользователя почтового сервера, обязателен для заполнения
|Пароль пользователя почтового сервера, обязателен для заполнения
 
 
| <syntaxhighlight lang="json" enclose="div">
 
| <syntaxhighlight lang="json" enclose="div">
 
"SmtpPassword": "••••••••"
 
"SmtpPassword": "••••••••"
Строка 263: Строка 182:
  
 
|- style="vertical-align:text-middle"
 
|- style="vertical-align:text-middle"
 
+
| 11
| 12
 
 
| Активация протокола SSL (Нужно включить при использовании TLS/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'''.
 
Пример почтовых настроек appsettings.json для использования почты '''Google Mail'''.
  
<syntaxhighlight lang="json" enclose="div">  
+
<syntaxhighlight lang="json" enclose="div">
"Mail": {
+
   {
    "SendAgencyReservation": true,
 
    "SendPersonalEmail": true,
 
    "ManagerPriority": "filial",    
 
    "Accounts": [
 
{
 
 
         "MailFrom": "primer@GoogleMail.com",
 
         "MailFrom": "primer@GoogleMail.com",
 
         "SmtpServer": "smtp.gmail.com",
 
         "SmtpServer": "smtp.gmail.com",
Строка 287: Строка 201:
 
         "Authentication": "TLS/SSL",
 
         "Authentication": "TLS/SSL",
 
         "SmtpUser": "GMailUser@GoogleMail.com",
 
         "SmtpUser": "GMailUser@GoogleMail.com",
         "SmtpPassword": "Pa$$w0rd",
+
         "SmtpPassword": "Pa$$w0rd",      
        "DebugPurposeMail": "GMailDebugPurposeMail@GoogleMail.ru",
 
 
         "EnableSSL": true
 
         "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>
 
</syntaxhighlight>
 
<font style="color:red">'''Внимание!'''</font> Необходимо также настроить почтовый ящик '''Google Mail''':
 
<font style="color:red">'''Внимание!'''</font> Необходимо также настроить почтовый ящик '''Google Mail''':
Строка 318: Строка 220:
 
         "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
 
       }   
 
       }   
Строка 334: Строка 235:
 
         "Authentication": "TLS/SSL",
 
         "Authentication": "TLS/SSL",
 
         "SmtpUser": "primer",
 
         "SmtpUser": "primer",
         "SmtpPassword": "Pa$$w0rd",
+
         "SmtpPassword": "Pa$$w0rd",      
        "DebugPurposeMail": "primerDebugPurposeMail",
 
 
         "EnableSSL": true
 
         "EnableSSL": true
 
       }   
 
       }   
Строка 351: Строка 251:
 
         "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
 
       }   
 
       }   
Строка 362: Строка 261:
  
  
 +
==Работа с шаблонами писем==
 +
 +
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"
 +
| annulateReport.xml
 +
| Сообщение об аннуляции путевки
 +
 +
|- style="vertical-align\:text-middle"
 +
| annulateRequest.xml
 +
| Запрос на аннуляцию путевки
 +
 +
|- style="vertical-align\:text-middle"
 +
| changetouristname.xml
 +
| Изменение данных туристов
 +
 +
|- style="vertical-align\:text-middle"
 +
| manager order report.xml / manager order report\_html.xml
 +
| Новая заявка от агентства (для агента и менеджера)
 +
 +
|- style="vertical-align\:text-middle"
 +
| messageToManager.xml
 +
| Примечание по заявке
 +
 +
|- style="vertical-align\:text-middle"
 +
| passwordrecovery.xml
 +
| Восстановление пароля
 +
 +
|- style="vertical-align\:text-middle"
 +
| personal order report.xml
 +
| Новая заявка от частного лица (для агента и менеджера)
 +
 +
|- style="vertical-align\:text-middle"
 +
| siteError.xml
 +
| Ошибка в системе
 +
 +
|}
 +
 +
==Установка и удаление службы==
 
* Установка осуществляется запуском скрипта ''_Install.bat'' от имени администратора. [[Файл:Bm135.png|Запуск от имени администратора]]
 
* Установка осуществляется запуском скрипта ''_Install.bat'' от имени администратора. [[Файл:Bm135.png|Запуск от имени администратора]]
 
* При установке в Брандмауэре Windows создаются правила для входящих подключений для открытия порта службы MailService (например TCP 7705 и UDP 7705)
 
* При установке в Брандмауэре Windows создаются правила для входящих подключений для открытия порта службы MailService (например TCP 7705 и UDP 7705)
Строка 368: Строка 345:
  
 
* Для удаления службы кэширования необходимо запустить скрипт ''_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> При запуске службы, если обязательные параметры конфигурации отсутствуют или некорректны, ошибки выводятся в лог и консоль (при активном логировании).

Версия 22:34, 7 июля 2025

Введение

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

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

  • Скопировать папку MailService из дистрибутива на сервер приложений.
  • Указать настройки MailServiceUrl – адрес сервиса отправки сообщений в Megateс.TourSearchOwin.exe.config службы TourSearchOwin
  • Включить 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 для использования почты Google Mail.

   {
        "MailFrom": "primer@GoogleMail.com",
        "SmtpServer": "smtp.gmail.com",
        "SmtpPort": 25, //or 587
        "Authentication": "TLS/SSL",
        "SmtpUser": "GMailUser@GoogleMail.com",
        "SmtpPassword": "Pa$$w0rd",        
        "EnableSSL": true
      }

Внимание! Необходимо также настроить почтовый ящик Google Mail:

  • Осуществить вход в почтовый ящик Google Mail
  • Выбрать раздел "Мой аккаунт" в списке "Приложения Google"
  • Перейти в раздел "Безопасность и вход", включить опцию Ненадежные приложения разрешены

Пример почтовых настроек 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 игнорируется.
  • Пользователь может переопределить любые шаблоны (по классам, именам файлов, форматам).
Используемые шаблоны
Шаблон Назначение письма
annulateReport.xml Сообщение об аннуляции путевки
annulateRequest.xml Запрос на аннуляцию путевки
changetouristname.xml Изменение данных туристов
manager order report.xml / manager order report\_html.xml Новая заявка от агентства (для агента и менеджера)
messageToManager.xml Примечание по заявке
passwordrecovery.xml Восстановление пароля
personal order report.xml Новая заявка от частного лица (для агента и менеджера)
siteError.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
}

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