Skip to content

Um simples consumidor de emails em go que pega as mensagens do RabbitMQ, os anexos do Minio e envia tudo formatado para um servidor SMTP.

License

Notifications You must be signed in to change notification settings

thiago-felipe-99/mail

Repository files navigation

Descrição

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

Como Rodar

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.

Como Rodar Em Ambiente de Desenvolvimento

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

Objetivos Publisher

  • 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

Objetivos Consumer

  • 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

Métricas Publisher

  • Expor as métricas no caminho /metrics
  • Pegar métrica de uso por caminho da API

Métricas Consumer

  • 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

About

Um simples consumidor de emails em go que pega as mensagens do RabbitMQ, os anexos do Minio e envia tudo formatado para um servidor SMTP.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages