【问题标题】:PHP imap_open(): invalid remote specification when trying connect to GMAILPHP imap_open():尝试连接到 GMAIL 时远程规范无效
【发布时间】:2011-10-07 07:45:15
【问题描述】:

我正在尝试从 Gmail 中检索邮件并收到以下错误:

Can't open mailbox {imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX: invalid remote specification

OpenSSL 和 IMAP 安装在我的服务器中,以下是来自 phpinfo() 的 openssl 和 imap 信息;

openssl
OpenSSL support enabled
OpenSSL Library Version OpenSSL 0.9.7l 28 Sep 2006
OpenSSL Header Version

imap

IMAP c-Client Version   2007e
Kerberos Support    enabled

我现在真的很困惑,请帮忙!

【问题讨论】:

  • 我会寻找imap_errors,也许还有警报。但是,如果这是在网络层(提示:SSL),您可能需要更新您的 SSL 库。

标签: php imap


【解决方案1】:

对于 Docker,我了解到在调用 docker-php-ext-install 时会发生此错误 之前 docker-php-ext-configure,这是我错误的。所以Dockerfile 中的RUN 指令必须如下所示:

FROM php:8-fpm-alpine
# ...
RUN apk add imap-dev openssl-dev \
    && docker-php-ext-configure imap --with-imap --with-imap-ssl \
    && docker-php-ext-install imap

而不是

RUN apk add imap-dev openssl-dev \
    && docker-php-ext-install imap \
    && docker-php-ext-configure imap --with-imap --with-imap-ssl

否则,imap 扩展似乎已安装 - 像 function_exists('imap_open') 这样的调用将返回 true。但是所有对imap_open的电话 将因上述错误而失败:

无效的远程规范

即使它是经过广泛证明的正确远程规范,例如来自例如 {imap.gmail.com:993/imap/ssl/novalidate-cert/norsh}INBOX{imap.gmail.com:993/imap/ssl}INBOX this article。所以请确保您先配置然后安装扩展。

【讨论】:

    【解决方案2】:
     $iconnect = imap_open("{imap.gmail.com:993/ssl/novalidate-cert}INBOX","user@gmail.com","passwordofuser") or die(imap_errors());
    

    检查此代码,这将连接到 gmail 服务器。

    【讨论】:

      【解决方案3】:

      我也遇到过类似的问题。我可以根据个人经验告诉你,虽然你可能安装了 IMAP 和 OpenSSL,但你可能需要重新编译 php install "--with-imap-ssl[=DIR]"。我想做同样的事情并收到同样的错误。我还安装了相同的 OpenSSL 和 IMAP 版本。我已经重新编译了 php,这是我的配置:

      ./configure --prefix=/usr/local/apache2/php --with-imap=/usr/local/imap-2007f/ --with-curl=/usr/local/curl/ --enable-套接字 --with-imap-ssl=/usr/local/ssl --with-openssl --with-apxs2=/usr/local/apache2/bin/apxs --with-kerberos --without-iconv

      您当然不需要使用相同的配置,因为它是根据我的需要定制的。

      如果你对编译php不熟悉,可以在这里找到源码:
      http://www.php.net/downloads.php
      这是关于如何编译 php 和 apache 的基本教程,假设您在 UNIX 上。它还包括如何用 curl 编译它们,你可以使用 curl 的所有指令并分别用 ssl 和 imap 替换它们,它应该可以工作。 http://thermo.sdsu.edu/testhome/phpinstall.html

      【讨论】:

      • 修复了我遇到的问题 - 启用了 OpenSSL 和 imap,但仍然出现错误。重新编译 php --with-imap-ssl 并且现在可以工作了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多