Skip to content

Latest commit

 

History

History
169 lines (122 loc) · 11.8 KB

README.md

File metadata and controls

169 lines (122 loc) · 11.8 KB

Milky Mailer

Простой сервис для отправки писем по протоколу SMTP. Использует очередь сообщений RabbitMQ для получения сообщений.

Содержание

Docker Quick Start

Build the image:

docker build ./ -t milky-mailer

And run it:

docker run milky-mailer

Способы конфигурации

Consul kv

В данные момент поддерживается только конфигурация через Consul kv.

Для конфигурации через Consul kv необходимо указать следующие переменные окружения:

Переменная Описание Значение по умолчанию
CONSUL_ROOT Префикс ключей конфигурации приложения milky-mailer
CONSUL_HOST Адрес расположения консула consul.servece.consul
CONSUL_PORT Порт консула 8500

ACL токены и другие способы аутентификации не поддерживаются. Реализация планируется в ближайшем будущем.

Описание конфигурации

Здесь и далее ключи конфигурации для Consul KV указаны относительно префикса CONSUL_ROOT.

AMQP (RabbitMQ)

Ключ (для Consul KV) Описание Пример
amqp/host Адрес хоста, на котором расположен RabbitMQ 127.0.0.1
amqp/port Порт, на котором расположен RabbitMQ 5672
amqp/user Имя пользователя для подключения к RabbitMQ user
amqp/password Пароль пользователя для подключения к RabbitMQ somepassword
amqp/queue Название очереди, из которой будут получаться сообщения для отправки email
amqp/exchange Название обменника, в который будут отправляться сообщения для отправки email
amqp/virtualhost Виртуальный хост, на котором расположен RabbitMQ /

Отправители (Senders)

Можно указать несколько отправителей.

Все отправители должны быть указаны в /senders/ относительно CONSUL_ROOT.

Ключ (для Consul KV) Описание Пример
senders/<senderID>/ senderID - Уникальный идентификатор отправителя mailer-one
senders/<senderID>/host Адрес хоста, на котором расположен SMTP сервер smtp.example.com
senders/<senderID>/port Порт, на котором расположен SMTP сервер 465
senders/<senderID>/user Имя пользователя для подключения к SMTP серверу username
senders/<senderID>/password Пароль пользователя для подключения к SMTP серверу somepassword
senders/<senderID>/from E-mail адрес отправителя (указывается в From email письма) [email protected]
senders/<senderID>/tls Использовать TLS при подключении к SMTP серверу true
senders/<senderID>/from_name Имя отправителя (указывается в From email письма) Someteam corp.

Отправка сообщений

Для отправки email письма необходимо отправить сообщение в обменник. Название обменника указывается в конфигурации.

Перед отправкой сообщения необходимо убедиться, что обменник существует.

Если обменник не существует, то скорее всего milky-mailer не запущен или конфигурация указана неверно.

Пример клиента

Пример клиента, написанного на golang можно найти в репозитории milky-mailer-client.

Состав сообщения

Заголовки сообщения

Заголовок Описание Пример
To E-mail адрес получателя [email protected]
Subject Тема e-mail письма Какая-то тема письма
FromID Идентификатор отправителя согласно конфигурации mailer-one

ContentType сообщения

Указывается в соответствии с MIME типами. Поддерживается только text/plain и text/html.

Этот же тип используется для указания типа отправляемого email.

Тело сообщения

Тело сообщения используется в исходном виде для формирования email.

Expiration

Для каждого сообщения следует указывать время жизни. По истечении этого времени сообщение будет удалено из очереди, если оно не было отправлено получателю.

Указывается в секундах.

В случае, если время жизни не указано, оно не будет установлено и сообщение будет жить в очереди до тех пор, пока не будет отправлено получателю.

Настоятельно рекомендуется указывать время жизни для каждого сообщения, исходя из ваших требований.

Приоритет сообщения

Приоритет сообщения указывается в диапазоне от 0 до 255. Чем выше приоритет, тем выше вероятность того, что сообщение будет отправлено раньше других.

Рекомендуется указывать приоритет для каждого сообщения, исходя из ваших требований.

Сообщения, у которых не указан приоритет, будут иметь самый низкий приоритет.

Пример возможного распределения приоритетов

Приоритет Описание
13 Коды подтверждения регистрации и сбора пароля
12 Ответы технической поддержки
9-11 Уведомления безопасности (вход в систему, смена пароля, почты и т.п.)
8 Квитанция на оплату услуг/товара
7 Чек по оплате
6 Запрос на изменение (прав и т.п.)
3-5 Прочие уведомления
0-2 Новостная рассылка

В случаях, когда указано несколько возможных приоритетов для задачи, то можно сделать градацию приоритетов для неё:

  • 0 - низкий приоритет (Low)
  • 1 - нормальный приоритет (Normal)
  • 2 - высокий приоритет (High)

Дополнительные идентификаторы для отладки

Для упрощения отладки и можно указать некоторые дополнительные параметры. Их наличие упростит отладку и поиск связанных логов в случае возникновения ошибок.

  • MessageId - уникальный идентификатор сообщения в виде строки.
  • AppId - идентификатор приложения, которое отправило сообщение.
  • Timestamp - время отправки сообщения в формате Unix timestamp.

Ограничения

  • Вложения (Attachments) не поддерживаются.
  • Поддерживается только один получатель (To).
  • Не поддерживается копия (CC) и скрытая копия (BCC).
  • Не поддерживается подтверждение доставки (Delivery Status Notification).
  • Не поддерживается Reply-To.
  • И многое другое, поддержка которого не указана в документации.