Hello,

I've still or even worse trouble with this e-mail sending. maybe I 
should explain it more in detail what my environment is and what I want
to do.

Okay I have this:

COM Client -> COM-Server -> ICS SmtpClient
                  |
               Other application connected via TWSocket (TCP)

The com server provides 3 functions for sending e-mails, one is used 
internally triggered by certain events sent by the other application.

The two methods for sending e-mails (one for a testmail for testing the 
connection) the other for sending something specific shall send the 
e-mail and return whether this was successfull or not. If the sending 
takes more that a certain time it shall be aborted and counted as 
unsuccessfull.

Sending is done in a loop over a list possibly containing more that one 
e-mail server address to that if the first fails the second will be 
tried etc.

After the connect I've this here:

     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;

     if (mailerror <> 0) or (isemail_connection = true) then
     begin
       try
         datenmodul.SmtpCli.CtrlSocket.Close;
       except
       end;
     end
     else
     begin

       try
         if datenmodul.SmtpCli.Connected then datenmodul.SmtpCli.Quit;
       except
       end;


It shall wait for either the timeout or the finish of the e-mail sending 
process. In the OnRequestDone I've nearly 100% identical code to your 
mail sending excample (the all in one demo) except that the screen 
output is missing, the case is put into a try/except and the 10004 error 
won't lead to a abort of the eventhandler. The handler will set the 
isemail_connection flag when the quit stage is arrived and will set 
mailerror to the errorcode and leave the handler if there is some error.

I also want the com server to handle the communication to that other 
program (not it's client) and process (at least partially) the data he 
gets from it. Unfortunatelly he can raise the event which also triggers 
a mail sending operation. And then I think the trouble starts. I've 
implemented there another loop which waits if a mail is currently sent 
on either the completion (because the same function and thus SmtpClient 
instance) will be user or a timeout. The waiting loop is similar to the 
one above. If the mailserver can be reached, all seems to be well, but 
if I give a non reachable one it miserably fails and the COM-server 
starts to do weired things!

Have you any hints for me? I want the mailing to be partially blocking
to be able to handle the other communication but timely tell the user 
whether seinding was ok or not. And what happens if sending takes place 
and the program get's closed?

Greetings

Markus
-- 
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