如何使用POP3命令从Gmail收件箱中提取新邮件?

问题描述 投票:0回答:2

我想使用POP3命令提取我的Gmail收件箱邮件。我的帐户中有1000多个电子邮件。但是我只能提取255个最旧的邮件。帮助我从收件箱中提取新邮件。

 public double GetEmailCount()
    {
        double count = 0;
        string response = SendCommand("STAT");

        if (IsResponseOk(response))
        {
            string[] arr = response.Substring(4).Split(' ');
            count = Convert.ToDouble(arr[0]);
        }
        else
            count = -1;
        return count;
    }
asp.net pop3
2个回答
0
投票

如果使用POP3时,您没有在GMail帐户中看到所有电子邮件,那么您可能需要在GMail中更改POP3设置以显示所有邮件。默认情况下,它不会显示所有消息。


0
投票

这是一个常见问题,不幸的是,它并不总是最简单的解决方案。希望这些信息将帮助您和其他人达到适合您需求的最佳实现。

  • Gmail有自己的Pop3实现,尽管如此,并非所有这些都与其他pop3提供程序有关

这里是问题的生命周期,以及一些可以帮助您解决的信息:

  1. 您以正常模式或最近模式连接到pop3服务器。这会将流行服务器上的“会话”置于“交易状态”。
  2. Recent模式通过在连接时给用户名加上前缀“ recent:” +用户名来使用。最近模式将返回服务器上最近30天的电子邮件。注意*这将取代我将在下面介绍的UIDL命令。即如果尚未删除,最近模式将返回所有30天的电子邮件。由于它总是返回最近30天,因此,如果您有多个客户端,则它们在最新模式下都将收到相同的信息。

  3. 普通模式是默认模式。普通模式将遵守您选择使用的命令的限制。 UIDL将返回服务器上大约250封最旧的电子邮件。如果服务器上有500封电子邮件,并且您没有删除任何一封电子邮件,则UIDL会返回前250封电子邮件的ID和唯一标识符,无论如何,因此您可能不知道新的250封电子邮件。以下警告,GMAIL在Web控制台上有一个选项,您可以在其中配置弹出窗口,使其“从现在开始启用弹出窗口”。通过选择并保存,该瞬间的时间戳将由弹出服务器用来“刷新”最旧的时间。因此,UIDL将开始从该点开始向您返回消息,直到您再次达到250标记(假设您尚未删除它们)。

  4. 重要的是,在您发出QUIT命令之前,事务状态一直存在。发出该命令后,服务器进入“更新”状态,它将开始发布您请求的更新,例如DELETE命令,或者在下载完成后将其弹出。在成功发出QUIT之前,不会删除任何内容,并且服务器状态不会更改。

  5. STAT命令将向您显示服务器上pop3堆栈中的电子邮件数量。

  6. RETR命令将检索或下载电子邮件,但在成功结束会话之前,它不会被标记为已下载

  7. UIDL,许多开发人员用来检索消息号和唯一标识符,如果您维护服务器的状态并弹出电子邮件,则非常有用。 UIDL只会返回最旧的250 ish(我见过251-255)电子邮件。如果您一直在轮询新电子邮件,那么如果未删除电子邮件,这将很危险。也!如果您需要删除电子邮件,请确保在Web控制台中配置了“将邮件保留在我的收件箱中”的GMAIL设置,以便您可以将这些电子邮件作为备份来使用。

  8. LIST命令将在正常模式下解决您的问题,以使您收到250封以上的电子邮件,(请注意:您仍然需要在本地维护一个id文件来交叉检查传入的邮件,以便知道它是新邮件还是旧邮件)。 ..但是:此命令还从SENT框中返回邮件,对于许多人来说,这不是可行的解决方案。

提示:

如果您正在快速有效地管理收件箱,并且不认为250是您的流程中的限制因素,则UIDL和RETR将起作用。

如果您无法将收件箱保持在250以下,但又需要访问新电子邮件,并且您不希望收件箱增长到令人发指的大小,并且性能也没有关系,则应使用“最近”模式。

Helpful Documentation

© www.soinside.com 2019 - 2024. All rights reserved.