【发布时间】: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