> Ich soll was machen, was den Inhalt eines ausgef�llten Formulares per
> Mail verschickt. Frage: Kann ich irgendwie abfragen, welche Felder das
> Formular, das aufgef�llt wurde, hat(te)? Und welche Inhalte da drinnen
> waren, ohne die Felder namentlich zu kennen?
Ich h�nge mal mein Sendmail.asp Skript dran.  Und mach ausnahmsweise HTML mail.  Das Formular muss von, an, subject usw. Felder haben, das die festen Werte aufnimmt. Wobei die englischen und deutschen Namen verwendet werden k�nnen. SMPT Authentifizierung ist im Code, hier im Beispiel aber auskommentiert. Ansonsten die �blichen Sachen, die JMail so kann, BCC, attachments, etc.  Es kann mit Formularen oder Links verwendet werden, die die Parameter im Querystring haben. Sollten mehrere Eingabefelder mit gleichen Namen auftauchen werden die durchnummeriert und entsprechend gesendet. Interessant vielleicht noch die Implementierung von successpage und errorpage: nun, wie der Name sagt, l�sst sich damit das entsrechende Verhalten noch ein bischen gestalten. Und zu guter Letzt ein Security-check, der sicherstellt dass es vom eigenen Server aufgerufen werden kann - wir wollen es den Spammern ja nicht ganz so einfach machen.
 
--

Viele Gr��e
Hubert Daubmeier
 
 
 
<%@ LANGUAGE = VBScript %> <% ENABLESESSIONSSTATE = False %>
 
<% 
 
  Dim Field, i, sFehler, sTo, sCheck, sErrPage, sSuccessPage
 
  If Instr(1, Request.ServerVariables("HTTP_REFERER"), Request.ServerVariables("SERVER_NAME"), 1) = 0 Then
    ' -- Missbrauch durch Spammer abstellen. Seiten m�ssen vom gleichen Server kommen.
    ResponseWrongServer
  Else
 
    Set JMail = Server.CreateObject("JMail.SMTPMail")
    JMail.ServerAddress = "xx.xx.xx.xx:25"
    JMail.Priority = 3  ' default priorit�t auf normal
 
    ' -- Sowohl Form als auch Querystring durchgehen. Es ist immer nur einer gef�llt
 
    For Each Field In Request.Form
      If Request.Form(Field).Count > 1 Then
        For i = 1 to Request.Form(Field).Count
          AssignFields Field, Request.Form(Field)(i), CStr(i)
        Next
      Else
        AssignFields Field, Request.Form(Field), ""
      End If
    Next
 
    For Each Field in Request.QueryString()
      If Request.QueryString(Field).Count > 1 Then
        For i = 1 to Request.QueryString(Field).Count
          AssignFields Field, Request.QueryString(Field)(i), CStr(i)
        Next
      Else
        AssignFields Field, Request.QueryString(Field), ""
      End If
      sCheck = sCheck or 8  ' -- da bescheissen wir ein bischen
    Next
 
    ' -- hamer auch alles beieinander?
    If sCheck = 15 Then
      JMail.Body = JMail.Body & vbcrlf & vbcrlf & "SENDMAIL von " & Request.ServerVariables("SERVER_NAME") & ", " & Request.ServerVariables("HTTP_REFERER")
      JMail.AddHeader "Orginating-IP", Request.ServerVariables("REMOTE_ADDR")
      JMail.AddHeader "Forwarder", "SENDMAIL.ASP, written by Hubert Daubmeier"
      JMail.AddHeader "Caller", Request.ServerVariables("HTTP_REFERER")
      JMail.Encoding = "quoted-printable"
      JMail.Silent = True
      ' -- die folgenden Felder nur, wenn der Mailserver Authentifizierung verlangt
      ' JMail.Message.MailServerUserName = "user"
      ' JMail.Message.MailServerPassWord = "pwd"
      JMail.Execute
      sFehler = Trim(JMail.ErrorSource)
      If sFehler <> "" Then
        ResponseMailServerDown sFehler
      Else
        If sSuccessPage <> "" Then
          Response.Redirect sSuccessPage
        Else
          ResponseSendenOK
        End if
      End If
    Else
      If sErrPage <> "" Then
        Response.Redirect sErrPage
      Else
        ResponseErrorInFields
      End if
    End if
  End If
 

  Sub ResponseErrorInFields()
    response.write "<html><head><title>SendMail - Fehler in den Aufrufparametern</title></head><body>" & vbcrlf & _
     "<p><font color=""#FF0000""><b>Fehler in den Aufruf Parametern</b></font></p>" & vbcrlf & _
     "<blockquote>From=" & JMail.Sender & "<br><br>" & vbcrlf & _
     "To=" & sTo & "<br><br>" & vbcrlf & _
     "Subject=" & JMail.Subject & "<br><br>" & vbcrlf & _
     "Body=" & JMail.Body & "<br><br>" & vbcrlf & _
     "Priority=" & JMail.Priority & "</blockquote><br><br>" & vbcrlf & _
     "</body></html>"
  End Sub
 
  Sub ResponseMailServerDown(sErrorCode)
    response.write "<html><head><title>SendMail - Mailserver nicht verf�gbar. Fehler " & sErrorCode &
"</title></head><body>" & vbcrlf & _
     "<p><font color=""#FF0000""><b>Der Mailserver antwortet nicht oder die Verbindung ist unterbrochen</b></font></p>" & vbcrlf & _
     "<blockquote><p>Bitte entschuldigen Sie diese Panne und versuchen Sie es zu einem sp�teren Zeitpunkt noch einmal.<br>" & vbcrlf & _
     "<a href=""javascript:history.back();"">Zur�ck</a></p></blockquote>" & vbcrlf & _
     "</body></html>"
  End Sub
 
  Sub ResponseWrongServer()
    response.write "<html><head><title>SendMail - Sicherheitscheck</title></head><body>" & vbcrlf & _
     "<p><font color=""#FF0000""><b>Sicherheitscheck</b></font></p>" & vbcrlf & _
     "<blockquote><p>Leider k�nnen Sie diese Seite nicht von einer anderen Domain aus benutzen.<br>Wir danken f�r Ihr Verst�ndnis.<br>" & vbcrlf & _
     "<a href=""javascript:history.back();"">Zur�ck</a></p></blockquote>" & vbcrlf & _
     "</body></html>"
  End Sub
 
  Sub ResponseSendenOK()
    response.write "<html><head><title>Nachricht versandt</title></head><body>" & vbcrlf & _
     "<H2>SendMail</H2>" & vbcrlf & _
     "<blockquote><p>Ihre Nachricht wurde am " & date & ", " & time & " an " & sTo & " versandt.<br>" & vbcrlf & _
     "<a href=""javascript:history.back();"">Zur�ck</a></p></blockquote>" & vbcrlf & _
     "</body></html>"
  End Sub
 
  Sub AssignFields(sField, sValue, sNr)
    select case lcase(sField)
    case "to", "an"
      JMail.AddRecipient sValue
      sTo = sTo & "; " & sValue  ' zwischenmerken
      sCheck = sCheck or 1
 
    case "to2", "to3", "to4"
      JMail.AddRecipient sValue
 
    case "from", "von"
      JMail.Sender = sValue
      sCheck = sCheck or 2
 
    case "subject", "betreff", "titel"
      JMail.Subject = sValue
      sCheck = sCheck or 4
 
    case "errorpage", "error"
      sErrPage = sValue
 
    case "cc", "copy", "kopie"
      JMail.AddRecipientCC sValue
 
    case "bcc", "blindcopy"
      JMail.AddRecipientBCC sValue
 
    case "attach", "attachment", "anlage"
      Dim fso, sfile
      sfile = Server.Mappath(sValue)
      Set fso = CreateObject("Scripting.FileSystemObject")
      If fso.FileExists(sfile) Then
        JMail.AddAttachment sfile
      Else
        JMail.Body = JMail.Body & vbcrlf & "HINWEIS: Anlage " & sValue & " nicht gefunden/nicht vorhanden" & vbcrlf & vbcrlf
      End If
      Set fso = nothing
 
    case "successpage", "success"
      sSuccessPage = sValue
 
    case "priority"
      select case sValue 
      case "1", "high", "hoch"
        JMail.Priority = 1
      case "5", "low", "niedrig"
        JMail.Priority = 5
      end select
 
    case else
      JMail.Body = JMail.Body & vbcrlf & sField & iff(sNr="", "", " - " & sNr) & ": " & sValue & vbcrlf
      sCheck = sCheck or 8  
 
    end select
  End Sub
 
  Function Iff(iBoole, sThen, sElse)
    If iBoole Then Iff = sThen Else Iff = sElse
  End Function
 
%> 
 
 
 
 
| [aspdecoffeehouse] als [email protected] subscribed | http://www.aspgerman.com/archiv/aspdecoffeehouse/ = Listenarchiv | Sie k�nnen sich unter folgender URL an- und abmelden: | http://www.aspgerman.com/aspgerman/listen/anmelden/aspdecoffeehouse.asp

Antwort per Email an