【问题标题】:Workaround for PHP IMAP functions? Trying to work with incoming email on localhost using XAMPPPHP IMAP 函数的解决方法?尝试使用 XAMPP 在 localhost 上处理传入的电子邮件
【发布时间】:2012-05-21 22:00:26
【问题描述】:

在我现在正在进行的项目中,我正在尝试添加功能,当用户向支持台发送电子邮件时,我可以将工单的状态从“关闭”更改为“重新打开”。我还想将他们的电子邮件回复保存到数据库中。

我遇到的问题是我无法让 PHP 的 IMAP 函数在我当前的 Apache 配置上工作。从stackoverflow和其他地方的很多帖子来看,问题似乎是标准配置中没有启用OpenSSL。因此,例如,当我运行此代码时:

<h1>IMAP testing!</h1>
<?php
$connect = "{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX";
$user    = "my email address @gmail.com";
$pass    = "my password";

$mailbox = imap_open($connect, $user, $pass);
?>

我得到错误:

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

除了重新编译 PHP 之外,我还能做些什么来模仿本地机器上的 IMAP 功能,以便能够继续开发处理电子邮件(电子邮件管道)的功能?

关于我当前配置的一些说明,以防万一:

  • OS X 10.7.4
  • PHP v.5.3.1

更新 -

我快到了(感谢 dAm2K)!

我安装了 Stunnel(使用 Mac 端口),最后配置了所有内容并运行了命令:

sudo stunnel /opt/local/etc/stunnel/stunnel.conf -c -d 127.0.0.1:443 -r imap.gmail.com:993

(无论出于何种原因,我不得不将路径添加到 .conf 文件)

现在我的代码如下所示:

<?php
$connect = "{localhost:443}INBOX";
$user    = "my email address @gmail.com";
$pass    = "my password";

$mailbox = imap_open($connect, $user, $pass);
?>

现在当我加载页面时,它只会挂起 30 秒左右并发出警告:

Notice: Unknown: Connection failed to localhost,443: Operation timed out (errflg=2) in Unknown on line 0

有趣的是,如果我将 $connect 更改为:

$connect = "{localhost:443/ssl}INBOX";

$connect = "{localhost:443/novalidate-cert}INBOX";

我得到了原来的错误:

Notice: Unknown: Can't open mailbox {localhost:443/novalidate-cert}INBOX: invalid remote specification (errflg=2) in Unknown on line 0

有什么想法吗?只是一个猜测,但这可能与 stunnel 的设置有关,例如拥有自签名证书或我缺少的 stunnel.conf 文件?

非常感谢。

提姆

【问题讨论】:

  • 试试 $connect = "{imap.gmail.com:993/ssl/novalidate-cert}INBOX"; (删除 /imap/)
  • 感谢您的提示,但我很确定这是 Apache 配置的问题。顺便说一句,我试过了,没有任何变化,仍然是同样的错误。
  • 可能是 993 端口现在在您的防火墙中打开了,尝试通过嵌入 ssl 的 php 在 localmachine 执行简单的 php 代码
  • 您找到解决方法了吗?我在使用 stunnel 时遇到了同样的错误。
  • @pogo 对不起,我切换到 Ubuntu 后不久就没有这个问题了。对不起。

标签: php email xampp localhost imap


【解决方案1】:

您可能有一个防火墙,它阻止了在端口 993 上发送到 imap.gmail.com 的传出 TCP 数据包。

请您的系统管理员检查 dport 993 (imap) 上的传出 TCP。 还要检查您的 DNS 是否正在解析 imap.gmail.com:

命令:

telnet imap.gmail.com 993

应该给你一个有效的连接。如果不成功,则说明问题所在。

您可能希望在您的开发机器上安装 IMAP 服务器,以便继续离线开发...您可以安装“courier imap”包,但这不是一项非常简单的任务...

如果连接成功,命令:

openssl s_client -connect imap.gmail.com:993

给你一个有效的连接,问题可能是你的 libc-client 没有编译 SSL 支持。在这种情况下,你不能将 imaps 与 PHP 一起使用,你可以使用“stunnel”命令转发清除流量源自您的本地计算机并加密到 gmail IMAP 服务器。

命令:

stunnel -c -d 127.0.0.1:443 -r imap.gmail.com:993

应该可以解决问题。这样您就可以将您的 PHP 脚本连接到 127.0.0.1:443:

<?
  $connect = "{localhost:443}INBOX";
?>

【讨论】:

  • 我在家工作,所以我想我是系统管理员 :)。抱歉,我不确定如何检查 dport 993 上的传出 TCP 或查看 DNS 是否解析为 imap.gmail.com。有什么建议吗?命令:telnet imap.gmail.com 993 返回:已连接到 gmail-imap.l.google.com。
  • 好的,所以连接似乎有效。不是 OSX 专家,但可以查看以下命令:openssl s_client -connect imap.gmail.com:993
  • 所以,输入上述命令后,返回:CONNECTED(00000003)。接下来它确实说:无法获得本地颁发者证书。不确定这是否有问题。然后继续显示服务器证书,然后显示 SSL 握手,一些 SSL-Session 数据。最后它说'* OK Gimap 准备好接受来自 114.33.41.22 u70if18010275yhm.106 的请求。读取:errno=0。'
  • 好的。阅读我编辑的答案。您可以使用 stunnel 命令解决您的问题。我是linux用户,真不知道stunnel在osx上能不能用……
  • 在 gmail.com 检查 - 谷歌帐户是否在设置中打开了 IMAP?今天,我创建了一个新帐户,它关闭了 IMAP。
猜你喜欢
  • 2010-12-08
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 2015-07-31
  • 2011-01-07
  • 2012-05-07
  • 1970-01-01
  • 2010-10-01
相关资源
最近更新 更多