RedGrittyBrick
RedGrittyBrick

Reputation: 4002

Pascal Synapse error handling

I have some code written in Lazarus/FreePascal that uses the Synapse IMAPSend library unit. I attempt to login to an IMAP server over SSL (IMAPS) but the call to Login fails.

I've tried checking for exceptions - none are thrown.

Wireshark shows nothing beyond a TCP three-way handshake to the appropriate server and port.

Here's the code

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;               

Here's the String result of this function

IMAP login to [email protected]:993 ... IMAP Login failed. 

Question: Is there a way to see some details of what IMAPSend thinks happened?


Update 1

As shown in SimaWB's answer plus comments by Arioch 'The

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

produced a projectname.slog file containing

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!

So I am moving forward :-)

I do have libssl32.dll and libeay32.dll in my project folder but will check I have the right versions and have done the right things with the chicken entrails.


Update 2:

I was using the 64-bit version of Lazarus. The OpenSSL DLLs are 32-bit DLLs which Synapse's ssl_openssl unit loads dynamically. I installed the 32-bit version of Lazarus/FPC and now my IMAP/SSL client program compiles and works as expected.

It seems the current 64-bit Lazarus/FPC binary distribution (v1.0.10/2.6.2) cannot cross-compile to i386 (which I think might have helped).

Upvotes: 3

Views: 2971

Answers (3)

Goran M
Goran M

Reputation: 11

Same error in the .slog file on Ubuntu 64-bit was fixed with "sudo apt-get install libssl-dev" and including "ssl_openssl" in the uses section.

Upvotes: 1

Nguyễn Linh
Nguyễn Linh

Reputation: 5

The problem is here: imap.AutoTLS := false; imap.FullSSL := true; try to set true to false and false to true... and port should be 587

Upvotes: 0

SimaWB
SimaWB

Reputation: 9294

Did you try synadbg unit of Synapse?

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

Then the application create a log file with extension '.slog'. May be you can find more details in the log file.

Upvotes: 5

Related Questions