PHP IMAP函数的变通方法?尝试使用XAMPP在本地主机上处理传入电子邮件

PHP IMAP函数的变通方法?尝试使用XAMPP在本地主机上处理传入电子邮件,php,email,xampp,localhost,imap,Php,Email,Xampp,Localhost,Imap,在我现在正在进行的项目中,我尝试添加一项功能,当用户向支持台发送电子邮件时,我可以将票据的状态从“关闭”更改为“重新打开”。我还想将他们的电子邮件回复保存到数据库中 我遇到的问题是,我无法让PHP的IMAP函数在我当前的Apache配置上工作。从stackoverflow和其他地方的许多帖子来看,问题似乎在于标准配置中没有启用OpenSSL。例如,当我运行此代码时: <h1>IMAP testing!</h1> <?php $connect = "{imap.gma

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

我遇到的问题是,我无法让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);
?>
除了重新编译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
telnet imap.gmail.com 993
openssl s_client -connect imap.gmail.com:993
stunnel -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);
?>
有趣的是,如果我将$connect更改为:

$connect = "{localhost:443/ssl}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文件

非常感谢


Tim

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

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

命令:

sudo stunnel /opt/local/etc/stunnel/stunnel.conf -c -d 127.0.0.1:443 -r imap.gmail.com:993
telnet imap.gmail.com 993
openssl s_client -connect imap.gmail.com:993
stunnel -c -d 127.0.0.1:443 -r imap.gmail.com:993
应该给你一个有效的连接。如果不成功,你就会发现问题所在

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

如果连接成功,则执行以下命令:

sudo stunnel /opt/local/etc/stunnel/stunnel.conf -c -d 127.0.0.1:443 -r imap.gmail.com:993
telnet imap.gmail.com 993
openssl s_client -connect imap.gmail.com:993
stunnel -c -d 127.0.0.1:443 -r imap.gmail.com:993
如果给您一个有效的连接,问题可能是您的libc客户端没有编译的SSL支持。在这种情况下,您不能将IMAP与PHP一起使用,您可以使用“stunnel”命令将来自本地机器的加密流量转发到gmail IMAP服务器

命令:

sudo stunnel /opt/local/etc/stunnel/stunnel.conf -c -d 127.0.0.1:443 -r imap.gmail.com:993
telnet imap.gmail.com 993
openssl s_client -connect imap.gmail.com:993
stunnel -c -d 127.0.0.1:443 -r imap.gmail.com:993
我们应该做到这一点。通过这种方式,您可以将PHP脚本连接到127.0.0.1:443:

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


Try$connect=“{imap.gmail.com:993/ssl/novalidate cert}收件箱”;(remove/imap/)感谢您的提示,但我很确定这是Apache配置的问题。我尝试了顺便说一句,没有改变,仍然是相同的错误。可能是端口993现在在您的防火墙中打开了,请尝试在localmachine上通过嵌入带有sslDid的php在localmachine上执行简单的php代码。您是否找到了解决方案?我在stunnel上也遇到了同样的错误。@pogo抱歉,没有,我在切换到Ubuntu后不久就不再有这个问题了。对不起,我在家工作,所以我想我是系统管理员:)。抱歉,我不确定如何在dport 993上检查传出TCP或查看DNS是否正在解析为imap.gmail.com。有什么建议吗?命令:telnet imap.gmail.com 993返回:Connected to gmail-imap.l.google.com.OK,因此连接似乎正常。不是OSX专家,但检查以下命令:openssl s_client-connect imap.gmail.com:993So,输入上述命令后,返回:CONNECTED(00000003)。下一步它会说:无法获取本地颁发者证书。不确定这是否是个问题。然后显示服务器证书,然后显示SSL握手和一些SSL会话数据。最后它说“*OK Gimap已准备好接受114.33.41.22 u70if18010275yhm.106的请求。读取:errno=0。'OK。阅读我编辑的答案。您可以使用stunnel命令解决问题。我是一个linux用户,我真的不知道stunnel在osx上是否可以…在gmail.com上查看-谷歌帐户是不是在设置中打开了IMAP?今天,当IMAP关闭时,我创建了一个新帐户。