Skip to content

odhs/email-service

Repository files navigation

📬 Email Service - Microsserviço em Java Springboot

Versão 1.0.0

O README.md completo encontra-se em docs/README.md.

Este projeto é um microsserviço backend de uma API Restfull desenvolvida utilizando Java Spring Boot com conexão com o Amazon Simple Email Service (SES) ou Mailgun para envio de emails. Seguindos os conceitos da Arquitetura Limpa (Clean Architecture), permitindo flexibilidade para trocar o provedor de email.

Essa aplicação recebe um JSON por requisição POST com parâmetros para disparar um email e envia email usando um provedor de email.

Este sistema fornece uma abstração entre dois provedores de serviços de e-mail diferentes, se um dos serviços cair,o email é rapidamente enviado para outro provedor sem afetar os clientes.


📋 Funcionalidades

  • Envio de emails utilizando o Amazon SES ou Mailgun
  • Estrutura modular baseada em Arquitetura Limpa (Clean Architecture).
  • Suporte para múltiplos provedores de email (ex.: SendGrid, Mailgun, etc.).
  • Configuração de credenciais via variáveis de ambiente.

🌐 API Endpoints

A API fornece os seguintes endpoints:

POST SendEmail

POST /api/email/send –  Enviar um novo e-mail
{
  "to": "[email protected]",
  "subject": "Assunto do Email",
  "body": "Body do email"
}

🛠️ Tecnologias Utilizadas


🚀 Como Executar o Projeto

Pré-requisitos

  • Java 24 ou superior instalado. Java 24 Download.
  • Maven instalado ou uma IDE como VSCode (com Extensões para SpringBoot) ou IntelliJ IDEA
  • Conta na AWS com o serviço SES configurado.
  • Configuração das variáveis de ambiente para as credenciais da AWS.

Configuração das Variáveis de Ambiente

As variáveis de sistema necessárias são:

  • AWS_ACCESS_KEY_ID: Chave de acesso da AWS.
  • AWS_SECRET_KEY: Chave secreta da AWS.
  • AWS_REGION: Região onde o serviço SES está configurado (ex.: us-east-1).
  • EMAIL_SOURCE: Endereço de email verificado no SES para envio.

Preencha as variáveis de ambiente em um arquivo .env na raiz do projeto, você pode usar o arquivo .env-sample como exemplo e renomea-lo para .env.

# AWS Credentials
AWS_ACCESS_KEY_ID=
AWS_SECRET_KEY=
AWS_REGION=us-east-1
# Email Configuration
EMAIL_SOURCE=

Ou defina as variáveis de ambiente no seu sistema:

No Windows (PowerShell)

$Env:AWS_ACCESS_KEY_ID = "sua_access_key_id"
$Env:AWS_SECRET_KEY = "sua_secret_key"
$Env:AWS_REGION = "us-east-1"
$Env:EMAIL_SOURCE = "[email protected]"

Se acaso quiser que elas tornem-se permanentes use:

setx AWS_ACCESS_KEY_ID = "sua_access_key_id"
setx AWS_SECRET_KEY = "sua_secret_key"
sext AWS_REGION = "us-east-1"
sext EMAIL_SOURCE = "[email protected]"

No Linux/macOS

export AWS_ACCESS_KEY_ID="sua_access_key_id"
export AWS_SECRET_KEY="sua_secret_key"
export AWS_REGION="us-east-1"
export EMAIL_SOURCE="[email protected]"

Executando a Aplicação

  1. Clone o repositório:

    git clone https://github.com/seu-usuario/email-service.git
    cd email-service
  2. Compile e execute o projeto com o Maven:

    mvn clean package
    java -jar target/email_service-0.0.1-SNAPSHOT.jar

📬 Testando o Envio de Email

Envie uma requisição POST para o endpoint /api/v1/email/send com o seguinte corpo:

{
  "to": "[email protected]",
  "subject": "Teste de Email",
  "body": "Este é um email de teste enviado pelo microsserviço."
}

Exemplo de comando curl:

curl -X POST http://localhost:8080/api/v1/email/send \
-H "Content-Type: application/json" \
-d '{
  "to": "[email protected]",
  "subject": "Teste de Email",
  "body": "Este é um email de teste enviado pelo microsserviço."
}'

🧱 Arquitetura

O projeto segue o padrão Clean Architecture, com as seguintes camadas:

  1. Core: Contém as regras de negócio e casos de uso.
  2. Application: Implementa os casos de uso definidos no Core.
  3. Adapters: Define interfaces para comunicação com serviços externos.
  4. Infra: Implementa as interfaces dos Adapters, como o cliente AWS SES.
  5. Controllers: Exposição de endpoints REST para interação com o sistema.

Diagrama de Classes

Diagrama de Classes

Veja também o diagrama de classes feito em:

  • PlantUML

    • PNG: docs/uml/diagrama_classes.png
    • SVG: docs/uml/diagrama_classes.svg
    • Source: docs/uml/diagrama_classes.wsd
  • Mermaid

    • Source: docs/uml/diagrama_classes.nmd

📝 TODO

  • Adicionar suporte a múltiplos provedores de email:

    • Implementar integração com provedores como SendGrid, Mailgun e SparkPost.
    • Criar uma lógica de fallback para alternar automaticamente entre provedores caso um deles falhe.
    • Garantir que o serviço possa ser transferido rapidamente para outro provedor sem afetar os clientes.
    • Apresentar informação de qual serviço foi usado e se houve sucesso ou falha. Se um serviço falhar fazer fallback para o próximo e manter-se no próximo até que falhe para voltar ao primário.
  • Melhorar a cobertura de testes:

    • Adicionar testes unitários e de integração para os novos provedores.
    • Simular falhas nos provedores para validar o comportamento do fallback.
  • Documentação:

    • Atualizar a documentação para incluir instruções de configuração e uso dos novos provedores.

📖 Contributing

Contribuições são bem-vindas! Se você encontrar algum problema ou tiver sugestões de melhorias, abra uma issue ou envie um pull request para o repositório.

Ao contribuir para este projeto, siga o estilo de código existente, Conventional Commits, e envie suas alterações em uma branch separada.


📝 Licença

Este projeto está sob a licença MIT. Consulte o arquivo LICENSE para mais detalhes.

About

Java Spring Boot - Email Service Example

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages