我的 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/