解决hyperf中phpmailer包超全局变量报错问题

安装 @https://github.com/Yurunsoft/PHPMailer-Swoole

php版本:7.4


调用方法:

        $config = config('mailbox');

        $channel = new \Swoole\Coroutine\Channel();

        co(function() use ($channel, $config, $content) {

            $mail = new PHPMailer; //PHPMailer对象

            $mail->CharSet = 'UTF-8';

            $mail->IsSMTP(); // 设定使用SMTP服务

            $mail->SMTPDebug = 0; // 关闭SMTP调试功能

            $mail->SMTPAuth = true; // 启用 SMTP 验证功能

            $mail->SMTPSecure = 'ssl'; // 使用安全协议

            $mail->Host = $config['host']; // SMTP 服务器

            $mail->Port = $config['port']; // SMTP服务器的端口号

            $mail->Username = $config['username']; // SMTP服务器用户名

            $mail->Password = $config['password']; // SMTP服务器密码

            $mail->SetFrom($config['from'], $config['fromName']); // 邮箱,昵称

            $mail->Subject = $content['Subject'];

            $mail->MsgHTML($content['MsgHTML']);

            $mail->AddAddress($content['AddAddress']); // 收件人

            $result = $mail->Send();

            $channel->push($result);

        });

        return $channel->pop();



报错如下:

PHP Deprecated:  array_key_exists(): Using array_key_exists() on objects is deprecated. Use isset() or property_exists() instead in /vendor/phpmailer/phpmailer/src/PHPMailer.php on line 3888


这个报错是phpmailer代码里报的,尝试composer update一下,结果还是不行,查了phpmailer包的版本是最新版

鼎云博客


最后详细看了phpmailer报错具体内容,发现Hostname获取走的是超全局变量,而hyperf默认是将超全局变量关闭的,所以导致了报错

鼎云博客



解决办法:

        $config = config('mailbox');

        $channel = new \Swoole\Coroutine\Channel();

        co(function() use ($channel, $config, $content) {

            $mail = new PHPMailer; //PHPMailer对象

            $mail->Hostname = '127.0.0.1';

            $mail->CharSet = 'UTF-8'; 

            $mail->IsSMTP(); // 设定使用SMTP服务

            $mail->SMTPDebug = 0; // 关闭SMTP调试功能

            $mail->SMTPAuth = true; // 启用 SMTP 验证功能

            $mail->SMTPSecure = 'ssl'; // 使用安全协议

            $mail->Host = $config['host']; // SMTP 服务器

            $mail->Port = $config['port']; // SMTP服务器的端口号

            $mail->Username = $config['username']; // SMTP服务器用户名

            $mail->Password = $config['password']; // SMTP服务器密码

            $mail->SetFrom($config['from'], $config['fromName']); // 邮箱,昵称

            $mail->Subject = $content['Subject'];

            $mail->MsgHTML($content['MsgHTML']);

            $mail->AddAddress($content['AddAddress']); // 收件人

            $result = $mail->Send();

            $channel->push($result);

        });

        return $channel->pop();



在PHPMailer实例化后添加:$mail->Hostname = '127.0.0.1';即可


鼎云博客
  • 最新评论
  • 总共0条评论