PHP imap_open()太慢了?任何替代品?

时间:2014-04-17 21:42:59

标签: php email networking imap

我是否在使用IMAP邮件连接时出错?因为这需要至少40秒:

<?php
    $mbox = imap_open('{myhost.example.com:993/imap/ssl}INBOX', "mymail@example.com", "password");

    imap_close($mbox);
?>

它有效,但速度太慢。如你所见 - 一个基本的开放和关闭。好吧,40秒可能是可以接受的,但这之间没有任何操作!我尝试连接到gmail IMAP和我的个人主机IMAP服务器,结果很相似。

现在我尝试了这个:

<?php
    $mbox = imap_open('{myhost.example.com:993/imap/ssl}INBOX', "mymail@example.com", "password");

    $unreadMails = imap_search($mbox, 'UNSEEN');

    imap_close($mbox);
?>

通过连接到一个只有3封电子邮件(1封未读)的新创建的邮箱,当我从我的电脑上执行时,这需要大约80秒。然后我将这个PHP脚本上传到我的服务器并尝试在那里执行它,但它甚至更慢 - 它甚至没有设法执行,它超时了。

我做错了吗?

3 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。将域名更改为IP地址或禁用SSL没有帮助。 imap_open花了大约30秒,邮箱列表工作,但下载邮件导致异常。

事实证明我已经超出了GMail的带宽限制,因为我已下载了整个5 GB的邮箱:https://support.google.com/a/answer/1071518 所以我想我必须等一个月才能通过PHP再次访问它。

答案 1 :(得分:0)

通过openssl:

连接到邮件服务器,检查邮件服务器上启用了哪些身份验证方法
openssl s_client -connect myhost.example.com:993

寻找&#34; AUTH = ...&#34;条目,例如:

* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN AUTH=CRAM-MD5] Dovecot ready.

找出您正在使用的身份验证方法,并使用DISABLE_AUTHENTICATOR在imap_connect中禁用另一个身份验证方法。在我的情况下,CRAM-MD5需要很长时间,在另一种情况下

$mbox = imap_open('{myhost.example.com:993/imap/ssl}INBOX', "mymail@example.com", "password", NULL, 0, array('DISABLE_AUTHENTICATOR' => 'CRAM-MD5') );

或者:例如,在dovecot中禁用不需要的身份验证方法。如果您这样做,请确保不再被任何人使用,否则他们将无法访问其邮箱。

此解决方案基于与GSSAPI身份验证相关的此帖子: http://php.net/manual/en/function.imap-open.php#104701

正如几个Stackoverflow答案中所指出的,另一个解决方案是使用imap_open语句中的IP地址和端口号,而不是域名。不这样做显然会增加解决DNS条目的延迟并在某些情况下找到正确的端口。

答案 2 :(得分:0)

这是一个古老的版本,但是我发现使用imap4rev1可以大大缩短与Gmail的连接时间。