vbscript smtp server (chaos)



ich mache nun schon seit geraumer zeit in vbscript rum. ich bin bei
windows 98 kleben geblieben, nutze den pws und asp, vbs und wsc
klamotten sind daher meine wahl.

nun habe ich hier so meine "probleme". keine wirklichen probleme, eher
eingebildete probleme oder probleme die ich erahne.

vor knapp einem jahr habe ich damit begonnen in vb einen clone eines
bereits existierenden e-mail servers zu erzeugen. bei der ursprünglichen
version handelt es sich um MDaemon 2.1.

irgendwann fand ich heraus dass die mswinsock.ocx auch durch vbscript
angesprochen werden kann. leider nur mit einem "hack" (lizenzschlüssel
müssen in der registry vorhanden sein) aber es läuft. vor einigen wochen
nahm ich mir socketwrench von catalyst zur brust. hier bin ich in der
lage winsock ohne trickserei zu nutzen. ich bleibe erst mal bei
mswinsock.ocx.

mir ist klar dass vbscript langsamer ist als vb, und dass vb langsamer
ist als c und co.

ich habe in vbscript eine funktion erzeugt.

Function ParseSMTP(sLine, sReply, sLocalHost, sLocalHostIP, sRemoteHost,
sRemoteHostIP, sReversePath, sForwardPath, sMail)

nun stellt sich mir die frage wie stabil dieser server ist. er reagiert
ziemlich träge. hier nun ein teil meiner funktion:

If UCase(sCommand) = "MAIL" Then
If Len(sForwardPath) > 0 Then
sReply = "503 Bad sequence of commands"
Exit Function
End If
If Len(sParameter) = 0 Then
sReply = "501 Syntax error in parameters or arguments"
Exit Function
End If
If UCase(Left(sParameter, 5)) <> "FROM:" Then
sReply = "504 Command parameter not implemented"
Exit Function
End If
sArgument = Mid(sParameter, 6)
sArgument = Trim(sArgument) 'fix OE bug
If Len(sArgument) = 0 Then
sReply = "501 Syntax error in parameters or arguments"
Exit Function
End If
If Left(sArgument, 1) = "<" Then
If Right(sArgument, 1) = ">" Then
sArgument = Mid(sArgument, 2, Len(sArgument) - 2)
Else
sReply = "501 Syntax error in parameters or arguments"
Exit Function
End If
Else
If Right(sArgument, 1) = ">" Then
sReply = "501 Syntax error in parameters or arguments"
Exit Function
End If
End If
sReversePath = "<" & sArgument & ">"
sReply = "250 Requested mail action okay, completed"
Exit Function
End If

ich bin mir nicht sicher ob ich die mail adresse auf vorhandensein des @
zeichens prüfen will, muss oder sollte. ich will dass der server sowohl
smtp, esmtp, und lmtp unterstützt.

ich prüfe nacheinander
If UCase(sCommand) = "HELO" Then
If UCase(sCommand) = "MAIL" Then
If UCase(sCommand) = "RCPT" Then
If UCase(sCommand) = "DATA" Then
und trete mich bei jedem möglichen fehler aus der funktion raus. mein
gedanke ist der, dass ich mir so etwas wie eine "strasse" baue, und wenn
ich falsch bin soll exit function mich hinausbefördern und zuvor einen
rückgabewert verändern.

bevor ich sCommand, sParameter und co erzeuge bzw. nutze, teste ich
welche werte ich schon habe. damit stelle ich fest ob sMail bereits
daten enthält und somit kein sReply erfolgen soll...

ich bin mir nicht sicher ob die von mir beschriebene logik die beste
ist. ich will hier nur ungern die gesamte smtp funktion reinsetzen. hier
gibt es sicher leute die verstehen was ich "getan habe" (klingt
schuldig)

und zum filesystemobject noch eine frage. im prinzip will ich in der
lage sein meine smtp funktion überall zu nutzen. ich benutze gerne die
zeilen
With CreateObject("...
With .OpenTextFile("...
ist es in ordnung wenn ich in der funktion das fso starte wenn es
gebraucht wird, oder sollte ich es global setzen? bei mir enthält nahezu
jede funktion ein With CreateObject("Scripting.FileSystemObject") ...
aus einer funktion welche eine datei ausliesst trete ich allerdings nie
mit Exit function aus sondern mit Exit Do ... ich bin mir hier ziemlich
sicher dass der .Close() aufruf noch wirkung haben muss. letzte woche
habe ich in vbscript den "schalter " Option Explicit eingebaut und alle
veriablem "ordentlich dimensioniert", falls das in vbscript mit
varianten überhaupt als ordentlich bezeichnet werden kann.

soll ich mein vbscript weiter basteln oder sollte ich den kram lieber in
vb stecken? ich habe den vbscript server noch nicht mit fetten mails
gefüttert, aber ich vermuute das das in ordnung geht. der server startet
bei einem connectionRequest eine weitere neue instanz und ist somit
immer verfügbar, timeout, alles ist drin (hoffe ich doch .... VRFY,
EXPN, MAIL, RCPT, DATA, NOOP, QUIT, HELP, EHLO, HELO ist alles
eingebaut) das script hat zur zeit knapp 26 kb. einige teile des scripts
habe ich in wsc-dateien ausgelagert. darin sind funktionen enthalten
welche die datenbank des original-servers nutzen können. ich nutze
beispielsweise diese daten auch für login-bereiche auf meine homepage.
und alles ist reiner text.

ich habe mich in wsc-dateien "verliebt" weil ich diese während der
benutzung verändern kann, also der smtp-server kann laufen und ich kann
die wsc-datei verändern. würde ich den ganzen kram in exe und dll oder
ocx machen ... ginge nicht ... (und asp würde alles blockieren)

ist folgende Funktion eigentlich "schädlich"? ich meine, weil ich mich
mit Exit Function hinausbefördere und End If "mehr oder weniger "
übersprungen wird. ich weisss, es gehört zu If ... aber .... ich weiss
nicht ... meine ParseSMTP sieht "schön und sauber" aus. aber nur mit
diesem Exit Function. (ich mag keine tausend tabs und immer weiter
einrücken)

Function MyName(sPara)
If Expression Then
MyName = "a"
Exit Function
End If
MyName = "b"
End Function

sorry falls der text "blöd daher kommt" aber ich habe niemanden mit dem
ich mich austauschen kann, ich will ordentlich programmieren und habe
zuviel dreck gesehen. ich brauche irgendwie nen kommentar zu meiner
arbeit. (ps: ich bin ohne arbeit und hab den lieben langen tag nix
besseres zu tun als in vbscript zu basteln)

.... und ab damit ... und ich ins bett ... nun wünsche ich kommentare und
empfehlungen ... falls nötig rücke ich noch nen bischen quellcode raus.

.



Relevant Pages

  • Re: vbscript smtp server (chaos)
    ... > nun stellt sich mir die frage wie stabil dieser server ist. ... > If Len> 0 Then ... > Exit Function ... > End If ...
    (microsoft.public.de.german.scripting.wsh)
  • Re: vbscript smtp server (chaos)
    ... > nun stellt sich mir die frage wie stabil dieser server ist. ... > If Len> 0 Then ... > Exit Function ... > End If ...
    (microsoft.public.de.german.scripting.wsh)
  • Re: Command-Befehl funktioniert nicht - Korrektur
    ... Public Function StartDoc(ByVal DocOrAppName As String, ... If InStrThen ... End Select ... Exit Function ...
    (microsoft.public.de.vb)
  • Re: Is Null
    ... Alle selbstgeschriebenen Nz-Ersatzfunktionen ... If Bedingung1 Then Nz = Bed1Wert: Exit Function ... Code zwar alles, aber nicht typsicher. ...
    (microsoft.public.de.excel)
  • Re: VB6 SP6: Hintergrundfarbe in H/VScrollbar nun weiß?
    ... Call SetBkColor ... Exit Function ... End If ... Herfried K. Wagner ...
    (microsoft.public.de.vb)