PHPMailer зависает при отправке почты - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь отправить электронное письмо пользователю, но после выполнения $mail->send() ничего не происходит, и веб-страница просто зависла и зависла на 5 минут.

Это $mail setup:

<?php

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require_once __DIR__ . '/../PHPMailer/src/Exception.php';
require_once __DIR__ . '/../PHPMailer/src/PHPMailer.php';
require_once __DIR__ . '/../PHPMailer/src/SMTP.php';

class Email {
  private $mail;

  function __construct() {
    $config = parse_ini_file(__DIR__ . '/../../private/config.ini');
    $this->mail = new PHPMailer(true);
    $this->mail->IsSMTP();
    $this->mail->SMTPDebug = 4;   
    $this->mail->SMTPAuth = true;
    $this->mail->CharSet = 'utf-8';
    $this->mail->Secure = 'ssl';
    $this->mail->Host = $config['smtphost'];
    $this->mail->Port = 465;
    $this->mail->Username = $config['smtpusername'];
    $this->mail->Password = $config['smtppassword'];
  }
}

Через 5 минут в браузере появляется это сообщение:

2020-04-01 22:53:58 Connection: opening to ##mysmtphost##:465, timeout=300, options=array()
2020-04-01 22:53:58 Connection: opened

Я рассмотрел любую подобную проблему и ее решения, но ни одна из них, похоже, не была полезно для моей проблемы.

Отправка:

$mail = new Email();
$mail->AddAddress($_POST['forgot_password']['email'], $foundEmail['username']);
$fromEmailAddress = ###MyHostEmailAddress###;
$fromName = ###name...###;
$mail->SetFrom($fromEmailAddress, $fromName);
$subject = ###subject..###;
$msgBody = $url;
$mail->Subject($subject);
$mail->Body($msgBody);
if($mail->Send())
  $validationMessage = 'TEST'

1 Ответ

0 голосов
/ 02 апреля 2020

Попробуйте вернуть что-то после функции send, потому что я думаю (поэтому я не уверен на 100%, но у меня была такая проблема) phpmailer при вызове функции send использует потоки, поэтому он отправляет почту с использованием потока, так что если ваш код заканчивается или d ie без возврата нить также будет остановлена ​​или умерла. Также вы можете сбросить результат send (), если это правда, это означает, что ваша конфигурация в порядке, иначе это означает, что у вас есть проблема с ней

...