谷歌关闭低安全应用Gmail访问后php_imap无法读邮件的解决方法
可行解决方案
谷歌2022年5月已正式下线低安全应用访问权限,直接使用账号明文密码通过IMAP登录Gmail的方式已完全失效,可根据自身场景选以下方案:
方案1:应用专用密码(代码改动量最小)
这个方案完全适配你现有的IMAP连接逻辑,仅需调整Gmail账号配置即可:
- 为目标Gmail账号开启两步验证,账号需提前绑定可接收验证码的手机号或身份验证器
- 两步验证开启后,在谷歌账号安全设置页找到「应用专用密码」入口,应用类型选择「邮件」,设备名称可自定义,生成16位长度的应用专用密码
- 将代码中传入
imap_open的密码参数从原账号登录密码替换为刚生成的16位应用专用密码,其余连接参数无需调整即可正常连接
调整后的代码参考:
$imap = imap_open("{imap.gmail.com:993/imap/ssl}INBOX", $_POST['username'], "生成的16位应用专用密码");
注意:填写密码时直接输入连续的16位字符串即可,不需要保留生成页面显示的分隔空格。
方案2:对接官方Gmail API(官方推荐,安全性更高)
如果不想开启两步验证,或需要更细粒度的权限管控,可以放弃原生IMAP协议,改用官方Gmail API对接:
- 在谷歌云控制台创建对应项目,启用Gmail API服务,创建OAuth2.0授权凭据
- 首次对接时通过OAuth标准授权流程获取账号的访问令牌、刷新令牌
- 后续请求携带有效访问令牌调用Gmail API即可完成邮件读取等操作,全程不需要存储用户的账号登录密码
- PHP生态有成熟的Gmail API封装类库可直接使用,无需从零手写授权、请求逻辑,权限颗粒度更细,也不容易触发账号安全风控。
方案3:第三方邮件服务中转
如果不想处理谷歌侧的复杂配置,可选择支持Gmail同步的第三方邮件服务做中转:先在第三方服务后台完成Gmail账号的授权绑定,再将代码中的IMAP连接地址、账号、密码替换为第三方服务分配的对应参数即可,代码改动量同样很小。
不要使用任何非官方手段绕过谷歌安全校验,这类操作极易触发Gmail账号风控,导致账号被临时限制甚至永久封禁。
内容的提问来源于stack exchange,提问作者Arif Akyol
相关产品推荐
相关产品推荐

