TNMPOP3.Connect生成两次异常



很久以前,我写了以下代码来从邮箱检索电子邮件:

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功能。

最新更新