Secure Mailer

Tutorial spamsicheres Formular von SwissKnife for NOF - dieses Tutorial ist f├╝r fortgeschrittene Benutzer gedacht

Zun├Ąchst vielen Dank an Stefan Menge von SwissKnife for NOF, der diese Skripte zum Schutz gegen Spambots geschrieben hat.

Der Schutz gegen Spambots beruht auf einem Cookie, das gesetzt wird und ├╝berpr├╝ft ob dieses Formular ├╝ber einen Browser aufgerufen wird. Hier meine Version in HTML5.

Hier k├Ânnt Ihr Euch zun├Ąchst die ben├Âtigten Skripte downloaden.

Letztes Update am 19.10.2012 - Probleme mit Umlauten bei manchen Providern und Mobil-Telefonen behoben.

001-2012-10-19-SwissKnife_SecureContactForm.zip. Downloads insgesamt seit 17.10.2012 : 628


Download-Counter - arturleinweber.de


Hier noch eine “Vorlage” zum Einlesen in NOF 12 (Update 3) als Beispiel von meinem Formular auf dieser Seite mit nur diesen Feldern.
In dieser “Vorlage” sind bereits s├Ąmtliche Skripte eingebaut. Ihr braucht lediglich noch Eure korrekte eMail-Adresse in dem Skript

skn_mail.php - im Ordner “Assets” - Windows XP z.B. hier: C:\Dokumente und Einstellungen\Admin\Eigene Dateien\NetObjects Fusion 12.0\User Sites\ProjektName\Assets

eintragen. Da diese Datei in der Assets-Verwaltung eingebunden ist, werden die Änderungen von NOF automatisch übernommen.

002-2012-10-19-Vorlage-NOF12-Formular-Spamsicher-StefanMenge.zip. Downloads insgesamt seit 17.10.2012 : 290


Download-Counter - arturleinweber.de


Bitte lest Euch auch die Kurzanleitung von Stefan Menge durch, die dem Download beiliegt.

Dieses Tutorial geht davon aus, dass Ihr Eurer Projekt “Nach Asset-Typ” publiziert und es entsprechend das Verzeichnis “html” auch gibt. Die Skripte sind so geschrieben, dass davon ausgegangen wird, dass das Formular auf einer Unterseite im Verzeichnis “html” eingebaut wird.

Bitte entpackt diese ZIP-Datei mit den ben├Âtigten Skripten in irgendein Verzeichnis. Ihr erhaltet den Ordner:

SwissKnife_SecureContactForm

├ľffnet diesen Ordner und Ihr werdet die beiden Verzeichnisse mit den Skripten finden, die Ihr ben├Âtigt.

  • javascript
  • scripts

Diese beiden Verzeichnisse geh├Âren in das Stammverzeichnis Eures Projektes auf dem Server und in das Verzeichnis
Lokale Publizierung”, falls Ihr das mit dem “LocalWebServer” von “Swiss Knife for NOF” bereits testen wollt.

Ihr k├Ânntet diese Verzeichnisse auch in Eurer Ansicht “Publizieren” erstellen und die einzelnen Dateien in die Assets-Verwaltung einlesen und dann in die entsprechenden Ordner (javascript und scripts) verschieben, damit NOF diese selbstst├Ąndig mit publiziert.

Bevor Ihr das in Euer Stammverzeichnis kopiert oder in der Assets-Verwaltung einlest, m├╝sst Ihr noch das Mail-Skript

skn_mail.php (im Ordner “scripts”)

anpassen und dort alle unten blau markierten Stellen mit Euren Daten versehen, wie z.B. Euren Texten und Eurer e-Mail-Adresse.

Weiterhin m├╝ssen s├Ąmtliche Feldnamen in Eurem Formular exakt die Bezeichnungen tragen wie im Skript unten, hier gelb markiert oder Ihr m├╝sst diese POST-Variablen im Skript umschreiben und die Feldnamen anpassen.

Die hier rot hinterlegten, verdeckten Felder m├╝ssen im Formular gegr├╝ndet werden (Erkl├Ąrung weiter unten) und es muss als Erfolgsseite eine Seite mit dem Namen “danke.html” angelegt worden sein.

├ľffnet die Datei skn_mail.php z.B. mit Eurem Windows-Editor, ├Ąndert diese entsprechend ab und speichert sie im ANSI Format.

<?php
  
  
   /****************************************************************
    * SwissKnife for NOF: Spamsicherer Mailer f├╝r Kontaktformulare
    *
    * (c)2012 SwissKnife for NOF by SME
    *
    *
    * ***************************************************************
    * Konfiguration:
    *
    * 1. Mail-Adressen f├╝r Admin eintragen.
    * 2. Server-Adresse eintragen.
    * 3. F├╝r alle Felder des Formulars im Abschnitt "Message an den Administrator"
    *    die Namen in "$_POST['<Feldname>']" eintragen.
    *    In diesem Abschnit wird auch das Format erstellt,
    *    wie die Meldung endg├╝ltig dargestellt werden soll.
    *****************************************************************/
  
  
   if (isset($_POST['action']) && ($_POST['action']=='send'))
      {
        
         // SwissKnife AntiSpam/Form-Security
         include('../scripts/check_token.php');
        
         // Hier Deine korrekten e-Mail Adressen eintragen
         $mailadr_admin= 'admin@DeineDomain.de';
         // Falls Meldung an einen 2. Empf├Ąnger: N├Ąchste Zeile aktivieren -die beiden Slash // vorne entfernen- und auch unten beim Mail-Befehl
         //$mailadr_admin1= 'info@DeineDomain.de';
        
        
         $mailadr_customer = $_POST['E-Mail'];
        
        
         //     1. Message an den Administrator
        
         $subject_admin = 'Kontaktformularanfrage von '.$_POST['Vorname'].' '.$_POST['Name'];
        
         $message_admin = 'Name:        '.$_POST['Anrede'].' '.$_POST['Vorname'].' '.$_POST['Name'];
         $message_admin.= "\n\n";
         $message_admin.= 'Adresse:     '.$_POST['Strasse'].' '.$_POST['Hausnummer']."   ".$_POST['PLZ'].' '.$_POST['Ort']."\n\n";
         $message_admin.= 'Mail:        '.$_POST['E-Mail']."\n";
         $message_admin.= 'Kontakt per: '.$_POST['Kontaktper']."\n";
         $message_admin.= 'Tag:         '.$_POST['Tag']." ".$_POST['Datum']." ".$_POST['Monat']."\n\n";
         $message_admin.= 'Nachricht:'."\n\n".$_POST['Nachricht']."\n\n";
        
         // unbedingt Serveradresse anpassen
        
         $message_admin.= 'Server:   www.DeineDomain.de'."\n";
        
        
         //     2. Message an den Kunden
        
         $subject_customer = 'Ihre Anfrage an DeinName'."\n\n";
        
         $message_customer = 'Sehr geehrte';
         if ($_POST['Anrede'] == "Herr")
         {
            $message_customer.= 'r';
         }
        
         $message_customer.= ' '. $_POST['Anrede'].' ';
         $message_customer.= $_POST['Name'].','."\n\n";
         $message_customer.= 'Sie haben beiliegende Anfrage an '.$mailadr_admin.' geschickt:'."\n\n";
        
         foreach($_POST as $name=> $value)
         {
            if (($name == "action") || ($name == "Senden") || ($name == "zeit"))
         {
         ;
         }
         else
         {
            if ($name <> 'skn_ts')
            {
               $message_customer.= "$name:";
               $message_customer.= str_repeat(" ",16-strlen($name));
               $message_customer.= "$value\n";
            }
         }
      }
     
      $message_customer.="\n\n".'Wir werden Ihre Anfrage so schnell wie m├Âglich beantworten.'."\n\n\n".'Mit freundlichen Gr├╝├čen'."\n\n".'     DeinName';
     
     // MIME-Header zur Vermeidung von Problemen mit Umlauten bei manchen Providern und Mobil-Telefonen
     $header =  "\r\nMime-Version: 1.0\r\nContent-Type: text/plain; charset=iso-8859-1\r\nContent-Transfer-Encoding: 8bit\r\n";
    
      // Send it SMTP on localhost (1. Mail an Admin)
     mail($mailadr_admin, $subject_admin, $message_admin,"From: ".$mailadr_customer.$header);
    
     // Mail an Kunden
     mail($mailadr_customer, $subject_customer, $message_customer, "From: ".$mailadr_admin.$header);
    
     /* Falls Mail an einen 2. Empf├Ąnger, der oben aktiviert wurde: N├Ąchste Zeile auch aktivieren */
     //mail($mailadr_admin1, $subject_admin, $message_admin, "From: ".$mailadr_customer.$header);
    
      header("Location: ./danke.html");
   }
?>

 

Bitte achtet darauf, dass Ihr das Skript oben, nach der Änderung, auch wieder im ANSI Format speichert, da sonst die Umlaute in der Mail falsch dargestellt würden.

Formular

Ihr ben├Âtigt nat├╝rlich nicht alle Felder und m├╝sstet das Skript dann entsprechend Euren Feldnamen anpassen. Ich habe hier z.B. nur weniger Feldnamen zum Testen verwendet und mein Formular (“Vorlage” oben) sieht dann so aus. Ihr erstellt also zun├Ąchst ein ganz normales Formular mit den Formular-Werkzeugen von NOF.

Da die Mail-Skripte direkt auf Eurer Formular-Seite verarbeitet werden und diese auch in den Skripten so angesprochen werden, muss die Seite mit dem Formular

kontakt.php

hei├čen. Die Skripte werden nun auf dieser Seite (kontakt.php) inkludiert. Dazu muss dieser Befehl in die HTML des Layouts eingetragen werden.

> Layout markieren > Fenster “Layout-Eigenschaften” > Button “HTML” > Befehl oben “Beginn der Seite” eintragen (keine Leerzeile lassen)

<?php include("../scripts/skn_mail.php"); ?>

Weiterhin m├╝ssen die Verlinkungen zu der jQuery-Datei und der JavaScript-Datei eingetragen werden.

> Layout markieren > Fenster “Layout-Eigenschaften” > Button “HTML” >  “Zwischen Head Tags” eintragen

<!-- Beginn SwissKnife SecureForm -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" src="../javascript/secure_form.js"></script>
<!-- Ende SwissKnife SecureForm -->

Jetzt m├╝sst Ihr bei den Formular-Eigenschaften folgende Einstellungen vornehmen:

  • Name: secure (Name des Formulars - ganz wichtig, dass diese “secure” hei├čt, damit der Spamschutz auch funktioniert)
  • Aktion: kontakt.php (Aufruf des Skripts)
  • Methode: Verschicken (n├Ąmlich an die Seite kontakt.php)

und die beiden im Skript angesprochenen verdeckten Felder anlegen. Dazu klickt Ihr unten auf das + Zeichen und tragt ein bei:

  • Name: action
  • Wert: send

klickt erneut auf das + Zeichen und legt das zweite verdeckte Feld an

  • Name: zeit
  • Wert: <?php echo time();?>

Der Senden-Button muss Senden hei├čen.

Wenn Ihr den Spamschutz mal testen wollt, dann k├Ânnt Ihr entweder die Cookies in Eurem Browser deaktivieren oder auch in der Datei

check_token.php

die maximale Verweilzeit (Timeout) auf z.B. 60 Sekunden zur├╝cksetzen (60*1). Dann eine Minute warten, bevor das Formular gesendet wird.

$skn_seconds = 60*10;  // 600 Sec Timeout w├Ąhrend der das aktuelle Formular g├╝ltig ist

Das Formular wird dann nicht gesendet und es erscheint stattdessen diese Alert-Meldung und es wird zur Formular-Seite zur├╝ckgekehrt.

Viel Erfolg!

Tutorials von Thomas Frei-Herrmann
diese Seite weiter empfehlen



Counter Statistik