- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用来自 David Walsh 的脚本它通过 IMAP 连接到 Gmail 并在屏幕上输出电子邮件数据。
我已经运行了两个测试用例:
阅读 120 封电子邮件的时间非常不同。对于 Gmail,整个脚本大约需要 5 秒,1.2 连接和 3.8 读取电子邮件,0.1629 连接和 0.0238。
这些值与我的预期非常不同。
到目前为止我做了什么:
我试过用两种方式调用服务器:
在这两种情况下,它的工作原理是一样的,速度非常慢。
有人能帮帮我吗?
后期编辑:
有些人问我是否使用过 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/
我知道这个问题可能已经被问过,但我检查了所有这些,我认为我的情况有所不同(请友善)。所以我有两个数据集,第一个是测试数据集,第二个是我保存在数据框中的预测(预测值,这就是没有数据列的原因)。我想合并两
在 .loc 方法的帮助下,我根据同一数据框中另一列中的值来识别 Panda 数据框中某一列中的值。 下面给出了代码片段供您引用: var1 = output_df['Player'].loc[out
当我在 Windows 中使用 WinSCP 通过 Ubuntu 连接到 VMware 时,它提示: The server rejected SFTP connection, but it lis
我正在开发一个使用 xml web 服务的 android 应用程序。在 wi-fi 网络中连接时工作正常,但在 3G 网络中连接时失败(未找到 http 404)。 这不仅仅发生在设备中。为了进行测
我有一个XIB包含我的控件的文件,加载到 Interface Builder(Snow Leopard 上的 Xcode 4.0.2)中。 文件的所有者被设置为 someClassController
我在本地计算机上管理 MySQL 数据库,并通过运行以下程序通过 C 连接到它: #include #include #include int main(int argc, char** arg
我不知道为什么每次有人访问我网站上的页面时,都会打开一个与数据库的新连接。最终我到达了大约 300 并收到错误并且页面不再加载。我认为它应该工作的方式是,我将 maxIdle 设置为 30,这意味着
希望清理 NMEA GPS 中的 .txt 文件。我当前的代码如下。 deletes = ['$GPGGA', '$GPGSA', '$GPGSV', '$PSRF156', ] searchquer
我有一个 URL、一个用户名和一个密码。我想在 C# .Net WinForms 中建立 VPN 连接。 你能告诉我从哪里开始吗?任何第三方 API? 代码示例将受到高度赞赏... 最佳答案 您可以像
有没有更好的方法将字符串 vector 转换为字符 vector ,字符串之间的终止符为零。 因此,如果我有一个包含以下字符串的 vector "test","my","string",那么我想接收一
我正在编写一个库,它不断检查 android 设备的连接,并在设备连接、断开连接或互联网连接变慢时给出回调。 https://github.com/muddassir235/connection_ch
我的操作系统:Centos 7 + CLOUDLINUX 7.7当我尝试从服务器登录Mysql时 [root@server3 ~]# Mysql -u root -h localhost -P 330
我收到错误:Puma 发现此错误:无法打开到本地主机的 TCP 连接:9200(连接被拒绝 - 连接(2)用于“本地主机”端口 9200)(Faraday::ConnectionFailed)在我的
请给我一些解决以下错误的方法。 这是一个聊天应用....代码和错误如下:: conversations_controller.rb def create if Conversation.bet
我想将两个单元格中的数据连接到一个单元格中。我还想只组合那些具有相同 ID 的单元格。 任务 ID 名称 4355.2 参与者 4355.2 领袖 4462.1 在线 4462.1 快速 4597.1
我经常需要连接 TSQL 中的字段... 使用“+”运算符时 TSQL 强制您处理的两个问题是 Data Type Precedence和 NULL 值。 使用数据类型优先级,问题是转换错误。 1)
有没有在 iPad 或 iPhone 应用程序中使用 Facebook 连接。 这个想法是登录这个应用程序,然后能够看到我的哪些 facebook 用户也在使用该应用程序及其功能。 最佳答案 是的。
我在连接或打印字符串时遇到了一个奇怪的问题。我有一个 char * ,可以将其设置为字符串文字的几个值之一。 char *myStrLiteral = NULL; ... if(blah) myS
对于以下数据 - let $x := "Yahooooo !!!! Select one number - " let $y := 1 2 3 4 5 6 7 我想得到
我正在看 UDEMY for perl 的培训视频,但是视频不清晰,看起来有错误。 培训展示了如何使用以下示例连接 2 个字符串: #!usr/bin/perl print $str = "Hi";
我是一名优秀的程序员,十分优秀!