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