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

CakePHP 4 Mailer无法连接TCP:本地发邮件报错求助

本地环境发送邮件失败问题排查与解决

我在本地环境的控制器中尝试发送邮件(代码中***为实际Gmail地址),代码如下:

$mailer = new Mailer('default');
$mailer->setFrom(['***@gmail.com' => 'Savepets'])
    ->setTo('****@gmail.com')
    ->setSubject('About')
    ->deliver('blablabla');

初始app_local.php配置:

'EmailTransport' => [
    // Sample Mail configuration
    'default' => [
        'className' => 'Smtp',
        'host' => 'localhost',
        'port' => 25,
        'username' => null,
        'password' => null,
        'client' => null,
        'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null),
    ],
    // Sample SMTP configuration
    'gmail' => [
        'host' => 'smtp.gmail.com',
        'port' => 587,
        'username' => 'my@gmail.com',
        'password' => 'secret',
        'className' => 'Smtp',
        'tls' => true
    ]
],

运行后出现错误:

stream_socket_client(): unable to connect to tcp://localhost:25 (Connection refused)

我尝试修改app_local.php配置,把default的className改成Mail:

'EmailTransport' => [
    // Sample Mail configuration
    'default' => [
        'className' => 'Mail',
        'host' => 'localhost',
        'port' => 25,
        'username' => null,
        'password' => null,
        'client' => null,
        'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null),
    ],
    // Sample SMTP configuration
    'gmail' => [
        'host' => 'smtp.gmail.com',
        'port' => 587,
        'username' => 'my@gmail.com',
        'password' => 'secret',
        'className' => 'Smtp',
        'tls' => true
    ]
],

修改后又出现错误:

Could not send email: unknown

问题原因与解决方法

  • 第一个错误原因:代码里用了default传输配置,这个配置指向本地SMTP服务(localhost:25),但本地环境没有搭建邮件服务器,所以连接被拒绝。
  • 第二个错误原因:改成Mail类后,它依赖系统自带的邮件发送程序(比如sendmail),本地环境没有配置或安装这类程序,导致发送失败。

正确操作步骤:

  1. 改用gmail传输配置:代码里初始化Mailer时指定gmail,而不是default:
$mailer = new Mailer('gmail');
$mailer->setFrom(['***@gmail.com' => 'Savepets'])
    ->setTo('****@gmail.com')
    ->setSubject('About')
    ->deliver('blablabla');
  1. 修正Gmail认证信息:
    • 确保配置里的username是你的实际Gmail地址;
    • Gmail现在不允许用普通密码登录第三方应用,需要先开启两步验证,然后生成应用专用密码,把这个密码填到配置的password字段。
  2. 确认配置参数:gmail传输的host、port、tls参数已经正确,保持默认即可。

内容的提问来源于stack exchange,提问作者Iria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:43:37