php - 使用 PHP 获取 Gmail:imap_open():无法打开流
问题描述
前言:
我已经阅读了几个 StackOverflow 线程并尝试了几乎所有线程。
- 我正在尝试通过 PHP 设置 IMAP 以使用Clivern/Imap获取一些电子邮件
- 我也试过 David Walsh 的帖子:Retrieve Your Gmail Emails Using PHP and IMAP
我做过的事情:
- 尝试使用 GSuite 和 Gmail 帐户;两者都启用了 IMAP。
- 允许连接“安全性较低的应用程序”(即使我在有效的 SSL 下运行)。已安装 OpenSSL(OpenSSL 1.0.2o 2018 年 3 月 27 日)
- 我已完成显示解锁验证码
- 我尝试在多个本地/托管环境中进行测试
问题:
- 当我使用 GSuite 时连接有效;当我使用 Gmail 时它失败了(我已经多次检查了电子邮件/密码并并排比较了 IMAP 设置......它们都可以)
- 尝试通过 Clivern 库检查 Gmail 时遇到的错误是:
Warning --> imap_open(): Couldn't open stream {imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX
- 尝试通过 PHP 函数检查 Gmail 时遇到的错误是:
Can not authenticate to IMAP server: [AUTHENTICATIONFAILED] Invalid credentials (Failure)
我的代码:
// Using Library
use Clivern\Imap\Core\Connection;
use Clivern\Imap\MailBox;
$imap_email = 'my_email@gmail.com';
$imap_password = 'my_password';
$connection = new Connection(
"imap.gmail.com",
"993",
$imap_email,
$imap_password,
"/ssl", // I've also tried /ssl/novalidate-cert
"INBOX"
);
$connection->connect();
$mailbox = new MailBox($connection);
$folders = $mailbox->getFolders();
echo var_dump($folders);
$connection->disconnect();
// Using PHP functions
$hostname = '{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX';
$username = $imap_email;
$password = $imap_password;
/* try to connect */
$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());
我的问题:
还有什么可能导致 Gmail 无法通过身份验证?
...我特别困惑为什么 GSuite 会工作而 Gmail 不会。
解决方案
我们有类似的问题
它与密码到期日期有关。
如果您尝试以隐身方式登录 - gmail 要求您更改密码?如果是,您可以更改 gmail 和您的代码中的密码 - 这可能会有所帮助
推荐阅读
- sql - 在子表单中访问子表单我无法访问字段值
- php - 动态地从 php 中的数组中获取缺失的日期值
- javascript - 在另一个页面的元素中加载页面 onclick
- laravel - Apache2 在 laravel 中显示子链接或路径的 404 错误
- c++ - 未解析的外部符号 x - 使用来自一个 Visual Studio 项目的 boost 测试测试同一解决方案中另一个项目的代码
- php - 非英文字符的数据库空间问题
- c# - 使用 C# 的数据表值之间的表达式
- excel - 将径向渐变应用于形状?
- c - 使用用户输入日期计算 X 天后的日期
- visual-studio-code - 如何在跳过 VS Code 中折叠的部分时垂直移动行?