1

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 地址而不是主机名(这是除了指定端口之外)加快了速度,尽管问题仍然存在,因为事情变得越来越慢。

4

2 回答 2

1

这完全取决于您的网络和连接的 IMAP 服务器满足客户端请求的能力。imap_body 实际上是在获取邮件正文,邮件大小可能从几 kbs 到 20-25 mbs 不等。

客户端无能为力。

有时服务器会尝试限制连接以防数据传输过高,在这种情况下,您可以尝试重新连接连接并从先前的状态继续。

更新到 IP 不会对您有很大帮助,相反,我建议您仅使用主机名。

于 2013-02-20T04:24:20.260 回答
1

尝试在每 20/25 封邮件或下载 50/100mb 数据后重新连接到邮件服务器。我已经看到 IMAP 服务器在此之后降低了速度......

于 2013-02-20T05:01:00.943 回答