当前位置: 首页 > 知识库问答 >
问题:

非常慢IMAP连接到Gmail

鲁华皓
2023-03-14

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

我已经运行了两个测试案例:

  1. 使用 IMAP 从我自己的域读取电子邮件。
  2. 使用 IMAP 从 gmail 读取电子邮件。

读120封邮件的时间差别很大。对于Gmail,整个脚本需要大约5秒,其中1.2秒连接,3.8秒阅读邮件,0.1629秒连接,0.0238秒阅读邮件。

这些价值观与我的预期大相径庭。

到目前为止我所做的:

>

  • 我已经为谷歌配置了DNS服务器。
  • 我尝试以两种方式调用服务器:

    • 直接:imap.gmail。com
    • 直接通过IP

    在这两种情况下,效果都一样,非常慢。

    有人能帮我吗?

    稍后编辑:

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

  • 共有2个答案

    卜和悌
    2023-03-14

    检查ping时间imap.gmail.com---对我来说

    胡弘毅
    2023-03-14

    根据我的经验,要以某种有用的方式工作,您需要首先了解Web邮件平台是如何工作的。当在页面上查看电子邮件时,提供商不会在登录页面时从电子邮件服务器中提取所有电子邮件。如果这是常态,那么服务器/磁盘将一直与负载斗争。查询是受控的,通常在屏幕上一次显示大约50-100个项目。有些甚至给出了所有项目都在显示的外观(Outlook Web Access),但事实上,当用户滚动时,它们正在启动搜索。我建议您使用下面的脚本进行测试,该脚本限制了fetch查询的结果量。它是为测试类似的问题而构建的,非常适合测试。将$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数据,然后经常将其与GmailIMAP服务器进行比较。这样,你唯一的瓶颈就是你的数据库。尽管如此,你需要直接向谷歌提出这个问题,但我怀疑他们会为免费服务提供多少帮助。

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

    进一步评论回复:

    正如您松散地提到的,无论您使用的是API还是IMAP,您都可以通过一个协议访问服务,如果您的代码经过优化,您就无法真正控制速度。上面的示例删除了用于测试的Javascript/HTML膨胀软件。由于这并没有显示出真正的速度提升,而且您已经确认IMAP在您的托管平台上运行得更快,问题在于Gmail或您的ISP,因此如果您有任何解决方案,您需要直接与他们联系。我非常怀疑这是你的ISP,但如果你在谷歌没有任何进展,它仍然是一个呼叫点。我会建议DNS更改,但我可以看到您已经进行了相关更改,希望解决(特别是通过IP进行测试)。

     类似资料:
    • HttpURL连接。与使用相同服务器端服务的iPhone应用程序相比,getInputStream需要花费大量时间。 以下代码用于服务: 为了检查服务在哪里花费时间,我将日志条目放在打印TimeStamp上。 该过程的平均时间如下: 发送到服务器的平均时间不到2百万秒< br >创建输入流的平均时间几乎需要5秒 写入响应的平均时间少于2密耳秒。 知道为什么输入流要花很多时间,使得整个服务非常慢吗?

    • 我有这个代码可以通过IMAP连接到Gmail 我总是会遇到这个例外,指向商店。connect() 我已经检查了谷歌的所有信息,如果我是对的,IMAP的端口是993。用户名和密码绝对正确。我想我错过了一些东西,但我无法弄清楚。 任何帮助都将不胜感激! 编辑 添加邮件后。debug,我得到了这些日志,但我仍然停留在商店里。connect() 它已登录,但仍卡在connect上。。

    • 问题内容: 我很想使用BrowserSync进行开发。但是,页面加载(不仅是更改后重新加载)非常慢。 我使用模式。在没有BrowserSync的情况下浏览网页的速度应该很快。 原因之一可能是我安装BrowserSync时出现以下错误: 我从头开始安装节点(使用和软件包安装程序),但无法摆脱错误。 此外,如果使用Gulp或在命令行上运行BrowserSync,也没有什么不同。 任何想法? 问题答案:

    • 问题内容: 一些背景信息:我想在Red Hat服务器上运行脚本以从/ dev / random中读取一些数据,并使用Perl unpack()命令将其转换为十六进制字符串,以备后用(基准数据库操作)。我在/ dev / random上运行了一些“ head -1”,它看起来工作得很好,但是多次调用后,它还是会挂起。几分钟后,它将最终输出一小段文本,然后结束。 我切换到/ dev / urandom

    • 问题内容: 这是我用来填写QT Designer中绘制的表格的代码。设计为对任何表通用,它可以正常工作,但是…当我尝试显示包含18列和〜12000行的datasat时,它冻结30秒或更长时间。因此,我做错了什么,有没有办法加快速度,保持代码仍然适合任何表? 那是我的代码: 问题答案: 这里是一个测试脚本,它比较了几种填充表格的方法。 自定义模型要快得多,因为它不必先创建所有项- 但请注意,这是一个

    • 我试图使用Java Swing/AWT 2D图形在窗口中显示一些非常基本的信息。在这一点上,我只是画了一些弦,但是尽管这个任务看起来并不困难,但它运行得非常慢。 我是不是根本上错过了什么?