TransWikia.com

Problema com PHPMailer no envio de e-mails

Stack Overflow em Português Asked by Victor Wurthmann on January 4, 2022

Estou tendo problemas em um projeto que utiliza PHPMailer, o mesmo funcionava normalmente, porém agora está dando problema de Connection Timeout no site, entretanto quando executo o script via terminal o mesmo funciona perfeitamente.

Itens que já verifiquei:

  • Credenciais de acesso;
  • OpenSSL do servidor;
  • Versão do php.ini carregada pelo browser x terminal;
  • Debuguei o código e o problema aparente está na classe Send do phpmailer todo o resto do script funciona perfeitamente.

Alguém com o mesmo problema?

    <?php
try{

   require 'vendors/phpmailer/src/PHPMailer.php';
   require 'vendors/phpmailer/src/SMTP.php';
   require 'vendors/phpmailer/src/Exception.php';

$layout = "teste servidor antigo";

$mail = new PHPMailerPHPMailerPHPMailer();// create a new object

$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 2; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // authentication enabled
$mail->SMTPAutoTLS = false;
$mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for Gmail
$mail->Host = "mail.swoosh.com.br";
$mail->Port = 465; // or 587
$mail->IsHTML(true);
$mail->CharSet = "UTF-8";
$mail->Username = "[email protected]";
$mail->Password = "password";
$mail->SetFrom("[email protected]");
$mail->Subject = "Assunto";
$mail->Body = $layout ;
 $mail->AddAddress("[email protected]");
$mail->AddAddress("[email protected]");
$mail->AddAddress("[email protected]");
 if(!$mail->Send()) {  
    echo "Mailer Error: " . $mail->ErrorInfo;
 } else {
    echo "Message has been sent";
 }
}catch(Exception $e){
   print_r($e);
}

One Answer

Você precisa verificar o tempo necessário para fazer o envio de e-mail. Por padrão o PHP define (no PHP.ini) 30 segundos, caso passe esse tempo, o servidor corta a conexão com o cliente, liberando o servidor para novas conexões.

Você pode alterar esse tempo através do comando abaixo:

set_time_limit($segundos);

Ficando assim:

<?php
try{

   require 'vendors/phpmailer/src/PHPMailer.php';
   require 'vendors/phpmailer/src/SMTP.php';
   require 'vendors/phpmailer/src/Exception.php';

$layout = "teste servidor antigo";
set_time_limit(50);
$mail = new PHPMailerPHPMailerPHPMailer();// create a new object

$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 2; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // authentication enabled
$mail->SMTPAutoTLS = false;
$mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for Gmail
$mail->Host = "mail.swoosh.com.br";
$mail->Port = 465; // or 587
$mail->IsHTML(true);
$mail->CharSet = "UTF-8";
$mail->Username = "[email protected]";
$mail->Password = "password";
$mail->SetFrom("[email protected]");
$mail->Subject = "Assunto";
$mail->Body = $layout ;
 $mail->AddAddress("[email protected]");
$mail->AddAddress("[email protected]");
$mail->AddAddress("[email protected]");
 if(!$mail->Send()) {  
    echo "Mailer Error: " . $mail->ErrorInfo;
 } else {
    echo "Message has been sent";
 }
}catch(Exception $e){
   print_r($e);
}

Ou você pode fazer uma configuração definitiva para todo o site através do parâmetro max_execution_time em php.ini.

O problema da segunda alternativa é que ela é válida para todo o site, podendo gerar um gargalo no atendimento de novas requisições.

Answered by Francisco Eduardo on January 4, 2022

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP