AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi SMTP-Server braucht zu lange um erhaltene Mail zu speichern

SMTP-Server braucht zu lange um erhaltene Mail zu speichern

Offene Frage von "MasterEvil"
Ein Thema von MasterEvil · begonnen am 12. Mai 2009 · letzter Beitrag vom 12. Mai 2009
Antwort Antwort
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#1

SMTP-Server braucht zu lange um erhaltene Mail zu speichern

  Alt 12. Mai 2009, 10:57
Hallo,

ich habe einen SMTP-Server mit Indy IdSmtpServer implementiert und ein Problem beim Erhalten von größeren E-Mails.
Diese werden erfolgreich zum Server versandt und im SMTP-Server wird OnMsgReceive ausgelöst.
Nun speicher ich dort die E-Mail auf die Festplatte und trage Daten in die Datenbank ein.
Dies ist bei kleinen E-Mails alles kein Problem.

Die Ausnahme bilden sehr große Mails über 20 MB. Dort dauert das Speichern der E-Mail am Server zu lange für die meisten Timeouts der Clients. Das OK zurück an den Client kommt erst nach dem Speichern. Dazwischen laufen keine Daten zwischen Client und Server und der Client denkt irgendwann das nichts mehr kommt und wirft einen Timeout. Der Client denkt dann, dass die E-Mail nicht erfolgreich versandt wurde und der Server hat die E-Mail aber komplett und weiß nicht, dass der Client das denkt. So wird so eine E-Mail immer mehrmals versandt.

Jetzt könnte man natürlich diesen Timeout beim Client immer hochregulieren, aber ich dachte, dass der Server evtl. zwischendurch sozusagen einen PING senden kann, dass er noch etwas tut. Hab mich dann auch durch das RFC für SMTP gebuddelt. Dort gibt es auch den NOOB Command, der für so etwas ansich gedacht ist. Dieser muss aber vom Client ausgeführt werden und nicht vom Server. Ist also die falsche Richtung ...

Kennt jemand evtl. eine Lösung?

Gruß,
Steffen
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#2

Re: SMTP-Server braucht zu lange um erhaltene Mail zu speich

  Alt 12. Mai 2009, 11:08
Hi MasterEvil,

ich weiß nicht, ob ich Dein Problem richtig verstanden habe, aber ich würde die empfangenen Mails zunächst in ein Verzeichnis speichern und dann z.B. per Thread in die DB schieben. Das sollte sicherstellen, daß der Server direkt nach dem Erhalt Rückmeldung geben kann.

Gruß Assertor

P.S.: Dein Server wurde gehackt - das steht "HACKED BY DR.HACKER THEH4CKERS GROUP"... Hast wohl eine Sicherheitslücke.
Frederik
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: SMTP-Server braucht zu lange um erhaltene Mail zu speich

  Alt 12. Mai 2009, 11:18
Ich glaube sein Problem war ja gerade das eben das Speichern auf Platte zu lange dauert.
Ich würde entsprechend die eingehende Message nicht direkt auf Platte schreiben sondern das einem anderen Thread überlassen. Dem muss dann nur das TIdMessage übergeben werden und gut ist.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: SMTP-Server braucht zu lange um erhaltene Mail zu speich

  Alt 12. Mai 2009, 11:45
Das Problem ist, dass ich von Indy einen Stream bekomme, ich aber schon für eine Sicherheitsabfrage die Absenderadresse brauche. Daher muss ich den Stream erstmal in eine IdMessage laden. Dann übergebe ich die IdMessage an eine Datenbankroutine, die sich alle Daten da rauspflückt und die original E-Mail auf Festplatte speichert. Hier brauche ich aber auch das Ok, dass das geklappt hat. Denn ansonsten schlägt evtl. dort etwas fehl, aber der Client hat schon ein OK zurückbekommen und denkt die E-Mail wäre erfolgreich rausgegangen.
Dies OK kann ich nicht mehr Auswerten, wenn ich es in einen Thread auslagere

Man muss doch dem Client irgendwie mitteilen können, dass er noch etwas warten muss :/

@ Assertor:
Ja, da ist einer an meine Datenbank rangekommen und hat alle Datensätze verändert. Habe aber noch ein Backup, nur noch keine Zeit gefunden es einzuspielen Aber danke.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#5

Re: SMTP-Server braucht zu lange um erhaltene Mail zu speich

  Alt 12. Mai 2009, 12:16
Die Absenderadresse steht nicht immer in der Mail. Besser wäre es, auf die entsprechenden Events des SMTP-Servers zu reagieren, wenn er ein MAIL FROM: bekommt.
  Mit Zitat antworten Zitat
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: SMTP-Server braucht zu lange um erhaltene Mail zu speich

  Alt 12. Mai 2009, 12:56
Es soll aber verhindert werden, dass sich in einer Mail jemand für jemand anderen ausgibt, deswegen muss ich gerade das FROM in der Mail ansehen. Aber ansonsten hast du sicher recht.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz