gpt4 book ai didi

php - 与 Gmail 的 IMAP 连接非常慢

转载 作者:搜寻专家 更新时间:2023-10-31 21:01:36 24 4
gpt4 key购买 nike

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

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

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

阅读 120 封电子邮件的时间非常不同。对于 Gmail,整个脚本大约需要 5 秒,1.2 连接和 3.8 读取电子邮件,0.1629 连接和 0.0238。

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

到目前为止我做了什么:

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

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

在这两种情况下,它的工作原理是一样的,速度非常慢。

有人能帮帮我吗?

后期编辑:

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

最佳答案

根据我的经验,要使其以某种可用的方式工作,您需要首先了解 Web Mail 平台的工作原理。在页面上查看电子邮件时,提供商不会在登录页面时从电子邮件服务器中提取所有电子邮件。如果这是常态,那么服务器/磁盘将一直与负载作斗争。查询受到控制,通常一次在屏幕上显示大约 50-100 个项目。有些甚至看起来所有项目都在显示 (Outlook Web Access),但实际上它们在用户滚动时开始搜索。我建议您使用下面的脚本进行测试,该脚本限制了获取查询的结果数量。它是为测试类似问题而构建的,并且非常适合测试。将 $mailNumber 更改为您要在屏幕上打印的记录数 (INT) 并进行测试。可以选择每封电子邮件,您应该会看到纯 TextView (除非电子邮件仅用 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 数据的电子邮件客户端,这样他们只会 checkin 新邮件,然后将邮件存储在客户端上为什么这些症状不会引人注意。

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

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

进一步评论回复:

正如您提到的那样,无论您使用 API 还是 IMAP,您都是通过一种协议(protocol)访问服务,如果您的代码已被优化,您将无法真正控制速度。上面的示例删除了用于测试的 Javascript/HTML bloatware。由于这没有显示出真正的速度改进,并且您已经确认 IMAP 在您的托管平台上工作得更快,问题出在 Gmail 或您的 ISP 上,因此如果您有任何解决的机会,您需要直接与他们联系。我非常怀疑这是您的 ISP,但如果您无法使用 Google,它仍然是一个调用点。我会建议 DNS 更改,但我可以看到您已经进行了相关更改,希望能够解决(尤其是通过 IP 进行测试)。

关于php - 与 Gmail 的 IMAP 连接非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41089681/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com