与Gmail的IMAP连接非常慢

时间:2016-12-11 18:40:03

标签: php gmail imap

我正在使用David Walsh中的脚本,该脚本通过IMAP连接到Gmail,并在屏幕上输出电子邮件数据。

我运行了两个测试用例:

  1. 使用IMAP从我自己的域中阅读电子邮件。
  2. 使用IMAP从gmail阅读电子邮件。
  3. 阅读120封电子邮件的时间非常不同。 对于Gmail,整个脚本大约需要5个,1.2个连接和3.8个阅读电子邮件和0.1629连接和0.0238。

    这些值与我的预期非常不同。

    到目前为止我做了什么:

    1. 我为谷歌配置了DNS服务器。
    2. 我尝试过两种方式调用服务器:

      • 直接:imap.gmail.com
      • 通过IP直接
    3. 在这两种情况下,它的工作方式都相同,但速度很慢。

      任何人都可以帮助我吗?

      LATER EDIT:

      有些人问我是否使用过Gmail API。是的我使用过它,它比Google IMAP解决方案慢。 我需要每1秒使用IMAP扫描我的Google邮箱。 我知道它可以完成,因为我正在复制另一个应用程序,我知道这肯定是这样做的。

1 个答案:

答案 0 :(得分:2)

根据我的经验,为了使其以某种可用的方式工作,您需要先了解Web Mail平台的工作原理。在页面上查看电子邮件时,提供商在登录页面时不会从电子邮件服务器中提取所有电子邮件。如果这是常态,那么服务器/磁盘将一直困扰着负载。查询受到控制,通常在屏幕上一次显示约50-100个项目。有些甚至给出了所有项目都显示的外观(Outlook Web Access),但实际上它们在用户滚动时开始搜索。我建议您使用下面的脚本进行测试,该脚本限制了获取查询的结果量。它是为测试类似问题而构建的,非常适合测试。将$mailNumber更改为您要在屏幕上打印的记录数量(INT)并进行测试。可以选择每封电子邮件,您应该看到纯文本视图(除非电子邮件仅以HTML格式编写)。我还禁用了SSL验证,因为这也会减慢连接的响应时间。

$imapServ = "imap.server.com";
$imapPort = "993";
$imapUser = "EMAIL";
$imapPass = "PASSWORD";

$mbox = imap_open("{" . $imapServ . ":" . $imapPort . "/imap/ssl/novalidate-cert}INBOX", $imapUser, $imapPass);

if (isset($_GET['email'])) {

    $result = imap_fetchbody($mbox, $_GET['email'], 1);

    echo "<p>$result</p>";
    echo "<br>";
    echo "<b><a href=\"" . $_SERVER['SCRIPT_NAME'] . "\">Back To List</a></b>";


} else {

    $mc = imap_check($mbox); //Total count of mail in inbox
    $mailNumber = $mc->Nmsgs / 20; //Set Number for Email List Here
    $result = imap_fetch_overview($mbox,"1:" . round($mailNumber) . "",0); 

    foreach ($result as $v) {

        echo "<a href=\"" . $_SERVER['SCRIPT_NAME'] . "?email=" . $v->uid . "\"><b>From:</b>" . $v->from . " <b>Subject: </b>" . $v->subject . " <b>Date: </b>" . $v->date . "</a>";
        echo "<br>";

    }
}

对评论的回应:

因为这只发生在Gmail上,而且我猜你有稳定的互联网连接,我怀疑问题归结为Gmail限制外部IMAP连接的带宽。为了证明这一点,请在其他提供商上进行测试并调查结果。不要忘记大多数人使用Gmail门户(无疑直接连接到未受限制的IMAP数据服务器)和缓存IMAP数据的电子邮件客户端,这样他们只会检入新邮件然后将邮件存储在客户端上为什么这些症状不明显。

可能还值得考虑使用数据库解决方案来存储IMAP数据,然后经常将其与Gmail IMAP服务器进行比较。这样你唯一的瓶颈就是你的数据库。 Baring,你需要通过谷歌直接提出这个,但我怀疑他们会为免费服务提供很多帮助。

您的最后一个选择是使用完全不同的解决方案。 Google有一个Gmail API,因此您可以看到这是否可以更快地从给定邮箱中提取数据。

进一步评论回复:

正如您经常提到的,无论您是使用API​​还是IMAP,您都可以通过协议访问服务,如果您的代码已经过优化,那么您无法真正控制速度。上面的示例删除了用于测试的Javascript / HTML英国媒体报道软件。由于这显示没有真正的速度改进,并且您已经确认IMAP在您的托管平台上的运行速度更快,因此问题在于Gmail或您的ISP,因此如果您有任何解决的机会,您需要直接与他们联络。我非常怀疑这是你的ISP,但如果你没有与谷歌相处,它仍然是一个电话。我建议DNS更改,但我可以看到您已经做了相关的更改,希望解决(特别是通过IP测试)。