Pular para o conteúdo principal

Sistema de Emails

Documentação do sistema de envio de emails do PAC.

Visão Geral

O sistema utiliza Nodemailer para envio de emails através de SMTP. Todos os emails são enviados automaticamente em eventos específicos do sistema.

Configuração

EmailService

O serviço está localizado em infrastructure/services/email.service.ts e utiliza:

  • Host SMTP: Configurável via variável de ambiente
  • Porta: 587 (TLS)
  • Autenticação: Usuário e senha SMTP
  • Templates: HTML gerado programaticamente

Variáveis de Ambiente

SMTP_HOST=mail.gruponimbus.com.br
SMTP_PORT=587
SMTP_USER=noreply@gruponimbus.com.br
SMTP_PASS=sua_senha
SMTP_FROM="PAC Sistema" <noreply@gruponimbus.com.br>
FRONTEND_URL=https://homologacao.pac.com.br

Tipos de Email

1. Email de Boas-Vindas ao Cliente

Trigger: Quando um cliente é cadastrado pelo admin

Conteúdo:

  • Título: "Bem-vindo ao Sistema PAC!"
  • Credenciais de acesso (email e senha)
  • Link para login
  • Aviso para alterar senha

Método: enviarEmailBoasVindasCliente(email, nome, senha)

2. Solicitação de Vínculo RT

Trigger: Quando um cliente solicita vínculo com um RT

Conteúdo:

  • Título: "Nova Solicitação de Vínculo"
  • Dados da empresa solicitante
  • Link para acessar o sistema
  • Aviso de segurança

Método: enviarSolicitacaoVinculo(emailRT, nomeRT, dadosEmpresa)

3. Vínculo Aprovado

Trigger: Quando RT aceita solicitação de vínculo

Conteúdo:

  • Título: "Vínculo com Responsável Técnico Aprovado"
  • Nome do RT que aprovou
  • Link para acessar o sistema

Método: enviarEmailVinculacaoAceita(emailCliente, nomeCliente, nomeRT)

4. Vínculo Rejeitado

Trigger: Quando RT rejeita solicitação de vínculo

Conteúdo:

  • Título: "Vínculo com Responsável Técnico Rejeitado"
  • Nome do RT que rejeitou
  • Motivo da rejeição (se informado)
  • Sugestão para buscar outro RT

Método: enviarEmailVinculacaoRejeitada(emailCliente, nomeCliente, nomeRT, motivo?)

5. Novo Chamado

Trigger: Quando cliente abre um novo chamado

Conteúdo:

  • Título: "Novo Chamado de Suporte"
  • Protocolo do chamado
  • Dados do cliente
  • Título e descrição do chamado
  • Link para responder

Método: enviarEmailNovoChamado(emailRT, nomeRT, protocolo, titulo, descricao, nomeCliente)

6. Chamado Respondido

Trigger: Quando RT responde um chamado

Conteúdo:

  • Título: "Chamado Respondido"
  • Protocolo do chamado
  • Resposta do RT
  • Link para visualizar

Método: enviarEmailChamadoRespondido(emailCliente, nomeCliente, protocolo, titulo, resposta)

Estrutura dos Templates

Todos os templates seguem um padrão visual consistente:

<!DOCTYPE html>
<html>
<head>
<!-- Meta tags -->
</head>
<body>
<!-- Header com gradiente roxo -->
<!-- Conteúdo principal -->
<!-- Footer -->
</body>
</html>

Características dos Templates

  • Design Responsivo: Funciona em desktop e mobile
  • Cores: Gradiente roxo/violeta (#667eea a #764ba2)
  • Tipografia: Segoe UI, Tahoma, Geneva, Verdana
  • Cards: Bordas arredondadas e sombras sutis
  • CTAs: Botões com gradiente e links para o sistema

Fluxo de Envio

sequenceDiagram
participant Sistema as Sistema PAC
participant EmailService as EmailService
participant SMTP as Servidor SMTP
participant Destinatario as Destinatário

Sistema->>EmailService: Chamar método de envio
EmailService->>EmailService: Gerar template HTML
EmailService->>SMTP: Enviar email via Nodemailer
SMTP->>Destinatario: Entregar email

alt Sucesso
EmailService->>Sistema: Log de sucesso
else Erro
EmailService->>Sistema: Log de erro (não bloqueia fluxo)
end

Tratamento de Erros

O sistema não bloqueia o fluxo principal em caso de erro no envio de email:

  • Erros são logados no console
  • O processo continua normalmente
  • Não há retry automático (pode ser implementado)

Exemplo de Uso

// No código do sistema
await this.emailService.enviarEmailBoasVindasCliente(
cliente.email,
cliente.nomeFantasia,
senhaGerada
);

Personalização

Para adicionar novos tipos de email:

  1. Criar método no EmailService
  2. Criar método privado para gerar template HTML
  3. Chamar o método no ponto apropriado do fluxo
  4. Adicionar variáveis de ambiente se necessário

Próximos Passos