我想使用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;
}
答案 0 :(得分:0)
如果您在使用POP3时未看到GMail帐户中列出的所有电子邮件,则可能需要更改GMail中的POP3设置以显示所有邮件。默认情况下,它不会显示所有消息。
答案 1 :(得分:0)
这是一个普遍的问题,不幸的是,它并不总是最简单的解决方案。希望这些信息将帮助您和其他人找到适合您需求的最佳实施方案。
以下是问题的生命周期以及一些可以帮助您解决的信息:
最近模式通过在连接时给用户名加上“ 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文件来交叉检查传入的邮件,以便知道它是新邮件还是旧邮件)...不过:此命令还会从“发送”框中返回邮件,对于许多人来说,这是不可行的解决方案。
提示:
如果您正在快速有效地管理收件箱,并且不认为250是您的流程中的限制因素,则UIDL和RETR将起作用。
如果您无法将收件箱保持在250以下,但还需要访问新电子邮件,并且您不希望收件箱增长到令人发指的大小,并且性能也没有关系,则应使用“最近”模式。