我在使用IMAP时遇到了一些问题。 基本上,我连接到服务器以获取文件夹名称,为每个文件夹重新连接,循环遍历每条消息并执行我需要的操作。
它的工作除了事实上事情变得越来越慢。有这个想法吗?我有一种有趣的感觉,它与imap_body有关,因为它似乎导致了这个问题。我是否需要以某种方式为每个循环清除它?
我的代码看起来与此类似(但是删除了一些位)......
$Mailbox = imap_open("$Hostname", "$Username", "$Password") or die('Error: ' . imap_last_error());
$List = imap_list($Mailbox, "$Hostname", "*");
if(is_array($List))
{
foreach ($List as $Folder)
{
$FolderName = imap_utf7_decode($Folder);
$FolderStream = imap_reopen($Mailbox, "$Folder") or die('Error: ' . imap_last_error());
$FolderCount = imap_num_msg($Mailbox);
for($i=1;$i<=$FolderCount;$i++)
{
$EmailBody = imap_body($Mailbox, $i);
// Do whatever I need here
}
}
}
imap_close($Mailbox);
更新 我通过使用服务器的IP地址而不是主机名加速了一点(这是除了指定端口之外),尽管问题仍然存在,因为事情变得越来越慢。
答案 0 :(得分:1)
这完全取决于您的网络和连接IMAP服务器满足客户端请求的能力。 imap_body实际上是获取邮件正文,邮件大小可能从几kbs到20-25 mbs不等。
客户端无法做任何事情。
有时,如果数据传输过高,服务器会尝试限制连接,在这种情况下,您可以尝试重新连接连接并从之前的状态继续。
更新到IP不会对您有很大帮助,我建议您仅使用主机名。
答案 1 :(得分:1)
每隔20/25邮件或下载50 / 100mb的数据后,尝试重新连接到邮件服务器。 我看到IMAP服务器在此之后降低了速度......