首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
Hyperf 框架发送 Email 邮件控制台报错 check_worker_exit_status()
### 问题描述 我需要在 Hyperf 框架中发送邮件,选择了 `hyperf-ext/mail` 这个包。 在执行发送的时候控制台会报错 `WARNING Server::check_worker_exit_status(): worker(pid=75281, id=0) abnormal exit, status=0, signal=10` 期间我尝试过改各种参数,并使用 `yasd` 打断点追踪 `send` 时候的源码,但实在太深了,最终还是没找到问题出在哪里。 我怀疑跟包有关系,然后我换成了 `yurunsoft/phpmailer-swoole` 这个包,但还是一样的结果。 到这里我认为应该是跟 `composer` 包没太大关系了,可能是底层的某些其他原因导致的。 这种报错比较不知道从哪里下手,想请教大佬这种问题如何排查 ### Swoole版本,PHP版本,以及操作系统版本信息 Swoole 版本是 4.8.5 ```css ➜ yasd php --ri swoole swoole Swoole => enabled Author => Swoole Team <team@swoole.com> Version => 4.8.5 Built => Jan 14 2022 10:37:34 coroutine => enabled with boost asm context kqueue => enabled rwlock => enabled openssl => OpenSSL 3.0.0 7 sep 2021 dtls => enabled http2 => enabled json => enabled curl-native => enabled pcre => enabled zlib => 1.2.11 async_redis => enabled Directive => Local Value => Master Value swoole.enable_coroutine => On => On swoole.enable_library => On => On swoole.enable_preemptive_scheduler => Off => Off swoole.display_errors => On => On swoole.use_shortname => Off => Off swoole.unixsock_buffer_size => 262144 => 262144 ``` `Hyperf` 版本是 `2.2.*` ### 相关代码 实际发送邮件的代码是 ```php go(function(){ $mail = new PHPMailer; //PHPMailer对象 $mail->CharSet = 'UTF-8'; //设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码 $mail->IsSMTP(); // 设定使用SMTP服务 $mail->SMTPDebug = 0; // 关闭SMTP调试功能 $mail->SMTPAuth = true; // 启用 SMTP 验证功能 $mail->SMTPSecure = 'ssl'; // 使用安全协议 $mail->Host = 'smtp.163.com'; // SMTP 服务器 $mail->Port = '994'; // SMTP服务器的端口号 $mail->Username = env('MAIL_SMTP_USERNAME'); // SMTP服务器用户名 $mail->Password = env('MAIL_SMTP_PASSWORD'); // SMTP服务器密码 $mail->SetFrom(env('MAIL_SMTP_FROM_ADDRESS'), env('MAIL_SMTP_FROM_NAME')); // 邮箱,昵称 $mail->Subject = 'title test'; $mail->MsgHTML('hello world'); $mail->AddAddress('xcy2048@qq.com'); // 收件人 $result = $mail->Send(); if($result) { var_dump('ok'); } else { $result = $error = $mail->ErrorInfo; var_dump($result); } }); // 这里是使用 hyperf-ext/mail 发送 // Mail::to("xcy2048@163.com")->send(new AppMail()); ``` ### 这里是控制台报错截图  ### 你期待的结果是什么?实际看到的错误信息又是什么?
发布于4年前 · 57 次浏览 · 来自
提问
洋1024
### 问题描述 我需要在 Hyperf 框架中发送邮件,选择了 `hyperf-ext/mail` 这个包。 在执行发送的时候控制台会报错 `WARNING Server::check_worker_exit_status(): worker(pid=75281, id=0) abnormal exit, status=0, signal=10` 期间我尝试过改各种参数,并使用 `yasd` 打断点追踪 `send` 时候的源码,但实在太深了,最终还是没找到问题出在哪里。 我怀疑跟包有关系,然后我换成了 `yurunsoft/phpmailer-swoole` 这个包,但还是一样的结果。 到这里我认为应该是跟 `composer` 包没太大关系了,可能是底层的某些其他原因导致的。 这种报错比较不知道从哪里下手,想请教大佬这种问题如何排查 ### Swoole版本,PHP版本,以及操作系统版本信息 Swoole 版本是 4.8.5 ```css ➜ yasd php --ri swoole swoole Swoole => enabled Author => Swoole Team <team@swoole.com> Version => 4.8.5 Built => Jan 14 2022 10:37:34 coroutine => enabled with boost asm context kqueue => enabled rwlock => enabled openssl => OpenSSL 3.0.0 7 sep 2021 dtls => enabled http2 => enabled json => enabled curl-native => enabled pcre => enabled zlib => 1.2.11 async_redis => enabled Directive => Local Value => Master Value swoole.enable_coroutine => On => On swoole.enable_library => On => On swoole.enable_preemptive_scheduler => Off => Off swoole.display_errors => On => On swoole.use_shortname => Off => Off swoole.unixsock_buffer_size => 262144 => 262144 ``` `Hyperf` 版本是 `2.2.*` ### 相关代码 实际发送邮件的代码是 ```php go(function(){ $mail = new PHPMailer; //PHPMailer对象 $mail->CharSet = 'UTF-8'; //设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码 $mail->IsSMTP(); // 设定使用SMTP服务 $mail->SMTPDebug = 0; // 关闭SMTP调试功能 $mail->SMTPAuth = true; // 启用 SMTP 验证功能 $mail->SMTPSecure = 'ssl'; // 使用安全协议 $mail->Host = 'smtp.163.com'; // SMTP 服务器 $mail->Port = '994'; // SMTP服务器的端口号 $mail->Username = env('MAIL_SMTP_USERNAME'); // SMTP服务器用户名 $mail->Password = env('MAIL_SMTP_PASSWORD'); // SMTP服务器密码 $mail->SetFrom(env('MAIL_SMTP_FROM_ADDRESS'), env('MAIL_SMTP_FROM_NAME')); // 邮箱,昵称 $mail->Subject = 'title test'; $mail->MsgHTML('hello world'); $mail->AddAddress('xcy2048@qq.com'); // 收件人 $result = $mail->Send(); if($result) { var_dump('ok'); } else { $result = $error = $mail->ErrorInfo; var_dump($result); } }); // 这里是使用 hyperf-ext/mail 发送 // Mail::to("xcy2048@163.com")->send(new AppMail()); ``` ### 这里是控制台报错截图  ### 你期待的结果是什么?实际看到的错误信息又是什么?
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2022-01-18
Rango
signal=10 表示收到了 SIGUSR1 信号,请检查程序逻辑
赞
1
回复
2022-01-19
洋1024
回复
Rango
后来我发现在线上 `Docker` 环境中没有问题。 本地的 `Mac M1` 环境,未使用 `Docker`,会报如题错误。 并且发现在本地使用 `Guzzle` 网络请求 `https` 的会报如题同样的错误,只能使用 `http`,但线上环境是可以使用 `Guzzle` 请求 `https` 域名的。 在这个背景下,就肯定是环境导致了。 起先我怀疑是 `OpenSSL` 版本太高,我使用的是 `3.0` 导致,于是我降级到了 `1.1` 版本,但发现还是同样的结果。 在这种情况下,如何排查是哪块环境导致本地会报 `signal=10` 的错误。 不知道这种情况峰哥是否有大致思路供参考。
赞
1
回复
2023-05-11
kerwin7
你好 请问下这个问题你解决了吗 是什么原因造成的呢
赞
0
回复