3

我有一些使用Synapse库单元用Lazarus / FreePascal编写的代码。我尝试通过 SSL (IMAPS) 登录到 IMAP 服务器,但调用失败。 IMAPSendLogin

我试过检查异常 - 没有抛出异常。

Wireshark 除了与适当的服务器和端口进行 TCP 三次握手外,什么也没有显示。

这是代码

function GetImapResponse(host, port, user, pass:String): String;
var
  response: String = '';
  imap: TIMAPSend;
  no_unseen: integer;
begin
  imap := TIMAPSend.create;
  try
    imap.TargetHost := host;  //'10.0.0.16';
    imap.TargetPort := port;  //'993';
    imap.UserName := user;    //'red';
    imap.Password := pass;    //'********';
    imap.AutoTLS := false;
    imap.FullSSL := true;
    response := response + 'IMAP login to '+user+'@'+host+':'+port+' ... ';
    if imap.Login then
    begin
      response := response + 'Logged in OK. ';
      // How many unseen?
      no_unseen := imap.StatusFolder('INBOX','UNSEEN');
      Form1.Label2.Caption := IntToStr(no_unseen);
      response := 'INBOX contains ' +  IntToStr(no_unseen) + ' unseen messages. ';
    end
    else
    begin
      response := response + 'IMAP Login failed. ';
    end;
  except
    on E: Exception do
    begin
      response := response + 'Exception: ' + E.Message;
      showMessage(response);
    end;
  end;
  {
  finally
    imap.free;
    response := response + 'Finally. ';
  end;
  }
  Result := response;
end;               

这是这个函数的字符串结果

IMAP login to red@10.0.0.16:993 ... IMAP Login failed. 

问题:有没有办法查看 IMAPSend 认为发生的事情的一些细节?


更新 1

SimaWB's answer 和评论中所示Arioch 'The

  mySynaDebug := TsynaDebug.Create;
  imap.Sock.OnStatus := @MySynaDebug.HookStatus;
  imap.Sock.OnMonitor := @MySynaDebug.HookMonitor; 

生成了一个 projectname.slog 文件,其中包含

20130722-103643.605 0011F230HR_SocketClose: 
20130722-103643.609 0011F230HR_ResolvingBegin: 10.0.0.16:993
20130722-103643.620 0011F230HR_ResolvingEnd: 10.0.0.16:993
20130722-103643.623 0011F230HR_SocketCreate: IPv4
20130722-103643.628 0011F230HR_Connect: 10.0.0.16:993
20130722-103643.631 0011F230HR_Error: 10091,SSL/TLS support is not compiled!

所以我正在前进:-)

我确实在我的项目文件夹中有libssl32.dlllibeay32.dll,但会检查我是否有正确的版本,并用鸡内脏做了正确的事情。


更新 2:

我使用的是 64 位版本的 Lazarus。OpenSSL DLL 是 Synapse 的 ssl_openssl 单元动态加载的 32 位 DLL。我安装了 32 位版本的 Lazarus/FPC,现在我的 IMAP/SSL 客户端程序可以按预期编译和工作。

当前的 64 位 Lazarus/FPC 二进制发行版(v1.0.10/2.6.2)似乎无法交叉编译到 i386(我认为这可能有帮助)。

4

3 回答 3

5

您是否尝试过 Synapse 的synadbg单元?

imap := TIMAPSend.create;
imap.Sock.OnStatus := TSynaDebug.HookStatus;
imap.Sock.OnMonitor := TSynaDebug.HookMonitor;

然后应用程序创建一个扩展名为“.slog”的日志文件。也许您可以在日志文件中找到更多详细信息。

于 2013-07-19T14:55:33.300 回答
1

Ubuntu 64 位上的 .slog 文件中的相同错误已通过“sudo apt-get install libssl-dev”修复,并在使用部分包含“ssl_openssl”。

于 2013-07-29T20:46:55.317 回答
0

问题出在这里:imap.AutoTLS := false; imap.FullSSL := true;尝试将 true 设置为 false 并将 false 设置为 true ......并且端口应该是 587

于 2013-07-20T07:45:46.763 回答