Микросервис для рассылки email сообщений на разные адреса.
Написать на Go небольшой сервис отправки имейл рассылок. Возможности сервиса:
- Отправка рассылок с использованием html макета и списка подписчиков.
- Отправка отложенных рассылок.
- Использование переменных в макете рассылки. (Пример: имейл получателя, имейл отправителя, текст сообщения)
- Отслеживание открытий писем.
- Golang
- PostgreSQL(две таблицы: для хранения информации о всех сообщениях отправленных; для хранения email адресов пользователей, которым должна прийти рассылка)
- Celery(для отложенной отправки писем)
Перед тем, как запускать файл main.go, который запустит весь микросервис, необходимо создать таблицы в PostgreSQL
CREATE TABLE mail_table(
recipient TEXT not null,
message_id INT GENERATED ALWAYS AS IDENTITY,
message TEXT not null,
isRead bool DEFAULT false
);
CREATE TABLE users_email_table(
email_id INT GENERATED ALWAYS AS IDENTITY,
email TEXT NOT NULL
);
Также, для работы с Celery нам необходимо его запустить. Переходим в папку celerySender Запускаем скрипт воркера
python3 worker.py
После этого, запускаем воркер Celery для взаимодействия с ним
celery -A worker worker --loglevel=debug --without-heartbeat --without-mingle
Теперь переходим в папку проекта и запускаем main.go файл. После его запуска, в Celery и users_email_table будут записаны заданные по дефолту начальные условия, чтобы из сервисов можно было отправлять данные на сервер. Начальные условия хранятся в initialConditions. Начальные условия нужны для того, чтобы уже иметь какую-либо базу email'ов и push сообщения, так как в реальном проекте база пользовательских email'ов уже будет на более низких уровнях заполнена(например, при регистрации).
.
├── app # все, что связано с микросервисом лежит в данной папке
├── go.mod
├── main.go # Файл для запуска всего микросервиса
└── README.md
Более подробный разбор папки app
.
├── ...
├── app
│ ├── celerySender # данная папка осуществляет отправку отложенных сообщений на сторону "клиента" с помощью Celery
│ ├── client-mail # данная папка отвечает за сторону "клиентов", то есть в ней происходит прием и отображение
| | всех полученных данных(в нашем случае html запросов на email адрес)
│ └── models # в этой папке хранятся большинство структур микросервиса и "начальные условия"
│ └── senders # данная папка осуществляет отправку сообщений на сторону "клиента"
│ └── templates # папка с html для отрисовки и передачи между сервером и клиентом
└── ...