delphi - TNMPOP3.Connect 生成两次异常

标签 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 .... raised exception class Exception with message 'Authentication failed'.

但是,当我再次按下 F8(Step Over)时,执行点仍然在同一行并且生成了另一个异常:

Project .... raised exception class Exception with message ''.

只有这个异常被try-except捕获。

为什么?

最佳答案

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

关于delphi - TNMPOP3.Connect 生成两次异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25956564/

相关文章:

delphi - 在 Outlook 中生成新消息并显示为模式

delphi - 将 Word 文档中的项目符号替换为破折号

java - Apache HTTPClient SSLPeerUnverifiedException

c# - 如何使用AE.Net.Mail获取PlainText或HTML文本?

linux - Dovecot 无法使用带有 postfix 的 pop3

objective-c - iOS 中是否有用于 POP/IMAP 的 API?

xml - Delphi DeHL 在较新的类中反序列化 XML 文件?

delphi - 如何设置FMX.Panel颜色?

ssl - 如何使用 zpanel 正确设置 ssl 和安装 postfix

ssl - Firefox SEC_ERROR_INADEQUATE_CERT_TYPE 没有增强的 key 用法