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),本地环境没有配置或安装这类程序,导致发送失败。
正确操作步骤:
- 改用gmail传输配置:代码里初始化Mailer时指定
gmail,而不是default:
$mailer = new Mailer('gmail'); $mailer->setFrom(['***@gmail.com' => 'Savepets']) ->setTo('****@gmail.com') ->setSubject('About') ->deliver('blablabla');
- 修正Gmail认证信息:
- 确保配置里的
username是你的实际Gmail地址; - Gmail现在不允许用普通密码登录第三方应用,需要先开启两步验证,然后生成应用专用密码,把这个密码填到配置的
password字段。
- 确保配置里的
- 确认配置参数:gmail传输的
host、port、tls参数已经正确,保持默认即可。
内容的提问来源于stack exchange,提问作者Iria
相关产品推荐
相关产品推荐

