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

ZF2框架下Gmail SMTP发送邮件被Google阻止问题求助

解决Google阻止Zend Framework通过SMTP发送Gmail邮件的问题

嘿,这个问题我之前帮朋友排查过!Google最近对账号安全验证的规则收紧了,普通的账号密码登录SMTP的方式很容易被拦截,咱们来一步步解决:

核心原因

Google现在默认禁止非官方/低安全等级的应用直接使用账号密码访问SMTP服务,哪怕你之前一直用得好好的,也可能因为账号安全策略更新被突然阻止。

解决方案(按推荐程度排序)

1. 开启两步验证(2FA)并使用App Password(最推荐)

这是Google目前认可的安全方式,步骤如下:

  • 登录你的Google账号,进入「安全」设置页面,开启两步验证(需要绑定手机号或其他验证方式)
  • 开启后,在「安全」页面找到「App Passwords」选项(只有开启2FA后才会显示)
  • 生成一个新的App Password,选择应用类型为「邮件」,设备选「其他(自定义名称)」比如你的Web应用名称
  • 把生成的16位App Password替换到代码里的password字段,其他配置保持不变

修改后的代码示例:

$smtpOptions = new \Zend\Mail\Transport\SmtpOptions();
$smtpOptions->setHost('smtp.gmail.com')
    ->setConnectionClass('login')
    ->setName('smtp.gmail.com')
    ->setConnectionConfig(array(
        'username' => 'something@gmail.com',
        'password' => 'xxxx xxxx xxxx xxxx', // 这里填生成的App Password
        'ssl' => 'tls',
        'port' => 587, // 显式指定端口587,避免自动识别出错
    ));
$transport = new \Zend\Mail\Transport\Smtp($smtpOptions);
$transport->send($message);

2. 临时开启「不太安全的应用访问」(不推荐长期使用)

如果暂时不想开启2FA,可以试试这个临时方案,但注意Google正在逐步移除这个选项,部分账号可能已经看不到了:

  • 进入Google账号「安全」设置,找到「不太安全的应用访问」选项并开启
  • 开启后等待几分钟再测试发送邮件,不过这个方式会降低账号安全性,不建议生产环境使用

3. 改用OAuth 2.0认证(生产环境首选)

如果你的Web应用是面向用户的生产环境,推荐使用OAuth 2.0进行认证,这是Google官方推荐的长期解决方案:

  • 先在Google Cloud Console创建一个项目,启用Gmail API
  • 创建OAuth客户端ID,配置授权回调地址
  • 在Zend Framework中集成OAuth 2.0客户端,获取访问令牌后配置到SMTP连接中
  • 这种方式不需要存储账号密码,安全性更高,也不会被Google拦截

额外排查点

  • 检查你的Google账号安全活动记录,看看有没有异常登录提示,如果有的话,点击「这是我」来解锁账号
  • 确保代码中的ssl设置为tls,端口是587(不要用465的ssl方式,容易被拦截)
  • 确认你的服务器IP没有被Google列入黑名单,可以通过发送测试邮件到其他邮箱排查是否是IP问题

内容的提问来源于stack exchange,提问作者José Carlos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:47:30