Мастер-Тур(15):MailService

Материал из Megatec
Перейти к: навигация, поиск

Введение

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 для использования почты 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
}

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