PHPMailer连接SMTP失败:stream_select()资源暂不可用问题求助
问题解决方案
核心原因分析
stream_select(): unable to select [11]错误在Windows Server 2019 + PHP 5.6环境下,主要是因为Windows系统默认的FD_SETSIZE限制(仅64),而PHPMailer 6.x使用的stream_socket_client生成的文件描述符(max_fd=764)远超这个数值,导致stream_select调用失败。Classic ASP能正常运行是因为它使用的邮件组件没有这个限制问题。
具体修复步骤
强制PHPMailer使用旧连接方式
在初始化PHPMailer实例后添加一行代码,跳过stream_socket_client,改用兼容性更好的fsockopen:$mail->useSendmailOptions = false;缩短连接超时时间
把默认300秒的超时时间改短,减少资源占用:$mail->Timeout = 10; // 可根据实际情况调整为5-15秒检查PHP扩展状态
确认php.ini中php_openssl.dll和php_sockets.dll已启用,且扩展版本与PHP 5.6完全匹配,Windows下扩展不兼容也可能触发此类资源错误。临时修改PHPMailer核心文件
如果上述方法无效,找到PHPMailer的SMTP.php文件,定位到日志中报错的1238行(stream_select调用处),替换为以下代码绕过该函数:// 注释原stream_select代码,替换为: stream_set_timeout($this->smtp_conn, $this->Timeout); $response = fgets($this->smtp_conn, 4096);重置IIS应用池
应用池长时间运行可能导致socket资源泄漏,重置应用池释放占用的资源后再测试邮件发送。
验证方法
修改配置后发送测试邮件,查看SMTPDebug输出,若出现服务器返回的220等正常响应码,说明问题已解决。
内容的提问来源于stack exchange,提问作者imvain2
相关产品推荐
相关产品推荐

