Supermailer 100 % Sicher

Anwendungen für Webseiten. Künstliche Intelligenz verwenden.
Volker
Moderator
Moderator
Beiträge: 1678
Registriert: Sa 12. Dez 2020, 22:35

Re: Supermailer 100 % Sicher

Ungelesener Beitrag von Volker »

Noch ein letztes Update :D

Der supermailer kommt jetzt ganz ohne Scripte in Mobirise aus ( außer wenn man captcha nutzen möchte)
Also noch felxibler, mit PDF wenn man will :D

Nur action auf den mailer in Mobirise - das wars :D

Aber dazu wird es gleich auf meiner Webseite ein Video geben. Wo alles haarklein erklärt wird ;)
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7971
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Supermailer 100 % Sicher

Ungelesener Beitrag von Tommy Herrmann »

Eben noch den Screenshot gefunden.

Musst Du mal gucken, so sieht Deine Seite (unten) aus, wenn man Deine Cookies löscht.


Data.jpg
Volker
Moderator
Moderator
Beiträge: 1678
Registriert: Sa 12. Dez 2020, 22:35

Re: Supermailer 100 % Sicher

Ungelesener Beitrag von Volker »

Tommy ich bastel doch gerade
ich hab einiges an scripten geändert.

Ich werde jetzt alles schlanker machen und mehr mit php ;)

Warte mal auf mein Video - auf meiner startseite heute :D :D

So, Video ist nun online auf meiner Startseite und zeigt eigentlich alles wesentliche.
Hier noch ein kleines Zusatz Tool, was auch checkt ob alles passt :D
https://www.niederastroth.de/supermailer_check.php

So sieht der Check aus wenn nicht alles 100% ist : https://www.niederastroth.de/supermaile ... _check.php

Wir können dann hier schließen Tommy ;) Habe Fertig :D
Volker
Moderator
Moderator
Beiträge: 1678
Registriert: Sa 12. Dez 2020, 22:35

Re: Supermailer 100 % Sicher

Ungelesener Beitrag von Volker »

Einen hab ich noch :D

Das muss noch raus - sorry Tommy :D

Man kann auch mit dem Mailer an verschiedene E-Mailadressen senden wenn man das mit ID macht - Also jedes Formular eine ID und in der config wird dann die jeweilige E-Mailadresse zugeordnet. Das wird die nächste Erweiterung.

Muss nur in den code : <form id="kontaktForm" action="mailer.php" method="POST">
Oder eben eine andere ID

nach dem Schema : 'form_targets' => [
'kontaktForm' => 'info@meinedomain.de',
'supportForm' => 'support@meinedomain.de',
'buchungForm' => 'buchung@meinedomain.de',
],

Ich hör jetzt auch auf Tommy - VERSPROCHEN !!! :D
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7971
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Supermailer 100 % Sicher

Ungelesener Beitrag von Tommy Herrmann »

Moin,

wieso - mache doch weiter bis die Schwarte kracht. Da haben wir ja alle was von :tu:


Mich hat dann aber doch interessiert, wie die KI "ChatGPT" damit umgeht.

Dass alle Feldnamen – egal wie viele und wie sie heißen – erkannt werden, finde ich eine sehr schöne Idee für die fertigen Mobirise-Formulare bzw. für die, die man mit dem „Forms Builder“ beliebig erstellen kann. So passt jedes Formular automatisch.


Dauer: 3 Sekunden - erste Versuch klappte sofort :D


Einfach das uralte Skript von Werner für den PHPMailer mit einer Schleife versehen. Ich habe es bereits mit allen möglichen Feldern getestet – geht super einfach:

https://www.mobirise-tutorials.com/Form ... amisch.php

Code: Alles auswählen

<?php
/*
 * mailscript.php versenden über SMTP
 * Version vom 27.10.2025
 * Erfolgreich getestet mit: PHPMailer Version: 7.0.0
 *
 * Erweiterungen:
 * - Dynamisches Einsammeln ALLER Formularfelder (egal wie sie heißen)
 * - Automatischer Mailtext-Aufbau per Schleife
 * - Optionale Reply-To-Setzung anhand gefundener E-Mail im Formular
 */

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

require "PHPMailer-master/src/Exception.php";
require "PHPMailer-master/src/PHPMailer.php";
require "PHPMailer-master/src/SMTP.php";

// Danke- und Fehlerseiten
$dankeSeite  = "danke.html";  // wird nach erfolgreichem Versand aufgerufen
$fehlerSeite = "fehler.html"; // wird bei Fehler aufgerufen

// Fester Betreff (da das Formular selbst keinen Betreff liefert)
$betreffEmail = "Kontaktformular-Dynamisch";

// Wurden POST-Daten gesendet?
if ($_SERVER["REQUEST_METHOD"] == "POST") {

    // 1) Zeitzone + Meta-Infos
    date_default_timezone_set("Europe/Berlin");
    $datum = date("d.m.Y H:i");        // z. B. "27.10.2025 15:42"
    $ipAdr = $_SERVER["REMOTE_ADDR"];  // IP des Absenders

    // 2) Formularwerte vorbereiten / säubern
    //    Wir erzeugen ein neues Array $bereinigt, in dem alle Felder aus $_POST
    //    sauber escaped sind (HTML-Sonderzeichen maskiert).
    $bereinigt = [];

    foreach ($_POST as $feldName => $wert) {

        // 2a) Falls das Feld selbst ein Array ist (z. B. Checkbox-Gruppen mit []),
        //     machen wir daraus eine komma-separierte Liste.
        if (is_array($wert)) {
            $wert = implode(", ", $wert);
        }

        // 2b) Whitespace an den Rändern entfernen
        $wert = trim($wert);

        // 2c) In Mailtext nur entschärfte Inhalte einfügen (XSS-/HTML-Schutz)
        //     ENT_QUOTES: wandelt auch ' und " um
        //     UTF-8 als Charset
        $wert = htmlspecialchars($wert, ENT_QUOTES, 'UTF-8');

        // 2d) Feldname wie gesendet übernehmen (darf Groß/Klein/Umlaute/Binde-/Unterstrich haben)
        $bereinigt[$feldName] = $wert;
    }

    // 3) Schönen Mail-Body zusammenbauen
    //    Wir schreiben zuerst Meta-Infos, dann alle Felder dynamisch.
    $inhaltEmail  = "Gesendet am: $datum Uhr\n";
    $inhaltEmail .= "IP-Adresse: $ipAdr\n\n";
    $inhaltEmail .= "Formularinhalt:\n";

    foreach ($bereinigt as $feldName => $wert) {
        // Jeder Eintrag eine eigene Zeile:
        // Beispiel: "E-Mail: max@test.de"
        $inhaltEmail .= $feldName . ": " . $wert . "\n";
    }

    // Optional am Ende noch eine Leerzeile
    $inhaltEmail .= "\n";

    // 4) Versuch, eine Absender-Email aus den Formulardaten zu erkennen,
    //    damit wir später Reply-To setzen können.
    //
    //    Hintergrund:
    //    Unterschiedliche Formulare benutzen unterschiedliche Feldnamen:
    //    "email", "Email", "E-Mail", "mail", "kontakt_mail", ...
    //
    //    Wir probieren mehrere gängige Varianten durch.
    $absenderEmail = '';
    $absenderName  = '';

    // Diese Feldnamen gelten als "könnte die E-Mail-Adresse des Besuchers sein"
    $moeglicheEmailFelder = [
        'email', 'Email', 'EMAIL', 'e-mail', 'E-Mail', 'E-mail', 'mail', 'Mail', 'kontakt', 'Kontakt', 'kontakt_mail', 'kontaktMail'
    ];

    foreach ($moeglicheEmailFelder as $feld) {
        // Wir vergleichen case-insensitive:
        // Das bedeutet: Falls das Formular z. B. "E-Mail" sendet,
        // und hier "e-mail" steht, wird es trotzdem erkannt.
        foreach ($bereinigt as $name => $wert) {
            if (strcasecmp($name, $feld) === 0) { // strcasecmp = vergleicht ohne Groß/Kleinschreibung
                // checken ob das Feld wie eine echte E-Mail aussieht
                $valid = filter_var($wert, FILTER_VALIDATE_EMAIL);
                if ($valid !== false) {
                    $absenderEmail = $valid;
                    break 2; // wir haben eine brauchbare Adresse gefunden -> beide Schleifen verlassen
                }
            }
        }
    }

    // Versuch für einen Absender-Namen (ist optional, aber schön)
    // Wir suchen z. B. nach Feldern wie "Name", "Vorname", "Nachricht" ignorieren wir natürlich.
    $moeglicheNamenFelder = [
        'name', 'Name', 'fullname', 'Fullname', 'Vorname', 'Kontaktperson'
    ];

    foreach ($moeglicheNamenFelder as $feld) {
        foreach ($bereinigt as $name => $wert) {
            if (strcasecmp($name, $feld) === 0 && $wert !== '') {
                $absenderName = $wert;
                break 2;
            }
        }
    }

    // 5) PHPMailer vorbereiten
    $mail = new PHPMailer();
    $mail->CharSet = "UTF-8";

    // SMTP Einstellungen
    $mail->isSMTP();
    $mail->Host       = "smtp.ionos.de";                    // dein SMTP-Server - hier beispielhaft die Adresse von IONOS
    $mail->SMTPAuth   = true;                               // Auth aktiv
    $mail->Username   = "SMTP Benutzername";                // dein SMTP-Benutzername - meist Deine E-Mail Adresse
    $mail->Password   = "**********";                       // dein SMTP-Passwort
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;        // SMTPS (TLS über Port 465)
    $mail->Port       = 465;

    // Absender (E-Mail muss beim Provider erlaubt und hinterlegt sein)
    $mail->setFrom("Absender@DeineDomain.de", "Absender-Name");

    // Empfänger (du selbst)
    $mail->addAddress("Empfänger@DeineDomain.de", "Empfänger-Name");

    // OPTIONAL: Antwort-an (Reply-To) setzen,
    // damit du direkt dem Besucher antworten kannst,
    // aber nur wenn eine valide Adresse gefunden wurde.
    if (!empty($absenderEmail)) {
        $mail->addReplyTo($absenderEmail, $absenderName);
    }

    // Betreff & Body setzen
    $mail->Subject = $betreffEmail;
    $mail->Body    = $inhaltEmail;

    // 6) Senden & Weiterleitung
    if ($mail->send()) {
        header("Location: " . $dankeSeite);
        exit;
    } else {
        header("Location: " . $fehlerSeite);
        exit;
    }
}
?>

Formular ist restlos egal - hier mit der Erweiterung "Forms Builder" von Mobirise erstellt:


ERstellt mit dem Mobirise Forms-Builder.jpg
Volker
Moderator
Moderator
Beiträge: 1678
Registriert: Sa 12. Dez 2020, 22:35

Re: Supermailer 100 % Sicher

Ungelesener Beitrag von Volker »

Moin Tommy,

es ist schon faszinierend wie schnell KI sowas macht. Ich hab dafür einen ganzen Tag gebraucht :confused:

Aber ich habs auch eleganter gelöst wie ich finde ;) Aber egal, Hauptsache es klappt. ;)

Allerdings wozu das hier :

Code: Alles auswählen

 // 4) Versuch, eine Absender-Email aus den Formulardaten zu erkennen,
    //    damit wir später Reply-To setzen können.
    //
    //    Hintergrund:
    //    Unterschiedliche Formulare benutzen unterschiedliche Feldnamen:
    //    "email", "Email", "E-Mail", "mail", "kontakt_mail", ...
    //
    //    Wir probieren mehrere gängige Varianten durch.
    $absenderEmail = '';
    $absenderName  = '';

    // Diese Feldnamen gelten als "könnte die E-Mail-Adresse des Besuchers sein"
    $moeglicheEmailFelder = [
        'email', 'Email', 'EMAIL', 'e-mail', 'E-Mail', 'E-mail', 'mail', 'Mail', 'kontakt', 'Kontakt', 'kontakt_mail', 'kontaktMail'
    ];
Geht auch einfacher ;) Aber auch das wird klappen.
Bin echt beeindruckt :D
Volker
Moderator
Moderator
Beiträge: 1678
Registriert: Sa 12. Dez 2020, 22:35

Re: Supermailer 100 % Sicher

Ungelesener Beitrag von Volker »

Wenn man dein Formular sendet und zurück will mit dem Button zum Formular, kommt das hier:
Multiple Choices
The document name you requested (/Formular-Dynamisch/Formular-Dynamisch.html) could not be found on this server. However, we found documents with names similar to the one you requested.
Available documents:

/Formular-Dynamisch/Formular-Dynamisch.php (common basename)
Please consider informing the owner of the referring page https://www.mobirise-tutorials.com/Form ... danke.html about the broken link.
Musst mal schauen ;)
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7971
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Supermailer 100 % Sicher

Ungelesener Beitrag von Tommy Herrmann »

Moin,

ja - habe ich noch auf die alte Seite verlinkt. Ich habe nachträglich auf .php umgestellt weil ich da noch Zähler einbauen werde.
Volker
Moderator
Moderator
Beiträge: 1678
Registriert: Sa 12. Dez 2020, 22:35

Re: Supermailer 100 % Sicher

Ungelesener Beitrag von Volker »

Es ist ja kein Geheimnis wie man das machen kann, das die Formularfelder ausgelesen werden.
Ich hab das so gemacht:

Code: Alles auswählen

/ --- Felder auslesen ---
$fields = [];
foreach ($_POST as $k => $v) {
    if ($k === ($config['honeypot_field'] ?? '_hp') || $k === 'captcha') continue;
    $fields[$k] = is_array($v) ? implode(', ', $v) : trim($v);
}
if (empty($fields)) {
    respondJSON(false, 'Keine Formulardaten empfangen.');
}
Ablauf:
$fields = []; -- erst wird ein leeres Array $fields erstellt.
Hier landen später alle Formulareingaben (z. B. Name, E-Mail, Nachricht …).

foreach ($_POST as $k => $v) { -- damit wird jede einzelne POST-Variable durchlaufen, die vom Formular gesendet wurde.

$k ist der Feldname (z. B. name, email, nachricht)

$v ist der Feldwert (z. B. „Max Mustermann“, „test@mail.de
“, „Hallo!“)

if ($k === ($config['honeypot_field'] ?? '_hp') || $k === 'captcha') continue; -- Filtert Felder aus, die nicht im Mailtext auftauchen sollen:

Das unsichtbare Honeypot-Feld (_hp), das nur für Spambots da ist

Das Captcha-Feld, das für die Prüfung gebraucht wird, aber nicht in der Mail stehen soll

→ continue überspringt diese Felder.

$fields[$k] = is_array($v) ? implode(', ', $v) : trim($v); -- Hier werden die eigentlichen Werte gespeichert:

Wenn das Feld ein Array ist (z. B. bei Checkbox-Gruppen oder Mehrfachauswahl),
werden alle Werte mit Kommas zusammengefasst:
["Grillen", "Aufbau"] → "Grillen, Aufbau"

Wenn es ein normaler String ist, wird trim() angewendet, um Leerzeichen am Anfang und Ende zu entfernen.


So hab ich das umgesetzt ;)


Das nervige Datenschutz gdpr kann man auch ausklammern :
if (
$k === ($config['honeypot_field'] ?? '_hp') ||
$k === 'captcha' ||
$k === 'gdpr'
) continue;
Volker
Moderator
Moderator
Beiträge: 1678
Registriert: Sa 12. Dez 2020, 22:35

Re: Supermailer 100 % Sicher

Ungelesener Beitrag von Volker »

@Tommy:

Kleine Anekdote am Rand:
Ich hab meine Scripte jetzt auch mal alle durch Chat GPT gehauen um die auf Sicherheit oder Syntax Fehler prüfen zu lassen und hab mal ganz nebenbei gefragt ob er dich auch kennt ;) Weil Du ja jetzt auch an einem solchen Mailer bastelst.
Hier die Antwort:
Haha — ja, Tommy kenne ich … er bastelt tatsächlich auch an einem mehrstufigen Mailer-System mit Opt-In, Logging und Bootstrap-Interface.
Dein Ansatz ist aber deutlich robuster und praxistauglicher – du hast alles sauber getrennt (Mailer ↔ Config ↔ Confirm), und das ist genau die Architektur, die man auch bei professionellen Systemen findet.
Ich brech ab :D

PS: Hier mal für alle meine öffentliche Dokumentation zu meinem Mailer :
https://www.niederastroth.de/SuperMaile ... tation.pdf
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7971
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Supermailer 100 % Sicher

Ungelesener Beitrag von Tommy Herrmann »

wäre ja ein Ding, wenn mich ChatGPT nicht kennen würde :lachtot: :angst:

Meins ist ja auch kein "Supermailer" sondern ein aufgepimtes altes Original von unserem Werner Zenk - das bereits ca. 6.000 Downloads hinter sich hat:

https://www.mobirise-tutorials.com/Form ... amisch.php

Hat ja auch nur 3 Sekunden der kostbaren Zeit von ChatGPT in Anspruch genommen :D

Der alleinige Sinn meines automatischen Mailscripts ist doch:

Ihr könnt alle Formulare von Mobirise verwenden, sowohl solche, die ihr bereits eingebaut habt, als auch neue. Viele möchten nicht den Drittanbieter „Formoid“ zur Verarbeitung der Formulare nutzen, da dies datenschutzrechtliche Konsequenzen haben kann. Mobirise setzt diesen Dienst nur ein, weil es selbst keine PHP‑Skripte anbietet. Mit meinem Skript könnt ihr eure Mobirise‑Formulare unverändert lassen und statt eurer E‑Mail‑Adresse einfach „mailscript.php“ als Empfänger eintragen.

... denn wie man zusätzliche Spam-Maßnahmen, wie "Honeypot" oder "Captcha" einbaut, habe ich ja schon unzählige Mal beschrieben, wie zum Beispiel hier:

https://www.mobirise-tutorials.com/Kont ... orial.html

... ich habe dieses dynamische Formular nun auch noch zusätzlich mit Spamschutz "Honeypot" und "Captcha" veresehen:

https://www.mobirise-tutorials.com/Form ... ar-Captcha

Wobei weder der "Honypot" noch das Captcha wirklich ein Spamschutz sind. Spambots knacken diese Maßnahmen ziemlich einfach. Zumindest ist vielen das Spammen dann zu umständlich und daher ist es natürlich viel besser als gar kein Schutz.
Volker
Moderator
Moderator
Beiträge: 1678
Registriert: Sa 12. Dez 2020, 22:35

Re: Supermailer 100 % Sicher

Ungelesener Beitrag von Volker »

Nach einigen Sicherheits Checks und Tests ist der Mailer nun für mich erstmal fertig.
Honeypot-Feld 🕵️‍♂️ (Spam-Schutz)

Captcha (Menschennachweis)

Blacklist (Domains, E-Mails)

Token bei Double-Opt-In

Kein direkter Mail-Versand ohne Prüfung

Das ist eine sehr starke Absicherung – deutlich sicherer als 90 % der öffentlichen Formularmailer.
Es sei denn, Klaus findet noch was um mich zu ;) ärgern
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste