我尝试从gmail帐户获取电子邮件的数量,它第一次正常工作,每次之后,只要我不断开服务器的连接(我在断开连接之前通过调试器停止执行)命令)。 但是当我执行断开连接时,我无法再检索电子邮件,电子邮件的数量始终为0.,但是当我在线查看时,电子邮件仍然在收件箱中,我可以在线打开电子邮件并阅读内容,位无法检索与Indy的电子邮件。
这只发生在gmail上,而不是我尝试的其他电子邮件帐户。
代码的一部分。 pop.CheckMessages第一次返回1,但是一旦我断开连接并再次启动,它总是返回0.
有人知道我做错了什么吗?它就像邮件以某种方式标记,无法通过电子邮件客户端再次阅读。
pop:=tidpop3.Create(nil);
pop.Host := 'pop.gmail.com';
pop.Port := 995;
pop.Username := MyUserName;
pop.Password := MyPassword;
pop.ConnectTimeout := 10000;
ssl := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
ssl.SSLOptions.Method := sslvTLSv1;
ssl.SSLOptions.Mode := sslmClient;
pop.IOHandler := ssl;
pop.UseTLS := utUseImplicitTLS;
pop.Connect;
num:=pop.CheckMessages;
pop.Disconnect;
pop.Free;
ssl.Free;
答案 0 :(得分:1)
POP会从服务器中删除电子邮件 - 您只需阅读一次(至少在大多数实施中 - GMail separates POP and IMAP functionality,这有点令人困惑,以及为什么您仍然可以在线查看邮件。从POP角度来看,邮件已从服务器,但谷歌仍然保留它,标记为POP死亡,不破坏IMAP功能)。如果要将邮件保留在服务器上并保持与服务器邮件状态同步,请使用IMAP。
在传统的POP会话中,您必须明确告诉服务器您希望在读取后删除服务器副本 - 客户端通常配置为自动执行此操作,因为这是使用POP的常用方法。使用TIdPOP3
,您必须明确调用IdPOP3.Delete()
,但必须明确调用POP is somewhat different。
普通模式如何运作?
POP客户端会话从您的邮件客户端(Thunderbird,Outlook,Sparrow等)开始,向您的Gmail邮箱询问尚未下载的邮件列表。 Gmail向您的邮件客户端提供邮件列表后,您的客户端将开始下载邮件。在POP正常模式下,Gmail会提供大约250条尚未下载的最旧邮件列表(不包括垃圾邮件和已删除邮件)。 下载邮件后,Gmail会将其标记为'弹出' 。
所以,在"正常"模式GMail只会通过POP发送一次消息。要访问仍在服务器上但已经弹出的邮件'您可以选择GMail使用最近模式(参见上面的链接)。
Gmail中的消息在弹出后会发生什么变化?
使用近期模式时,弹出'消息(以正常模式下载)仍将显示给邮件客户端。这意味着即使一个POP客户端(使用普通模式)将邮件标记为弹出,另一个POP客户端(使用最近模式)仍然可以看到该邮件(除非您已将Gmail设置为删除邮件已经通过POP在使用POP 选项访问邮件时下载,在这种情况下,邮件将在POP客户端以正常模式下载后发送到垃圾箱。) / p>
与普通模式不同,您必须将POP客户端设置为在服务器上保留邮件(而不是删除它们),因为当POP客户端在最近模式下发出DELE(删除)命令时,它会被发送到Gmail中的“废纸篓” ,无论用户使用POP 设置访问消息时是否。如果其中一个POP客户端删除了邮件,则它们将再次对其他POP客户端不可见(除非从“废纸篓”中移出)。
Remy的回答详细介绍了使用POP 设置访问消息时的详细信息。
POP是上个世纪的古代恐龙。它是在服务器空间昂贵,互联网速度非常慢而人们通常只有一台计算机时设计的。使用POP就像使用服务器作为邮箱一样。您将检查邮件并将所有邮件下载到本地客户端,从服务器中删除它们(清空邮箱)。这节省了服务器上的空间,并且可以更快地检查新邮件,但这意味着您的所有邮件最终都存储在用于检查邮件的任何计算机上,并且只存储了 位置。时代已经改变 - 持久性有机污染物通常应被视为死亡。只是不要使用它。
答案 1 :(得分:1)