Esse projeto foi feito para ser um back-end de uma API RESTful de um serviço de envios de e-mails por meio do protocolo SMTP utilizando o Spring Boot. Ele recebe o envio do e-mail através da API e envia para um serviço externo de envio de gerenciamento de e-mails SMTP, para que então seja enviado e-mail para o destinário final.
A aplicação foi desenvolvida seguindo os princípios do Clean Architecture
/controllers/
- Camada de Controllers da aplicação RESTful- Classe EmailSenderController - É o controller RESTful da aplicação Spring
/infrastrucutre
- É o provedor do serviço de e-mail externo, implementação do serviço da biblioteca Simple Java Mail para o envio de e-mails- Classe SimpleJavaMailConfig - Guarda o objeto Mailer, é um Bean de configuração do Simple Java Mail, instanciado automaticamente pelo Spring
- Classe SimpleJavaMailSender - Disponibiliza um Service com o propósito de ser um Gateway usado na aplicação, sendo a regra de negócio para o envio de e-mails
/core/
- Diretório que guarda os Casos de Usos e regras de negócio da aplicação- Interface EmailSenderUseCase - é uma interface (contrato) de regra de negócio do serviço de envio e-mail (alto nível da aplicação), sendo também agnóstica (não depende) em relação aos outros componentes da aplicação
- Record EmailRequest - É o DTO utilizado no Body da requisição do Controller principal
/application/
- É a camada intermediaria que dialoga com os casos de usos e os serviços externos (que estão no pacote infrastructure)- Arquivo EmailSenderService - é o serviço em si que é utilizado no controller
/adapters/
- Disponibiliza interfaces que adaptam o mundo exterior (APIs externas como a classe SimpleJavaMailSender para a aplicação, com o- Interface EmailSenderGateway - Define a interface (contrato) que todas as APIs externas de envio de e-mails devem implementar
O endpoint da aplicação está em http://localhost:8080/api/email
e recebe o método POST contendo o seguinte body em arquivo json:
{
"to": "Email para quem será enviado <johndoe@email.com>",
"subject": "Nome do assunto",
"body": "<p>Mensagem (body) da aplicação que pode ser um arquivo HTML</p>"
}
Para testar é necessário criar uma conta no https://mailtrap.io e com as configurações do mailtrap, definir as seguintes configurações no arquivo application.properties
localizado em /src/main/resources
mailtrap.username=usernameDefinidoNoMailtrap
mailtrap.password=passwordDefinidoNoMailtrap
Observação: essa aplicação foi desenvolvida seguindo o Vídeo da Fernanda Kipper mas com a utilização do serviço de e-mail Mailtrap.io, com a utilização da biblioteca Simple Java Mail