Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP imap_open()太慢?还有别的选择吗?_Php_Email_Networking_Imap - Fatal编程技术网

PHP imap_open()太慢?还有别的选择吗?

PHP imap_open()太慢?还有别的选择吗?,php,email,networking,imap,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服务

我的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脚本上传到我的服务器并尝试在那里执行它,但速度更慢——它甚至无法执行,它超时了


我做错什么了吗?

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

原来我已经超过了GMail的带宽限制,因为我下载了整个5 GB邮箱:
因此,我想我必须等待一个月,直到我可以通过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 with 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身份验证相关的发布:


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

这是一个旧版本,但我发现使用imap4rev1可以显著加快与Gmail的连接时间。

不应该这样。与gmail的连接通常不到2秒钟。也许你的主机需要很长时间才能进行身份验证?我快疯了,所以我只有一台VPS主机来测试这个。它在那里工作得非常完美——在1-2秒内,我建立了连接,并设法找回了约50封邮件。但在我的本地主机上,完全相同的代码最多需要60秒,而在我的另一个共享主机上,代码会超时。我正在编写一个商业脚本,它将在许多不同的情况下运行,所以对我来说,它在任何地方都能很好地工作是很重要的。你可能发现了什么。我能看看我的主机进行身份验证需要多长时间吗?有没有办法加快这个过程?如果问题太模糊,对不起。有什么进展吗?我被困在同一个问题上。我发现这可能是DNS问题,但即使通过IP打开也无法解决问题。是的,请查看以下内容:@IanDess,遇到类似问题,但提供的链接似乎已断开。想解释一下你对这个问题的解决方案吗?谢谢,请举一个例子。这里没有足够的内容可以作为“好”答案。向上/向下投票表明答案的质量。完全不正确的内容刚刚删除。“答案可以是“不要那样做”……但一定要在你的答案中提及任何限制、假设或简化。简洁是可以接受的,但更完整的解释更好。”因此,是的,技术上是准确的,我不反对这些,但我确实看到其他人反对这些,所以你可能希望改进它。如果你这样做,@我和我会投票表决。看,哎哟。绝对是你的请求。例如:
$offset=1$限值=10;对于($id=$offset;$id<$limit;$id++){$emails[]=imap_fetchbody($mbox,$id);}