我想使用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;
}
如果使用POP3时,您没有在GMail帐户中看到所有电子邮件,那么您可能需要在GMail中更改POP3设置以显示所有邮件。默认情况下,它不会显示所有消息。
这是一个常见问题,不幸的是,它并不总是最简单的解决方案。希望这些信息将帮助您和其他人达到适合您需求的最佳实现。
这里是问题的生命周期,以及一些可以帮助您解决的信息:
Recent模式通过在连接时给用户名加上前缀“ recent:” +用户名来使用。最近模式将返回服务器上最近30天的电子邮件。注意*这将取代我将在下面介绍的UIDL命令。即如果尚未删除,最近模式将返回所有30天的电子邮件。由于它总是返回最近30天,因此,如果您有多个客户端,则它们在最新模式下都将收到相同的信息。
普通模式是默认模式。普通模式将遵守您选择使用的命令的限制。 UIDL将返回服务器上大约250封最旧的电子邮件。如果服务器上有500封电子邮件,并且您没有删除任何一封电子邮件,则UIDL会返回前250封电子邮件的ID和唯一标识符,无论如何,因此您可能不知道新的250封电子邮件。以下警告,GMAIL在Web控制台上有一个选项,您可以在其中配置弹出窗口,使其“从现在开始启用弹出窗口”。通过选择并保存,该瞬间的时间戳将由弹出服务器用来“刷新”最旧的时间。因此,UIDL将开始从该点开始向您返回消息,直到您再次达到250标记(假设您尚未删除它们)。
重要的是,在您发出QUIT命令之前,事务状态一直存在。发出该命令后,服务器进入“更新”状态,它将开始发布您请求的更新,例如DELETE命令,或者在下载完成后将其弹出。在成功发出QUIT之前,不会删除任何内容,并且服务器状态不会更改。
STAT命令将向您显示服务器上pop3堆栈中的电子邮件数量。
RETR命令将检索或下载电子邮件,但在成功结束会话之前,它不会被标记为已下载
UIDL,许多开发人员用来检索消息号和唯一标识符,如果您维护服务器的状态并弹出电子邮件,则非常有用。 UIDL只会返回最旧的250 ish(我见过251-255)电子邮件。如果您一直在轮询新电子邮件,那么如果未删除电子邮件,这将很危险。也!如果您需要删除电子邮件,请确保在Web控制台中配置了“将邮件保留在我的收件箱中”的GMAIL设置,以便您可以将这些电子邮件作为备份来使用。
LIST命令将在正常模式下解决您的问题,以使您收到250封以上的电子邮件,(请注意:您仍然需要在本地维护一个id文件来交叉检查传入的邮件,以便知道它是新邮件还是旧邮件)。 ..但是:此命令还从SENT框中返回邮件,对于许多人来说,这不是可行的解决方案。
提示:
如果您正在快速有效地管理收件箱,并且不认为250是您的流程中的限制因素,则UIDL和RETR将起作用。
如果您无法将收件箱保持在250以下,但又需要访问新电子邮件,并且您不希望收件箱增长到令人发指的大小,并且性能也没有关系,则应使用“最近”模式。