https://github.com/brendon3578/spring-email-service-clean-architecture
Spring web application for Email Service with clean architecture with Simple Java Mail and Mailtrap
https://github.com/brendon3578/spring-email-service-clean-architecture
Last synced: 4 months ago
JSON representation
Spring web application for Email Service with clean architecture with Simple Java Mail and Mailtrap
- Host: GitHub
- URL: https://github.com/brendon3578/spring-email-service-clean-architecture
- Owner: Brendon3578
- Created: 2023-11-08T04:10:54.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-11-08T04:14:13.000Z (over 1 year ago)
- Last Synced: 2025-01-14T12:49:28.112Z (6 months ago)
- Language: Java
- Size: 66.4 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Spring Email Service With Clean Architecture š©

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.## š» Arquitetura da aplicação
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](https://www.simplejavamail.org/) 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](src/main/java/com/brendongomes/emailservice/infrastructure/simplejavamail/SimpleJavaMailSender.java) para a aplicação, com o
- Interface **EmailSenderGateway** - Define a interface (contrato) que todas as APIs externas de envio de e-mails devem implementar## š„ Testando aplicação
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**:
```json
{
"to": "Email para quem serĆ” enviado ",
"subject": "Nome do assunto",
"body": "Mensagem (body) da aplicação que pode ser um arquivo HTML
"
}
```Para testar Ʃ necessƔrio criar uma conta no e com as configuraƧƵes do mailtrap, definir as seguintes configuraƧƵes no arquivo `application.properties` localizado em `/src/main/resources`
```properties
mailtrap.username=usernameDefinidoNoMailtrap
mailtrap.password=passwordDefinidoNoMailtrap
```---
> Observação: essa aplicação foi desenvolvida seguindo o [VĆdeo da Fernanda Kipper](https://www.youtube.com/watch?v=eFgeO9M9lLw&t=462s&ab_channel=FernandaKipper%7CDev) mas com a utilização do serviƧo de e-mail Mailtrap.io, com a utilização da biblioteca Simple Java Mail
Feito com ā por Brendon Gomes