Troubleshooting

šŸ”“ DIAGNƓSTICO: Erro de Envio de Email na VPS

Data: 2026-01-13 Servidor: dev.agrsis.com Status: āŒ IDENTIFICADO - AGUARDANDO CORREƇƃO

šŸ”“ DIAGNƓSTICO: Erro de Envio de Email na VPS

Data: 2026-01-13 Servidor: dev.agrsis.com Status: āŒ IDENTIFICADO - AGUARDANDO CORREƇƃO


šŸ” PROBLEMA REPORTADO

Sintomas:

  • Erro ao enviar email de recuperação de senha
  • Erro ao enviar código de verificação de email
  • Mensagem ao usuĆ”rio: "Erro ao enviar email de recuperação. Tente novamente."

šŸ•µļø INVESTIGAƇƃO REALIZADA

1. Verificação do .env na VPS

ssh root@dev.agrsis.com "docker exec agrsis_api cat .env | grep -E 'MAIL_|APP_URL'"

Resultado:

APP_URL=http://localhost                    āŒ URL de desenvolvimento
MAIL_MAILER=smtp                           āœ… Correto
MAIL_HOST=mailhog                          āŒ Container de desenvolvimento
MAIL_PORT=1025                             āŒ Porta de desenvolvimento
MAIL_USERNAME=null                         āŒ Sem credenciais
MAIL_PASSWORD=null                         āŒ Sem credenciais
MAIL_ENCRYPTION=null                       āŒ Sem criptografia
MAIL_FROM_ADDRESS=noreply@agrsis.local     āŒ DomĆ­nio .local invĆ”lido
MAIL_FROM_NAME="AgrSis"                    āœ… Correto

2. AnƔlise dos Logs do Laravel

ssh root@dev.agrsis.com "docker exec agrsis_api grep -A 5 'Mail\|email\|SMTP' storage/logs/laravel.log"

Erro Encontrado:

[2026-01-13 02:00:47] production.ERROR: Erro ao enviar código de verificação para user
{
  "error": "Connection could not be established with host \"mailhog:1025\":
           stream_socket_client(): php_network_getaddresses:
           getaddrinfo for mailhog failed: Try again"
}

Linha de código afetada:

/var/www/html/app/Http/Controllers/Api/AuthController.php(988)

šŸŽÆ CAUSA RAIZ

O arquivo .env na VPS estÔ com configurações de desenvolvimento (MailHog), mas o ambiente de produção não possui o container MailHog.

MailHog Ć© uma ferramenta de desenvolvimento que:

  • Captura emails localmente para teste
  • NƃO envia emails reais
  • NƃO existe em ambiente de produção

Resultado: A aplicação tenta conectar ao mailhog:1025 que nĆ£o existe → conexĆ£o falha → erro 500 ao usuĆ”rio.


āœ… SOLUƇƃO

PASSO 1: Escolher Provedor de Email SMTP

OpƧƵes recomendadas:

Opção A: Gmail SMTP (Mais Simples)

  • āœ… Gratuito para volume baixo (500 emails/dia)
  • āœ… FĆ”cil configuração
  • āš ļø Requer "App Password" (senha de aplicativo)
  • āš ļø NĆ£o recomendado para alto volume

Opção B: AWS SES (Recomendado para Produção)

  • āœ… Barato ($0.10 por 1.000 emails)
  • āœ… Alta confiabilidade
  • āœ… Bom para escalar
  • āš ļø Requer conta AWS
  • āš ļø Configuração mais complexa

Opção C: SendGrid (Alternativa Boa)

  • āœ… 100 emails/dia gratuito
  • āœ… Dashboard completo
  • āœ… FĆ”cil configuração
  • āš ļø Pago após limite gratuito

Opção D: Mailgun (Alternativa)

  • āœ… 1.000 emails/mĆŖs gratuito
  • āœ… Boa documentação
  • āœ… Boa reputação
  • āš ļø Pago após limite gratuito

PASSO 2: Configurar Credenciais

Criar arquivo .env.production.mail com as configuraƧƵes escolhidas.

Exemplo com Gmail:

APP_URL=https://dev.agrsis.com

MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=seu-email@gmail.com
MAIL_PASSWORD=sua-app-password-aqui
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=noreply@agrsis.com.br
MAIL_FROM_NAME="AgrSis"

FRONTEND_PRODUCER_URL=https://dev.agrsis.com/producer
FRONTEND_SUPPLIER_URL=https://dev.agrsis.com/supplier

PASSO 3: Atualizar .env na VPS

# 1. Conectar ao servidor
ssh root@dev.agrsis.com

# 2. Editar .env no container
docker exec -it agrsis_api nano .env

# 3. Atualizar as linhas:
# - APP_URL=https://dev.agrsis.com
# - MAIL_HOST=smtp.gmail.com (ou provedor escolhido)
# - MAIL_PORT=587
# - MAIL_USERNAME=email real
# - MAIL_PASSWORD=senha real
# - MAIL_ENCRYPTION=tls
# - MAIL_FROM_ADDRESS=noreply@agrsis.com.br

# 4. Salvar e sair (Ctrl+O, Enter, Ctrl+X)

# 5. Limpar cache do Laravel
docker exec agrsis_api php artisan config:clear
docker exec agrsis_api php artisan cache:clear

# 6. Reiniciar container (se necessƔrio)
docker restart agrsis_api

PASSO 4: Testar Envio de Email

Teste via Tinker:

docker exec -it agrsis_api php artisan tinker
// No tinker:
Mail::raw('Teste de email', function ($message) {
    $message->to('seu-email-teste@gmail.com')
            ->subject('Teste AgrSis');
});

// Se retornar null = sucesso!
// Se der erro, verificar mensagem

Teste via Interface:

  1. Acessar https://dev.agrsis.com
  2. Ir para "Esqueci minha senha"
  3. Inserir email cadastrado
  4. Verificar se recebe o email

šŸ“ CHECKLIST DE CORREƇƃO

  • Escolher provedor SMTP (Gmail, AWS SES, SendGrid, Mailgun)
  • Obter credenciais do provedor escolhido
  • Atualizar .env na VPS com credenciais reais
  • Limpar cache do Laravel (php artisan config:clear)
  • Testar envio via Tinker
  • Testar recuperação de senha via interface
  • Testar verificação de email via interface
  • Verificar logs para confirmar sucesso

šŸ” COMO OBTER CREDENCIAIS

Gmail App Password:

  1. Acessar https://myaccount.google.com/security
  2. Ativar "Verificação em duas etapas"
  3. Ir em "Senhas de app"
  4. Criar senha para "Email"
  5. Usar essa senha no MAIL_PASSWORD

AWS SES:

  1. Criar conta AWS
  2. Acessar console SES
  3. Verificar domĆ­nio ou email
  4. Criar credenciais SMTP
  5. Anotar SMTP username e password

SendGrid:

  1. Criar conta em https://sendgrid.com
  2. Ir em Settings > API Keys
  3. Criar API Key com "Mail Send" permission
  4. Username: "apikey"
  5. Password: API Key gerada

Mailgun:

  1. Criar conta em https://mailgun.com
  2. Adicionar domĆ­nio
  3. Obter SMTP credentials na dashboard
  4. Configurar DNS (SPF, DKIM)

🚨 ATENƇƃO

IMPORTANTE:

  • āš ļø NĆ£o commitar credenciais de email no Git
  • āš ļø Usar variĆ”veis de ambiente (.env)
  • āš ļø Testar PRIMEIRO antes de ativar para usuĆ”rios
  • āš ļø Monitorar logs após configuração
  • āš ļø Verificar limites do provedor escolhido

šŸ“Š VOLUME ESPERADO DE EMAILS

Estimativa baseada em funcionalidades:

  • Recuperação de senha: ~10-20/dia
  • Verificação de email: ~5-10/dia
  • NotificaƧƵes de licitaƧƵes: ~50-100/dia
  • NotificaƧƵes de propostas: ~30-50/dia
  • Totais: ~100-180 emails/dia

Recomendação: SendGrid ou AWS SES (ambos suportam bem esse volume)


šŸ“ ARQUIVOS RELACIONADOS

  • Controlador: /var/www/html/app/Http/Controllers/Api/AuthController.php
    • forgotPassword() linha 794
    • sendUserVerificationCode() linha 955
  • Mailable: /var/www/html/app/Mail/
    • PasswordResetMail.php
    • VerificationCodeMail.php
  • Logs: /var/www/html/storage/logs/laravel.log

šŸ“ž PRƓXIMOS PASSOS

  1. Decisão: Escolher provedor SMTP
  2. Configuração: Obter credenciais
  3. Deploy: Atualizar .env na VPS
  4. Teste: Validar funcionamento
  5. Monitoramento: Acompanhar logs por 24h

Status: 🟔 AGUARDANDO DEFINIƇƃO DO PROVEDOR SMTP

Copyright Ā© 2026