Results 1 to 7 of 7

Thread: Probleem met SMTP Server (Indy 9)

  1. #1
    Keep it simple!!! Christiaan's Avatar
    Join Date
    Aug 2002
    Location
    Noordhorn
    Posts
    119

    Angry Probleem met SMTP Server (Indy 9)

    Hoi allemaal,

    Ik heb een probleem met de TIdSMTPServer van Indy 9.0.10.

    Het probleem is het volgende:

    Wanneer ik met Outlook XP een emailtje stuur naar mijn mailserver dan gaat het de 1e keer (als de server 1 minuut draait) meestal niet goed.

    Het effect wat ik zie (aan de hand van de OnBeforeCommandHandler) is dat de sequence van mail ontvangen door de smtpserver stopt (of hangt) bij de commando's MAIL of RCPT terwijl daar alleen maar (eigenlijk heel eenvoudige) commandhandlers van INDY (niet van mijn App dus) achter zitten.

    De thread blijft gewoon hangen. Ik heb al geprobeert een IdAntiFreeze te gebruiken - zonder resultaat. Ook runtime(niet in debug modus in delphi) blijft het probleem zich voordoen.

    Het is net alsof Indy de commando's MAIL en RCPT te snel (oid) worden afgehandeld want wanneer ik een breakpoint in de commandhandler zet en dat rustig doorstep dan werkt alles perfect...

    Wat ik dus niet helemaal snap is waarom het de ene keer fout gaat en de rest van de keren (als de server al enige tijd draait) het wel goed gaat...

    nog een opmerking: Bij het afsluiten van de server merk ik ook dat de threads niet worden ge-terminate want ik krijg meestal een Thread Terminate Timeout Error. Iemand een idee hoe dat opgelost kan worden?

    Is een TIdPooledThreadManager nog een idee? Of heeft dat ook weinig zin... (ik geloof dat die een x aantal threads al in het voren aanmaakt voor sneller reageren op incoming connections ofzo.)

    Nou... het was me wel weer een heel verhaal maar het lucht in ieder geval wel op om dit zo met jullie te kunnen delen!

    Tabee en tot horens!

    Christiaan
    Delphi rulezzz and so does Indy!!!

  2. #2
    Hmm, dat klinkt alsof het allemaal in de threading hoek zit. Om even zo kaal mogelijk te beginnen: heb je dezelfde problemen met de SMTPserver demo die bij Indy zit?
    Marcel

  3. #3
    Keep it simple!!! Christiaan's Avatar
    Join Date
    Aug 2002
    Location
    Noordhorn
    Posts
    119
    Dat is nou precies waar ik ook aan dacht (en DUS ook wat vragen over heb).

    De situatie nu is:

    Een TForm met daarop een TIdPOP3Server en een TIdSMTPServer.
    Verder heb ik een TDatamodule (TPOP3Connection en TSMTPConnection) met daarop de query's die ik (mogelijk) ga uitvoeren wanneer er een commando van de client komt (STAT bijvoorbeeld: de inbox tabel wordt gelezen en de STAT wordt beantwoord).

    In oog houdend het Multithreadning idee: In de OnConnect event stel ik de AThread.Data in op respectievelijk TPOP3Connection en TSMTPConnection. Hierdoor heeft elke thread zijn eigen DB Verbinding wat threaderrors voorkomt (naar wij dachten... ).

    Laten we nu zeggen dat de TDatamodules Thread Safe zijn.

    Wat ik me nu afvraag is hoe threadsafe en/of thread efficient de TIdPeerthreads zijn aangezien de events van de TIdPOP3Server en TIdSMTPServer worden afgehandeld binnen de ownerthread (TForm) wat (volgens mij) het hele thread idee om zeep helpt. In principe doe je calls naar de VCL wat dus met Synchronize moet gebeuren.

    Wat ik me dus afvraag is: Wanneer ik de TPOP3Server/SMTP op een TForm plaats, maak ik dan nog wel gebruik van het thread voordeel?

    Het is wat moeilijk uit te leggen denk ik wat ik bedoel, maar misschien kan ik het je wat duidelijker maken op de chat...

    Wat je zei over de SMTP Demo: Ik denk niet dat dat zin heeft omdat het "random" gebeurd... Ik heb de hele mikmak geport naar een TServiceApplication en ik heb 'em nu 2 dagen draaien en het werkt nu wel goed, maar ik moest de service een aantal keer herstarten voordat ik een mailtje kon versturen. (Ik denk dus WEL dat ik een probleem heb met de Threading...)

    Please advice... Christiaan
    Delphi rulezzz and so does Indy!!!

  4. #4
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Over de TIdTCPServer componenten op een form: de events zijn dan niet thread-safe, je mag daar dus geen VCL direct aanspreken!



    Voorderest heb ik nog niks geprobeerd, al helemaal niet in combinatie met databaseverbindingen, dus daar kan ik weinig over zeggen...
    Qui custodiet ipsos custodes

  5. #5
    Krijgt iedere thread ook zijn eigen datamodule (dus Data := TDataModule.Create(nil))? Heeft iedere datamodule zijn eigen Connection component? Wat voor calls doe je naar de VCL?
    Marcel

  6. #6
    Keep it simple!!! Christiaan's Avatar
    Join Date
    Aug 2002
    Location
    Noordhorn
    Posts
    119
    Voorbeeld voor connectie:

    Code:
    procedure TColumbaMain.POP3ServerConnect(AThread: TIdPeerThread);
    begin
      AThread.Data:= TdPOP3Connection.Create(nil, FDatabaseName, FUsername, FPassword, FUIDLRange);
      if not TdPOP3Connection(AThread.Data).FInitialized then
      begin
        AThread.Connection.WriteLn('-ERR Unable to accept connection due to Internal Server Error.');
        AThread.Connection.Disconnect;
      end;
    end;
    Hierbij is TPOP3Connection een TDataModule met een TIBDatabase en stuff...

    Verder dus geen calls naar de VCL (onder voorbehoud van de Calls van de Events!!!)
    De events zijn volgens mij NIET thread safe omdat ze op een TForm staan.

    Hoe los ik dat probleem op? Door de events als procs op de TDatamodule te zetten en ze bij het creeren toe te wijzen? dat wil volgens mij ook niet helemaal...

    Hoe creeer je dan de event handlers voor de TPOP3Server en TSMTPServer zonder dat ze in de TForm draaien?

    Misschien met een TIdThread Component?

    feel free to respond, Christiaan
    Delphi rulezzz and so does Indy!!!

  7. #7
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Ik krijg het idee dat je denkt dat procedures/events die je declareert op het form automatisch iets met de main thread willen doen, dat is echter absoluut niet zo. Het kan alleen fout gaan als jij binnen die events een component of gedeelde variabele van het form aanspreekt, voorderest is de procedure/event exact hetzelfde als wanneer je 'm op een datamodule zou zetten...
    Qui custodiet ipsos custodes

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Replies: 25
    Last Post: 16-Dec-04, 23:19
  2. Delphi Automation server niet compatible met C# clients?
    By Johan Stokking in forum Algemeen
    Replies: 7
    Last Post: 22-Sep-04, 23:27
  3. Indy TCP server laten antwoorden op mijn comando
    By michielH in forum Algemeen
    Replies: 6
    Last Post: 31-May-04, 01:27

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •