我是否在使用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脚本上传到我的服务器并尝试在那里执行它,但它甚至更慢 - 它甚至没有设法执行,它超时了。
我做错了吗?
答案 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的连接时间。