首页 > 解决方案 > 使用 PHP 获取 Gmail:imap_open():无法打开流

问题描述

前言:

我已经阅读了几个 StackOverflow 线程并尝试了几乎所有线程。

  1. 我正在尝试通过 PHP 设置 IMAP 以使用Clivern/Imap获取一些电子邮件
  2. 我也试过 David Walsh 的帖子:Retrieve Your Gmail Emails Using PHP and IMAP

我做过的事情:

  1. 尝试使用 GSuite 和 Gmail 帐户;两者都启用了 IMAP。
  2. 允许连接“安全性较低的应用程序”(即使我在有效的 SSL 下运行)。已安装 OpenSSL(OpenSSL 1.0.2o 2018 年 3 月 27 日)
  3. 我已完成显示解锁验证码
  4. 我尝试在多个本地/托管环境中进行测试

问题:

  1. 当我使用 GSuite 时连接有效;当我使用 Gmail 时它失败了(我已经多次检查了电子邮件/密码并并排比较了 IMAP 设置......它们都可以)
  2. 尝试通过 Clivern 库检查 Gmail 时遇到的错误是:Warning --> imap_open(): Couldn't open stream {imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX
  3. 尝试通过 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 不会。

标签: phpgmail-imap

解决方案


我们有类似的问题

它与密码到期日期有关。

如果您尝试以隐身方式登录 - gmail 要求您更改密码?如果是,您可以更改 gmail 和您的代码中的密码 - 这可能会有所帮助


推荐阅读