Fatal error: Maximum execution time of 300 seconds exceeded
com PHPMailer
Implementei uma página onde o usuário insere o e-mail e recebe um link para cadastrar uma nova senha caso tenha esquecido a senha anterior. Para isso estou usando o PHPMailer na versão 6.5, e meu PHP está na versão 7.4. Com o código configurado estou recebendo o seguinte erro:
Fatal error: Maximum execution time of 300 seconds exceeded
Segue abaixo a classe Email com a configuração padrão do PHPMailer e a classe EmailParaSenha, responsável por pegar o email do usuário e extender a classe Email.
- Classe Email
<?php
namespace Lucas\Procedo\Suport;
use Exception;
use stdClass;
use PHPMailer\PHPMailer\PHPMailer;
class Email
{
/**
* @var PHPMailer
*/
private $email;
/**
* @var stdClass
*/
private $dados;
/**
* @var Exception
*/
private $error;
public function __construct()
{
$this->email = new PHPMailer(true);
$this->dados = new stdClass();
$this->email->isSMTP();
$this->email->isHTML();
$this->email->setLanguage("br");
$this->email->SMTPAuth = true;
$this->email->SMTPSecure = true;
$this->email->CharSet = "utf-8";
$this->email->Host = "server_host";
$this->email->Port = "465";
$this->email->Username = "mail_server";
$this->email->Password = "senha";
}
public function adicionaMensagem(string $assunto, string $corpoDaMensagem, string $nomeDestinatario, string $emailDestinatario): Email
{
$this->dados->assunto = $assunto;
$this->dados->corpoDaMensagem = $corpoDaMensagem;
$this->dados->nomeDestinatario = $nomeDestinatario;
$this->dados->emailDestinatario = $emailDestinatario;
return $this;
}
public function enviaEmail(string $nomeRemetente, string $emailRemetente): bool
{
try {
$this->email->Subject = $this->dados->assunto;
$this->email->msgHTML($this->dados->corpoDaMensagem);
$this->email->addAddress(
$this->dados->emailDestinatario,
$this->dados->nomeDestinatario
);
$this->email->setFrom($emailRemetente, $nomeRemetente);
$this->email->send();
return true;
} catch (Exception $exception) {
$this->error = $exception;
return false;
}
}
public function error(): ?Exception
{
return$this->error;
}
}
*Classe EmailParaSenha
<?php
namespace Lucas\Procedo\Controller;
use Doctrine\ORM\EntityManagerInterface;
use Lucas\Procedo\Entity\Usuario;
use Lucas\Procedo\Helper\FlashMessagesTrait;
use Lucas\Procedo\Suport\Email;
use Nyholm\Psr7\Response;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
class EmailParaSenha extends Email implements RequestHandlerInterface
{
use FlashMessagesTrait;
/**
* @var \Doctrine\Common\Persistence\ObjectRepository|\Doctrine\ORM\EntityRepository|\Doctrine\Persistence\ObjectRepository
*/
private $repositorioDeUsuarios;
public function __construct(EntityManagerInterface $entityManager)
{
$this->repositorioDeUsuarios = $entityManager->getRepository(Usuario::class);
}
public function handle(ServerRequestInterface $request): ResponseInterface
{
$emailDoUsuario = filter_var(
$request->getParsedBody()['userEmail'],
FILTER_VALIDATE_EMAIL
);
$resposta = new Response(302, ['Location' => '/esqueci-senha']);
if(is_null($emailDoUsuario) || $emailDoUsuario === false) {
$this->defineMensagem('danger',
'Insira um email válido!'
);
return $resposta;
}
$usuario = $this->repositorioDeUsuarios->findOneBy(['email' => $emailDoUsuario]);
if(is_null($usuario)) {
$this->defineMensagem('danger',
'Insira um email válido!'
);
return $resposta;
}
$email = new Email();
$email->adicionaMensagem(
'E-mail teste',
'Teste de envio de e-mails com phpmailer.',
'Lucas Souza',
$emailDoUsuario
);
$email->enviaEmail('Lucas', 'email_remetente');
if(!$email->error()) {
var_dump(true);
} else {
echo $email->error()->getMessage();
}
$this->defineMensagem(
'info',
'Cheque seu e-mail para informações de como cadastrar uma nova senha.'
);
return new Response(302, ['Location' => '/login']);
}
}