Loading repository data…
Loading repository data…
CesarAVB / repository
Microserviço Spring Boot para envio de emails via SMTP. Tecnologias: Java 21, PostgreSQL, RabbitMQ, Flyway, Swagger/OpenAPI, LOG4J2, Lombok e Maven.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Microserviço desenvolvido em Spring Boot para envio de emails via SMTP, com persistência do histórico de envios em banco de dados PostgreSQL.
Configure as seguintes variáveis de ambiente para o profile prod:
# Servidor
PORT=8080
# PostgreSQL
PGHOST=seu-host-postgresql
PGPORT=5432
PGDATABASE=nome-do-banco
PGUSER=usuario
PGPASSWORD=senha
# JWT (se necessário para autenticação futura)
JWTSECRETKEY=sua-chave-secreta
# SMTP Gmail
MAILHOST=smtp.gmail.com
MAILPORT=587
MAILUSERNAME=seu-email@gmail.com
MAILPASSWORD=sua-senha-de-aplicativo
# RabbitMQ
RABBITMQ_HOST=localhost
RABBITMQ_PORT=5672
RABBITMQ_USERNAME=guest
RABBITMQ_PASSWORD=guest
O microserviço utiliza Flyway para versionamento e controle de migrations do banco de dados.
O Flyway está configurado para:
${...} nos scripts SQLCrie os scripts de migration em: src/main/resources/db/migration/
Padrão de nomenclatura: V{versao}__{descricao}.sql
Exemplo:
db/migration/
├── V1__create_table_email.sql
V1__create_table_email.sql:
CREATE TABLE tb_email (
id BIGSERIAL PRIMARY KEY,
owner_ref VARCHAR(255) NOT NULL,
email_from VARCHAR(255) NOT NULL,
email_to VARCHAR(255) NOT NULL,
subject VARCHAR(255) NOT NULL,
text TEXT NOT NULL,
send_date_email TIMESTAMP,
status_email VARCHAR(50)
);
CREATE INDEX idx_email_status ON tb_email(status_email);
CREATE INDEX idx_email_send_date ON tb_email(send_date_email);
ATENÇÃO: O comando clean está habilitado apenas para estudos/desenvolvimento. Em produção, desabilite com:
spring.flyway.clean-disabled=true
O microserviço está preparado para integração com RabbitMQ para processamento assíncrono de envio de emails.
{
"ownerRef": "user-123",
"emailFrom": "noreply@sistema.com",
"emailTo": "usuario@example.com",
"subject": "Bem-vindo ao sistema",
"text": "Obrigado por se cadastrar!"
}
# Docker
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
# Acessar console: http://localhost:15672
# Usuário padrão: guest / guest
email.exchange (tipo: direct)email.queueemail.routing.keyAcesse o RabbitMQ Management Console:
http://localhost:15672guestguestO microserviço utiliza profiles do Spring. Por padrão, está configurado para usar o profile local.
Para produção, defina:
export SPRING_PROFILES_ACTIVE=prod
git clone <url-do-repositorio>
cd ms-email
# Configure conforme o ambiente (local/prod)
# Usando Maven
./mvnw spring-boot:run
# Ou compile e execute o JAR
./mvnw clean package
java -jar target/email-0.0.1-SNAPSHOT.jar
Envia um email e registra o envio no banco de dados.
Request Body:
{
"ownerRef": "identificador-do-proprietario",
"emailFrom": "remetente@example.com",
"emailTo": "destinatario@example.com",
"subject": "Assunto do email",
"text": "Corpo do email"
}
Response (201 Created):
{
"id": 1,
"ownerRef": "identificador-do-proprietario",
"emailFrom": "remetente@example.com",
"emailTo": "destinatario@example.com",
"subject": "Assunto do email",
"text": "Corpo do email",
"sendDateEmail": "2025-01-09T10:30:00",
"statusEmail": "SENT"
}
Validações:
emailFrom e emailTo devem ser emails válidosA documentação interativa da API está disponível através do Swagger UI.
Após iniciar a aplicação, acesse:
http://localhost:8080/swagger-ui.htmlhttp://localhost:8080/api-docsO Swagger está configurado com:
Para desabilitar o Swagger em produção, descomente as seguintes linhas no application-prod.properties:
springdoc.api-docs.enabled=false
springdoc.swagger-ui.enabled=false
O microserviço utiliza LOG4J2 para gerenciamento de logs estruturados.
Os logs podem ser configurados através do arquivo log4j2.xml (não incluído no repositório, criar conforme necessidade).
Exemplo de configuração básica log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
</Console>
<RollingFile name="RollingFile" fileName="logs/ms-email.log"
filePattern="logs/ms-email-%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
<AppenderRef ref="RollingFile"/>
</Root>
<Logger name="br.com.sistema" level="debug" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="RollingFile"/>
</Logger>
</Loggers>
</Configuration>
src/
├── main/
│ ├── java/br/com/sistema/
│ │ ├── controllers/ # Controllers REST
│ │ ├── dtos/ # Data Transfer Objects
│ │ ├── enums/ # Enumerações
│ │ ├── models/ # Entidades JPA
│ │ ├── repositories/ # Repositórios JPA
│ │ ├── services/ # Lógica de negócio
│ │ └── Startup.java # Classe principal
│ └── resources/
│ ├── application.properties
│ └── application-prod.properties
└── test/ # Testes unitários
| Campo | Tipo | Descrição |
|---|---|---|
| id | BIGINT | ID auto-incrementado (PK) |
| owner_ref | VARCHAR | Referência do proprietário |
| email_from | VARCHAR | Email remetente |
| email_to | VARCHAR | Email destinatário |
| subject | VARCHAR | Assunto do email |
| text | TEXT | Corpo do email |
| send_date_email | TIMESTAMP | Data/hora do envio |
| status_email | VARCHAR | Status (SENT/ERROR) |
Para usar o Gmail como servidor SMTP:
MAILPASSWORDgit checkout -b feature/nova-funcionalidade)git commit -m 'Adiciona nova funcionalidade')git push origin feature/nova-funcionalidade)Este projeto é de código aberto e está disponível sob a licença especificada no repositório.