TNMPOP3.Connect会生成两次异常

时间:2014-09-21 06:43:12

标签: delphi ssl pop3 email-client delphi-6

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

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.Message中的空文本会导致最终用户不清楚该问题。

调查Delphi调试器中的问题表明第一次生成正确的异常:

  

Project ....引发异常类异常,消息'身份验证失败'。

然后,当我再次按F8(Step Over)时,执行点仍然在同一行,并产生另一个异常:

  

Project ....使用消息''。

引发异常类异常

并且try-except只捕获此异常。

为什么?

1 个答案:

答案 0 :(得分:2)

要回答“为什么?”的实际问题,您描述的序列意味着TNMPOP3.Connect()在内部捕获原始身份验证异常并抛出新异常而不显示错误消息。无论是错误还是故意,如果不查看TNMPOP3的源代码,就无法知道。 Delphi没有提供该源代码,NetMaster不再存在,所以你不能要求它们。 TNMPOP3无论如何都不支持SSL,因此您必须切换到另一个组件/库来处理您的POP3 + SSL功能。