
自2022年5月30日起,google停用“低安全性应用访问权限”,导致原有账号密码直连imap的方式失效;需启用两步验证并使用应用专用密码替代常规密码。
自2022年5月30日起,google停用“低安全性应用访问权限”,导致原有账号密码直连imap的方式失效;需启用两步验证并使用应用专用密码替代常规密码。
Google于2022年5月30日正式终止对“不安全应用”(即未使用OAuth 2.0且仅依赖用户名+密码进行IMAP/SMTP认证的应用)的支持。这意味着,若你仍在PHP中使用imap_open()配合Gmail账户的主密码连接{imap.gmail.com:993/imap/ssl},将收到类似以下错误:
Warning: imap_open(): Couldn't open stream {imap.gmail.com:993/imap/ssl}INBOX该错误并非网络或PHP配置问题,而是Google服务器主动拒绝了基于主密码的认证请求。
✅ 正确解决方案如下(三步完成):
启用两步验证(2-Step Verification)
访问 https://www.php.cn/link/e9947b970456f26dd9fe5f427ded41fa → 在“登录与安全性”下开启「两步验证」。这是生成应用专用密码的前提条件。生成应用专用密码(App Password)
启用两步验证后,进入「应用专用密码」页面(https://www.php.cn/link/02d1941438bbd398f00e76203eeee9ea)→ 选择应用类型为「邮件」、设备类型可选「其他(自定义名称)」→ 点击「生成」→ 复制生成的16位密码(如 abcd efgh ijkl mnop,注意:空格仅为显示分隔,实际使用时无需空格)。-
更新PHP代码,使用应用密码替代主密码
修改imap_open()调用,将原账号密码替换为应用专用密码:$email = 'yourname@gmail.com'; $app_password = 'abcdefghijklmnop'; // 替换为上一步生成的16位无空格密码 $connection = imap_open( '{imap.gmail.com:993/imap/ssl}INBOX', $email, $app_password ); if (!$connection) { die('IMAP connection failed: ' . imap_last_error()); } echo "Connected successfully!"; imap_close($connection);
⚠️ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
- 应用专用密码仅适用于启用了两步验证的账户,且每个密码仅对应一个应用/设备;
- 不要将应用密码硬编码在生产环境代码中,建议通过环境变量(如.env)管理:
$app_password = $_ENV['GMAIL_APP_PASSWORD'] ?? '';
- 若仍失败,请确认:
- Gmail账户已开启IMAP(设置 → 转发和POP/IMAP → 启用IMAP);
- 防火墙或网络未屏蔽端口993;
- PHP已启用ext-imap扩展(Linux下通常需安装php-imap包并重启Web服务)。
? 补充建议:长期项目推荐迁移到OAuth 2.0认证(如使用google/auth + php-imap兼容库),以符合Google安全最佳实践并支持刷新令牌机制。但对轻量级脚本,应用专用密码仍是简单、稳定、合规的过渡方案。



















