Hello,

I'm using your SmtpClient component for sending e-mails.
I'm trying to built in a failover in my application so that if the first 
configured mail server can't be reached a second etc. will be tried.

The problem is now that I like to cancel the connect if it takes too long.

   timeout:=timeout+text.Count*10;

   for i := 0 to length(emailservers) - 1 do
   begin
     with datenmodul.SmtpCli do
     begin

       try
         // setup e-mail parameters like server and content

         mailerror:=0;
         mailerrortext:='';
         isemail_connection:=true;
         Connect;
       except
         mailerror:=1;
         mailerrortext:=ErrorMessage;

         try
           datenmodul.SmtpCli.Quit;
         except
         end;

         continue;
       end;
     end;

     // wait for timeout or success
     t:=GetTickCount;
     while ((isemail_connection = true) and (mailerror = 0)) and
           (((GettickCount >= t) and (GetTickCount-t < timeout)) xor
            ((GettickCount < t) and (t-GetTickCount < timeout))) do
     begin
       sleep(10);
       Application.ProcessMessages;
     end;

     // in case of error disconnect asap
     if (mailerror <> 0) or (isemail_connection = true) then
     begin
       try
         // datenmodul.SmtpCli.Abort; doesn't work better!
         datenmodul.SmtpCli.CtrlSocket.cose;
       except
       end;
     end
     else
     begin
       try
         if datenmodul.SmtpCli.Connected then datenmodul.SmtpCli.Abort;
       except
       end;

       break;
     end;
   end;

The OnRequestDone is nearly your demo code (the output has been disabled 
and the case has been packed into a try/except block.

I do get 10004 errors or "component not ready". It works now since I 
packed it into try/except blocks but I wonder if this will make further 
problems. The problems only occur if the first e-mailserver is bot 
reachable and the connection has to be cancelled.

This is in a normal function which makes it blocking for the direct 
caller but since it's part of a COM-server the COM server could do some 
things internally while trying to send this e-mail.

Greetings

Markus

PS: somebody should document this component in the wiki, obviously not 
me! ;-)
-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to