O objetivo desse projeto é ler a partir de uma fila do RabbitMQ as informações de um envio de email, se houver anexos pegar eles do Minio e enviar o e-mail formatado para um servidor SMTP.
Para isso foi criado 2 módulos:
- Publisher, a partir de uma API HTTP ele envia os emails para a fila do RabbitMQ
- Consumer, ele faz o envio dos emails da fila do RabbitMQ para um servidor SMTP
Para iniciar os módulos é necessário criar um arquivo .env
na raiz do projeto, tem um exemplo de .env
no arquivo env_example
, para um teste rápido pode mudar só as linha com #CHANGE_ME
.
Com o arquivo .env
criado inicie os containers com:
docker compose up -d
Ele irá iniciar todos os containers do projeto, assim podemos ver todos os caminhos da api HTTP em http://localhost:8080/swagger
.
Para rodar de uma forma mais rápida o Publisher e o Consumer podemos subir todos os continaers estáticos:
docker compose up rabbit minio prometheus grafana database createbuckets -d
E rodar separadamente o Publisher com:
make run_publisher
Ou/e rodar separadamente o Consumer com:
make run_consumer
Para rodar os lints do projeto basta executar:
make all
- Criar sistema de usuários
- Criar mecanismos de autenticação
- Fazer envio de emails
- Fazer envio de anexos
- Criar sistema de template de emails
- Criar sistema para gerenciar filas no RabbitMQ
- Criar sistema para gerenciar listas de emails
- Adicionar Swagger na API
- Ler destinatário, descrição, mensagem e caminho de anexos do email a partir de uma fila do RabbitMQ
- Fazer envio de e-mail sem anexo
- Fazer envio de e-mail com anexo
- Ler anexo do Minio
- Criar cache local de anexos
- Criar fila dos mortos, e-mails com mais X tentativas de envio
- Expor as métricas no caminho
/metrics
- Pegar métrica de uso por caminho da API
- Expor as métricas do servidor na porta
8001
- Pegar as seguintes métricas:
- Quantidade de e-mails recebidos da fila do RabbitMQ
- Quantidade de bytes recebidos da fila do RabbitMQ
- Quantidade de e-mails enviados com sucesso
- Quantidade de bytes enviados no corpo do email
- Quantidade de e-mails reenviados para a fila
- Quantidade de e-mails enviados para a fila dos mortos
- Quantidade de e-mails enviados com anexo
- Quantidade de anexos enviados
- Quantidade de bytes enviados no anexo
- Quantidade de anexos no cache local
- Quantidade de bytes no cache local
- Tempo de envio por lote de e-mails