很久以前,我写了以下代码来从邮箱检索电子邮件:
pop3 := TNMPOP3.Create(Self);
try
pop3.Host := FAppSettings.ServerName;
pop3.Port := FAppSettings.ServerPort;
pop3.UserID := FAppSettings.Login;
pop3.Password := FAppSettings.Password;
try
pop3.Connect;
except
on E:Exception do AddError(E.Message);
end;
if not pop3.Connected then Exit;
if pop3.MailCount > 0 then begin
pop3.DeleteOnRead := False;
pop3.AttachFilePath := GetTempDirectory;
ProcessMsgs(pop3);
end
else begin
TCommon.InfMsg('There are no messages in mailbox');
end;
pop3.Disconnect;
finally
pop3.Free;
end;
现在,当邮件服务提供商完全切换到SSL时,这个代码显然失败了,但方式很奇怪:
pop3.Connect
行导致异常,但E中有一个空文本。消息使最终用户不清楚问题。
对Delphi调试器中问题的调查表明,第一次生成正确的异常:
项目。。。。引发异常类exception,消息为"Authentication failed"。
但是,当我再次按下F8(Step Over)时,执行点仍在同一行,并生成另一个异常:
项目。。。。引发了异常类exception,消息为"。
并且只有该异常被CCD_ 2捕获。
为什么?
为了回答您的实际问题"为什么?",您描述的序列意味着TNMPOP3.Connect()
正在内部捕获原始身份验证异常,并抛出一个新的异常,而不会出现错误消息。这是一个错误还是故意的,如果不查看TNMPOP3
的源代码,就无法知道。Delphi没有提供该源代码,NetMasters也不在了,所以你不能向他们索要。TNMPOP3
无论如何都不支持SSL,所以你必须切换到另一个组件/库来处理你的POP3+SSL功能。