PHP imap_open() 太慢?还有其他选择吗?

标签 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 封未读)的新创建的邮箱,当我从我的 PC 上执行它时,这花了大约 80 秒。然后我将这个 PHP 脚本上传到我的服务器并尝试在那里执行它,但它更慢 - 它甚至没有设法执行,它超时了。

我做错了什么吗?

最佳答案

通过 openssl 连接到您的邮件服务器,检查启用了哪些身份验证方法:

openssl s_client -connect myhost.example.com:993

查找“AUTH=...”条目,示例:

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

找出您实际使用的身份验证方法,并在您的 imap_connect 中使用 DISABLE_AUTHENTICATOR 禁用另一种方法。在我的例子中,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 条目和找到正确端口的延迟。

关于PHP imap_open() 太慢?还有其他选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23143967/

相关文章:

Php、MySql、具有两个计数的单个查询

C# 相当于 "use windows authentication"?

linux - 使用 netcat 进行两个端口之间的外部环回测试

php - 更新观看次数,最可靠的方法

php - 使用 jquery AJAX 将数据发送到 php 并检索响应

php - 拉维尔 5 : Use Redis PCEL extension

php, strtolower 和 mb_strtolower 有什么区别?

python - 通过 Python 将 Excel 剪辑粘贴到电子邮件正文

networking - MVC 到 MVVM 与网络 : Architectural appraoch/best practices

java - 如何将 Android 程序套接字到本地主机服务器?