Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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: about 2 months ago
JSON representation

Spring web application for Email Service with clean architecture with Simple Java Mail and Mailtrap

Awesome Lists containing this project

README

        

# Spring Email Service With Clean Architecture šŸ“©

![Java](https://img.shields.io/badge/java-%23ED8B00.svg?style=for-the-badge&logo=openjdk&logoColor=white)
![Spring](https://img.shields.io/badge/spring-%236DB33F.svg?style=for-the-badge&logo=spring&logoColor=white)

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