Por que Swiftmailer está lançando "erro interno do servidor"?
-
27-09-2019 - |
Pergunta
Estou usando o Symfony + Swiftmailer e recebendo o seguinte erro do Swiftmailer:
500 | Internal Server Error | Swift_TransportException
Expected response code 220 but got code "", with message ""
e não consigo descobrir o porquê. Estou usando o HmailServer na minha máquina local e configurei meu arquivo fábricas.yml (como estou usando o Symfony) da seguinte forma:
mailer:
class: sfMailer
param:
logging: %SF_LOGGING_ENABLED%
charset: %SF_CHARSET%
delivery_strategy: realtime
transport:
class: Swift_SmtpTransport
param:
host: splodge.loc
port: 25
encryption: ~
username: ~
password: ~
Estou usando o seguinte código para enviar:
$message = $this->getMailer()->compose(
'noreply@splodge.loc',
'info@splodge.loc',
'Reset Password',
'Message'
);
$result = $this->getMailer()->send($message);
Alguém já teve um problema como esse antes?
Descobri que, às vezes, e muito aleatoriamente, o envio passa, mas sempre, recebo a mensagem de erro acima. Tão constantemente refrescante da página que envia o correio, falha imprevisivelmente e, como o código às vezes funciona, é meio difícil descobrir o que está errado.
Qualquer ajuda será muito apreciada!
Investigação adicional mostrou que o servidor SMTP envia [220 localhost ESMTP], mas depois de dar uma olhada nos logs do HmailServer, descobri o seguinte:
"TCPIP" 5232 "2010-06-16 11:40:54.043" "TCPConnection - Posting AcceptEx on 0.0.0.0:25"
"DEBUG" 5232 "2010-06-16 11:40:54.043" "Creating session 51"
"SMTPD" 5232 51 "2010-06-16 11:40:54.043" "127.0.0.1" "SENT: 220 localhost ESMTP"
"DEBUG" 5296 "2010-06-16 11:40:54.199" "The read operation failed. Bytes transferred: 0 Remote IP: 127.0.0.1, Session: 51, Code: 10054, Message: An existing connection was forcibly closed by the remote host"
"DEBUG" 5296 "2010-06-16 11:40:54.199" "Ending session 51"
Será que Swiftmailer é Helo/Ehloing muito cedo, e que isso é simplesmente uma questão de tempo? Posso atrasar um pouco a transmissão de helo?
Os bons registros, quando a coisa realmente envia looks da seguinte maneira:
"TCPIP" 5232 "2010-06-16 11:42:21.278" "TCPConnection - Posting AcceptEx on 0.0.0.0:25"
"DEBUG" 5232 "2010-06-16 11:42:21.294" "Creating session 54"
"SMTPD" 5232 54 "2010-06-16 11:42:21.294" "127.0.0.1" "SENT: 220 localhost ESMTP"
"SMTPD" 5224 54 "2010-06-16 11:42:21.294" "127.0.0.1" "RECEIVED: EHLO splodge.loc"
Portanto, tem a ver com o reconhecimento HELO/EHLO. Por favor informar! :)
Solução 2
Conseguiu fazer isso funcionando criando um loop que experimenta o envio de e -mail ...
$sendResult = false;
do
{
try
{
$message = Swift_Message::newInstance()
->setFrom('noreply@splodge.loc', 'Mr.Postman')
->setTo($to)
->setSubject('Password reminder...')
->setBody($this->getPartial('resetPasswordEmail', array(
'newPassword' => $newPassword)), 'text/html');
$sendResult = $this->getMailer()->send($message);
}
catch(Exception $e){/*Do nothing*/}
}
while($sendResult !== 1);
Em seguida, adicionarei algumas configurações de configuração para limitar o número de tentativas.
Outras dicas
Parece uma questão SMTP.
O que acontece se você tentar o seguinte da linha de comando:
telnet splodge.loc 25
Você pode se conectar? A linha de resposta começa com 220?
Caso contrário, você terá um problema com sua configuração SMTP Server (ou talvez Firewall).
Eu só queria adicionar isso. Para mim, o problema foi quando minha reinicialização do SMTP Server, Dovecot não voltou. Assim que comecei a Dovecot, tudo estava bem. Então, no final, foi um problema SMTP; portanto, se alguém tiver esse problema, você pode ter certeza de que é um problema SMTP.