You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 10:26:11