š“ DIAGNĆSTICO: Erro de Envio de Email na VPS
š“ 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:
- Acessar https://dev.agrsis.com
- Ir para "Esqueci minha senha"
- Inserir email cadastrado
- 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:
- Acessar https://myaccount.google.com/security
- Ativar "Verificação em duas etapas"
- Ir em "Senhas de app"
- Criar senha para "Email"
- Usar essa senha no MAIL_PASSWORD
AWS SES:
- Criar conta AWS
- Acessar console SES
- Verificar domĆnio ou email
- Criar credenciais SMTP
- Anotar SMTP username e password
SendGrid:
- Criar conta em https://sendgrid.com
- Ir em Settings > API Keys
- Criar API Key com "Mail Send" permission
- Username: "apikey"
- Password: API Key gerada
Mailgun:
- Criar conta em https://mailgun.com
- Adicionar domĆnio
- Obter SMTP credentials na dashboard
- 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.phpforgotPassword()linha 794sendUserVerificationCode()linha 955
- Mailable:
/var/www/html/app/Mail/PasswordResetMail.phpVerificationCodeMail.php
- Logs:
/var/www/html/storage/logs/laravel.log
š PRĆXIMOS PASSOS
- Decisão: Escolher provedor SMTP
- Configuração: Obter credenciais
- Deploy: Atualizar .env na VPS
- Teste: Validar funcionamento
- Monitoramento: Acompanhar logs por 24h
Status: š” AGUARDANDO DEFINIĆĆO DO PROVEDOR SMTP