PhpMailer发送时延迟30秒

PhpMailer发送时延迟30秒,php,header,phpmailer,Php,Header,Phpmailer,好的,我对PhpMailer没有什么问题 在执行$mail->send之前有大约30秒的延迟 2019-07-23 13:43:55连接:开放至 smtp.gmail.com:587,超时=300,选项=array()2019-07-23 13:44:16连接:已打开2019-07-23 13:44:16服务器 等等(一些参数列表) 用于注册用户的代码。我在模型方法中实例化了Mail类,然后在控制器中调用该方法,然后调用成功登录后重定向的函数。我还收到了已发送的标题错误 2019-07-23 1

好的,我对PhpMailer没有什么问题

  • 在执行$mail->send之前有大约30秒的延迟
  • 2019-07-23 13:43:55连接:开放至 smtp.gmail.com:587,超时=300,选项=array()
    2019-07-23 13:44:16连接:已打开
    2019-07-23 13:44:16服务器 等等(一些参数列表)

  • 用于注册用户的代码。我在模型方法中实例化了Mail类,然后在控制器中调用该方法,然后调用成功登录后重定向的函数。我还收到了已发送的标题错误
  • 2019-07-23 13:44:17连接:已关闭
    消息已关闭 已发送
    警告:无法修改标题信息-标题 已由发送(输出开始于) C:\xampp\htdocs\log\vendor\phpmailer\phpmailer\src\SMTP.php:257) 第43行的C:\xampp\htdocs\log\App\Core\Controller.php

    我的代码:

    邮件类别:

    class Mail
    {
        public function sendMail($to, $subject, $text, $html)
        {
            $mail = new PHPMailer(true);
    
            try {
                //Server settings
                $mail->SMTPDebug = 3;
                $mail->isSMTP();
                $mail->Host = 'smtp.gmail.com';
                $mail->SMTPAuth = true;
                $mail->Username = 'wuwu5431@gmail.com';
                $mail->Password = 'Password';                       
                $mail->SMTPSecure = 'tls';
                $mail->Port = 587;
    
                //Recipients
                $mail->setFrom('wuwu5431@gmail.com', 'John Smith');
                $mail->addAddress($to, '');
                $mail->addReplyTo('wuwu5431@gmail.com', 'Information($mail->addReplyTo)');
    
                //Content
                $mail->isHTML(true);
                $mail->Subject = $subject;
                $mail->Body    = $text;
                $mail->AltBody = $html . ' $html . This is the body in plain text for non-HTML mail clients';
    
                $mail->send();
    
                echo 'Message has been sent';
            } catch (Exception $e) {
                echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
            }
    
        }//end of method
    }// end of class
    
    模型(方法):

    控制器(方法):


    环境:Win7,xampp,本地主机

    这完全正常-欢迎来到SMTP世界

    SMTP可以在事务中的多个点施加长达10分钟的延迟,因此它不适合在页面提交处理期间使用,尽管这样做仍然很常见

    处理它的方法是使其异步(就您的页面而言),有多种方法可以做到这一点,例如,将您的消息隐藏在一个队列中,该队列稍后由单独的进程拾取和发送(即不中断页面提交处理),或直接将其提交到本地邮件服务器,它通常会在几毫秒内接受提交,并为您处理后续交付

    除此之外,以下几行可能是错误的:

    $mail->setFrom('wuwu5431@gmail.com', 'John Smith');
    $mail->addAddress($to, '');
    $mail->addReplyTo('wuwu5431@gmail.com', 'Information($mail->addReplyTo)');
    
    如果您的发件人地址和回复地址相同,则将忽略回复地址。若你们并没有一个和地址匹配的名字,那个就别说了。单引号字符串在PHP中不执行变量插值。你可能只想:

    $mail->setFrom('wuwu5431@gmail.com', 'John Smith');
    $mail->addAddress($to);
    

    这是完全正常的-欢迎来到SMTP世界

    SMTP可以在事务中的多个点施加长达10分钟的延迟,因此它不适合在页面提交处理期间使用,尽管这样做仍然很常见

    处理它的方法是使其异步(就您的页面而言),有多种方法可以做到这一点,例如,将您的消息隐藏在一个队列中,该队列稍后由单独的进程拾取和发送(即不中断页面提交处理),或直接将其提交到本地邮件服务器,它通常会在几毫秒内接受提交,并为您处理后续交付

    除此之外,以下几行可能是错误的:

    $mail->setFrom('wuwu5431@gmail.com', 'John Smith');
    $mail->addAddress($to, '');
    $mail->addReplyTo('wuwu5431@gmail.com', 'Information($mail->addReplyTo)');
    
    如果您的发件人地址和回复地址相同,则将忽略回复地址。若你们并没有一个和地址匹配的名字,那个就别说了。单引号字符串在PHP中不执行变量插值。你可能只想:

    $mail->setFrom('wuwu5431@gmail.com', 'John Smith');
    $mail->addAddress($to);
    

    首先感谢你克服了困难。你能给我一些关于如何使它异步的伪代码吗?从来没有这样做过,我大概知道我需要做什么。首先感谢你度过难关。你能给我一些关于如何使它异步的伪代码吗?从来没做过,大概知道我需要做什么。