Мастер-Тур(15):MailService — различия между версиями
[досмотренная версия] | [досмотренная версия] |
Gavrilov (обсуждение | вклад) (→Установка службы MailService) |
Gavrilov (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
==Введение== | ==Введение== | ||
− | MailService – это | + | MailService – это служба для отправки email-уведомлений и сообщений, формируемых в процессе бронирования туров. Сервис поддерживает очередь отправки, работу с шаблонами, исключение повторной отправки на одинаковые адреса, логирование и приоритетное использование пользовательских шаблонов с суффиксом _custom. |
==Установка службы MailService== | ==Установка службы 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" | ||
− | + | ! № | |
− | ! | + | ! Описание |
− | ! | + | ! Настройка |
− | ! | ||
|- style="vertical-align:text-middle" | |- style="vertical-align:text-middle" | ||
− | |||
| 1 | | 1 | ||
− | | Название службы | + | | Название службы (по умолчанию — 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 (рекомендуется). |
− | |||
<font style="color:red">''Внимание!''</font><br /> | <font style="color:red">''Внимание!''</font><br /> | ||
− | При смене порта | + | При смене порта нужно изменить его и в _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. | ||
− | + | *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" | ||
− | |||
− | |||
− | |||
− | |||
</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": "*" | |
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
|} | |} | ||
− | Пример конфигурации | + | Пример конфигурации: |
− | + | <syntaxhighlight lang="json" enclose="div"> | |
− | <syntaxhighlight lang="json" enclose="div"> | + | { |
− | { | + | "Install": { |
− | + | "ServiceName": "MegatecMailService", | |
− | + | "ServiceAddress": [ "http://localhost:7705" ], | |
− | + | "IPAddress": "IPAddress.IPv6Any" | |
− | + | }, | |
− | + | "AllowedHosts": "*" | |
− | + | } | |
− | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
[[Файл:Am 063.png|Внимание]] | [[Файл:Am 063.png|Внимание]] | ||
− | Убедитесь, что | + | Убедитесь, что IP-адрес и доступ к службе ограничены только необходимыми хостами. |
+ | ===Настройка отправки e-mail сообщений через 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" | ||
− | + | ! № | |
− | ! | + | ! Сообщение |
− | ! | + | ! Получатели |
− | ! | ||
|- style="vertical-align:text-middle" | |- style="vertical-align:text-middle" | ||
− | |||
| 1 | | 1 | ||
− | | | + | | Сообщение о новой заявке от агента |
− | | | + | | |
+ | *Ведущий менеджер по путевке | ||
+ | *Администратор системы | ||
+ | *Дополнительный e-mail для агента (AddRcptToAgent) | ||
+ | *E-mail по [[Мастер-Тур(15):Страны|стране]] | ||
|- style="vertical-align:text-middle" | |- style="vertical-align:text-middle" | ||
− | |||
| 2 | | 2 | ||
− | | | + | | Сообщение о новой заявке от частного лица |
− | | | + | | |
− | + | * Ведущий менеджер по путевке | |
− | + | * Администратор системы | |
− | + | * Дополнительный e-mail для частного лица (AddRcptToPerson) | |
− | + | * E-mail по [[Мастер-Тур(15):Страны|стране]] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | | | ||
− | |||
|} | |} | ||
− | + | ===Настройки почты в конфигурации=== | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{| 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" | ||
− | + | ! № | |
− | ! | + | ! Описание |
− | ! | + | ! Настройка |
− | ! | ||
|- style="vertical-align:text-middle" | |- style="vertical-align:text-middle" | ||
− | |||
| 1 | | 1 | ||
| Адрес, с которого отправляются письма из системы бронирования, обязателен для заполнения | | Адрес, с которого отправляются письма из системы бронирования, обязателен для заполнения | ||
| <syntaxhighlight lang="json" enclose="div"> | | <syntaxhighlight lang="json" enclose="div"> | ||
− | "MailFrom": "primer@ | + | "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": " | + | "RcptTo": "admin@mail.com" |
</syntaxhighlight> | </syntaxhighlight> | ||
|- style="vertical-align:text-middle" | |- style="vertical-align:text-middle" | ||
− | |||
| 3 | | 3 | ||
− | | | + | | Дополнительные e-mail адреса для получения сообщения о новой заявке от агентов (можно добавить несколько e-mail адресов через « ; ») |
| <syntaxhighlight lang="json" enclose="div"> | | <syntaxhighlight lang="json" enclose="div"> | ||
− | " | + | "AddRcptToAgent": "agent1@mail.com;agent2@mail.com" |
</syntaxhighlight> | </syntaxhighlight> | ||
|- style="vertical-align:text-middle" | |- style="vertical-align:text-middle" | ||
− | + | | 4 | |
− | | | + | | Дополнительные e-mail адреса для получения сообщения о новой заявке от частного лица (можно добавить несколько e-mail адресов через « ; ») |
− | | | ||
| <syntaxhighlight lang="json" enclose="div"> | | <syntaxhighlight lang="json" enclose="div"> | ||
− | " | + | "AddRcptToPerson": "client1@mail.com;client2@mail.com" |
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
|- style="vertical-align:text-middle" | |- style="vertical-align:text-middle" | ||
− | + | | 5 | |
− | | | + | | Почта для отправки отчетов об ошибках, возникающих при работе системы (можно добавить несколько почтовых ящиков через « ; ») |
− | | | ||
| <syntaxhighlight lang="json" enclose="div"> | | <syntaxhighlight lang="json" enclose="div"> | ||
− | " | + | "AdminEmail": "errors@mail.com" |
</syntaxhighlight> | </syntaxhighlight> | ||
|- style="vertical-align:text-middle" | |- style="vertical-align:text-middle" | ||
− | + | | 6 | |
− | | | ||
| Почтовый сервер SMTP, обязателен для заполнения | | Почтовый сервер SMTP, обязателен для заполнения | ||
| <syntaxhighlight lang="json" enclose="div"> | | <syntaxhighlight lang="json" enclose="div"> | ||
− | "SmtpServer": "smtp. | + | "SmtpServer": "smtp.mail.com" |
</syntaxhighlight> | </syntaxhighlight> | ||
|- style="vertical-align:text-middle" | |- style="vertical-align:text-middle" | ||
− | + | | 7 | |
− | | | + | | SMTP порт почтового сервера (по умолчанию — 25), обязателен для заполнения |
− | | SMTP порт почтового сервера (по умолчанию | ||
| <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 | |
− | | | ||
| Тип авторизации на сервере: 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 | |
− | | | ||
| Имя пользователя для подключения к почтовому серверу, обязателен для заполнения | | Имя пользователя для подключения к почтовому серверу, обязателен для заполнения | ||
| <syntaxhighlight lang="json" enclose="div"> | | <syntaxhighlight lang="json" enclose="div"> | ||
− | "SmtpUser": "primer@ | + | "SmtpUser": "primer@mail.com" |
</syntaxhighlight> | </syntaxhighlight> | ||
|- style="vertical-align:text-middle" | |- style="vertical-align:text-middle" | ||
− | + | | 10 | |
− | | | + | | Пароль пользователя почтового сервера, обязателен для заполнения |
− | |Пароль пользователя почтового сервера, обязателен для заполнения | ||
| <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 | |
− | | | ||
| Активация протокола 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"> |
− | + | { | |
− | |||
− | |||
− | |||
− | |||
− | { | ||
"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", |
− | |||
"EnableSSL": true | "EnableSSL": true | ||
} | } | ||
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</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", |
− | |||
"EnableSSL": true | "EnableSSL": true | ||
} | } | ||
Строка 334: | Строка 235: | ||
"Authentication": "TLS/SSL", | "Authentication": "TLS/SSL", | ||
"SmtpUser": "primer", | "SmtpUser": "primer", | ||
− | "SmtpPassword": "Pa$$w0rd", | + | "SmtpPassword": "Pa$$w0rd", |
− | |||
"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", |
− | |||
"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 (рекомендуется).
Внимание! |
"ServiceAddress": [ "http://localhost:7705" ]
|
3 | IP-адрес, на котором будет работать MailService.
Важно: Указание 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 | Сообщение о новой заявке от агента |
|
2 | Сообщение о новой заявке от частного лица |
|
Настройки почты в конфигурации
№ | Описание | Настройка |
---|---|---|
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.
- Для удаления службы кэширования необходимо запустить скрипт _UnInstall.bat от имени администратора. При этом будут удалены правила для входящих подключений.
- Настройка логирования
MailService поддерживает логирование событий и ошибок в консоль и/или файл. Все параметры задаются в конфигурационном файле appsettings.json, в секции "Logger".
№ | Описание | Настройка |
---|---|---|
1 | Включить логирование в консоль
|
"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
}
Важно! При запуске службы, если обязательные параметры конфигурации отсутствуют или некорректны, ошибки выводятся в лог и консоль (при активном логировании).