Seite 4 von 8

Re: Gästebuch ohne Datenbank

Verfasst: Fr 5. Sep 2025, 09:17
von Volker
Ich bin schon wieder ganz woanders :D

Gleich gibt es ein geiles Newsletter Script ..... mit leichtem Einbau in Mobirse ;)

Auf meiner Seite schon eingebaut .... ganz unten auf der Startseite als Link.

Kommt heute... :D :D

Re: Gästebuch ohne Datenbank

Verfasst: Fr 5. Sep 2025, 09:43
von Tommy Herrmann
... ich bin da aber vorläufig raus - musst Du gucken, vielleicht testet auch mal jemand anderes. Achte auf die E-Mail.

OK - alles nochmals vom Gästebuch getestet und für meine Begriffe ist das so jetzt fertig :tu:

https://www.mobirise-tutorials.com/Tuto ... Volker.php

Bei längeren Gästebüchern sollte dann vielleicht im Adminbereich auch eine Seiten-Navigation hinzugefügt werden, eben so wie auf der index.php.

Re: Gästebuch ohne Datenbank

Verfasst: Fr 5. Sep 2025, 11:41
von Volker
Tommy Herrmann hat geschrieben: Fr 5. Sep 2025, 09:43
Bei längeren Gästebüchern sollte dann vielleicht im Adminbereich auch eine Seiten-Navigation hinzugefügt werden, eben so wie auf der index.php.
Ist nun auch im aktuellen ZIP. Admin wird auch paginiert

Re: Gästebuch ohne Datenbank

Verfasst: Fr 5. Sep 2025, 12:06
von Tommy Herrmann
Ja - prima :tu:

Das ist so logischer, sonst kann das schon sehr lang werden.

Ich habe dennoch nochmals die korrekte Sortierung wieder eingefügt. Es ist irgendwie total unlogisch wenn neuere Einträge unter älteren stehen und widerstrebt mir zu sehr :)

Re: Gästebuch ohne Datenbank

Verfasst: Fr 5. Sep 2025, 12:14
von Volker
Tommy,

jeder darf, kann meine Scripte verändern nach seinem Belieben. Das ist für mich halt jetzt in der admin.php nicht so wichtig gewesen, da ja der Admin die Einträge frei schaltet. Wenn die dann dort etwas durcheinander sind stört mich das eben nicht. Mir war wichtig ein GB ohne Datenbank zu bauen.

Im eigentlichen GB ist der Fehler ja jetzt weg ;)

Re: Gästebuch ohne Datenbank

Verfasst: Sa 6. Sep 2025, 06:37
von Tommy Herrmann
Ja, das ist zwar theoretisch möglich, aber in der Praxis kann es kaum jemand ändern, weil die Leute, die sich so etwas herunterladen, eben keine HTML‑Kenntnisse haben. Hätten sie diese Kenntnisse, dann könnten sie sich dieses Gästebuch ja auch selbst erstellen.

Übrigens habe ich auch an der Datei "backup.php" einige Änderungen vorgenommen. Die Seitenbreite war nicht korrekt, sodass die Buttons nicht sichtbar waren, Bootstrap > class="col-md-8" > geändert in: class="col-md-12". Ich habe den Buttons einen Style für eine einheitliche Größe und etwas Abstand gegeben, damit sie nicht dierkt aneinanderkleben.

Außerdem habe ich dem <body> ein Margin (unten) zugewiesen (wie bei allen anderen Dateien auch) und das Skript von Werner für das dynamische iFrame hier ebenfalls eingebunden, sonst fällt diese Seite optisch ja vollkommen raus.

Nur falls Du das noch machen solltest, hier mein geänderter Code der Datei "backup.php":

Code: Alles auswählen

<?php
// backup.php - Einfaches Backup-System für das Gästebuch
// Nur für Admins zugänglich!

session_start();

// Sicherheitscheck
if (!isset($_SESSION['admin'])) {
    die('Zugriff verweigert');
}

$backup_dir = 'backups/';
if (!is_dir($backup_dir)) {
    mkdir($backup_dir, 0755, true);
}

function createBackup() {
    global $backup_dir;
    
    $timestamp = date('Y-m-d_H-i-s');
    $backup_file = $backup_dir . "guestbook_backup_$timestamp.zip";
    
    $zip = new ZipArchive();
    
    if ($zip->open($backup_file, ZipArchive::CREATE) === TRUE) {
        // JSON-Dateien hinzufügen
        if (file_exists('entries.json')) {
            $zip->addFile('entries.json');
        }
        if (file_exists('pending.json')) {
            $zip->addFile('pending.json');
        }
        
        // Konfiguration hinzufügen (falls vorhanden)
        if (file_exists('config.php')) {
            $zip->addFile('config.php');
        }
        
        $zip->close();
        return $backup_file;
    }
    
    return false;
}

function listBackups() {
    global $backup_dir;
    
    $backups = [];
    if (is_dir($backup_dir)) {
        $files = scandir($backup_dir);
        foreach ($files as $file) {
            if (pathinfo($file, PATHINFO_EXTENSION) === 'zip') {
                $backups[] = [
                    'file' => $file,
                    'path' => $backup_dir . $file,
                    'size' => filesize($backup_dir . $file),
                    'date' => filemtime($backup_dir . $file)
                ];
            }
        }
        // Nach Datum sortieren (neueste zuerst)
        usort($backups, function($a, $b) {
            return $b['date'] - $a['date'];
        });
    }
    
    return $backups;
}

// Backup erstellen
if (isset($_POST['create_backup'])) {
    $backup_file = createBackup();
    if ($backup_file) {
        $message = "Backup erfolgreich erstellt: " . basename($backup_file);
    } else {
        $error = "Fehler beim Erstellen des Backups";
    }
}

// Backup herunterladen
if (isset($_GET['download']) && file_exists($_GET['download'])) {
    $file = $_GET['download'];
    header('Content-Type: application/zip');
    header('Content-Disposition: attachment; filename="' . basename($file) . '"');
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit;
}

// Backup löschen
if (isset($_POST['delete_backup']) && file_exists($_POST['backup_file'])) {
    unlink($_POST['backup_file']);
    $message = "Backup wurde gelöscht";
}

$backups = listBackups();
?>

<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Backup-Verwaltung</title>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-icons/1.10.0/font/bootstrap-icons.min.css" rel="stylesheet">
    <style>
        body {
            margin-bottom: 50px;
        }
    </style>    
    <!-- Resize-Skript von Werner Zenk  -->
    <script>
        window.addEventListener("load", fenster);
        window.addEventListener("resize", fenster);
        function fenster() {
          if (parent.document.getElementsByTagName("iframe")[0]) {
            parent.document.getElementsByTagName("iframe")[0].style.height =
              document.getElementsByTagName("html")[0].offsetHeight +'px';
          }
        }
    </script>    
</head>
<body class="bg-light">
    <div class="container mt-5">
        <div class="row justify-content-center">
            <div class="col-md-12">
                <div class="card">
                    <div class="card-header bg-info text-white">
                        <h4><i class="bi bi-archive"></i> Backup-Verwaltung</h4>
                    </div>
                    <div class="card-body">
                        <!-- Nachrichten -->
                        <?php if (isset($message)): ?>
                            <div class="alert alert-success"><?= $message ?></div>
                        <?php endif; ?>
                        
                        <?php if (isset($error)): ?>
                            <div class="alert alert-danger"><?= $error ?></div>
                        <?php endif; ?>

                        <!-- Neues Backup erstellen -->
                        <form method="POST" class="mb-4">
                            <button type="submit" name="create_backup" class="btn btn-primary">
                                <i class="bi bi-plus-circle"></i> Neues Backup erstellen
                            </button>
                        </form>

                        <!-- Backup-Liste -->
                        <h5>Vorhandene Backups</h5>
                        <?php if (empty($backups)): ?>
                            <p class="text-muted">Keine Backups vorhanden</p>
                        <?php else: ?>
                            <div class="table-responsive">
                                <table class="table table-striped">
                                    <thead>
                                        <tr>
                                            <th>Datei</th>
                                            <th>Datum</th>
                                            <th>Größe</th>
                                            <th>Aktionen</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        <?php foreach ($backups as $backup): ?>
                                            <tr>
                                                <td><?= htmlspecialchars($backup['file']) ?></td>
                                                <td><?= date('d.m.Y H:i', $backup['date']) ?></td>
                                                <td><?= number_format($backup['size'] / 1024, 2) ?> KB</td>
                                                <td>
                                                    <a href="?download=<?= urlencode($backup['path']) ?>" 
                                                       class="btn btn-sm btn-success" style="width: 100px;">
                                                        <i class="bi bi-download"></i> Download
                                                    </a>
                                                    <form method="POST" class="d-inline">
                                                        <input type="hidden" name="backup_file" value="<?= $backup['path'] ?>">
                                                        <button type="submit" name="delete_backup" 
                                                                style="width: 100px; margin-top: 5px;"
                                                                class="btn btn-sm btn-danger"
                                                                onclick="return confirm('Backup wirklich löschen?')">
                                                            <i class="bi bi-trash"></i> Löschen
                                                        </button>
                                                    </form>
                                                </td>
                                            </tr>
                                        <?php endforeach; ?>
                                    </tbody>
                                </table>
                            </div>
                        <?php endif; ?>

                        <div class="mt-4">
                            <a href="admin.php" class="btn btn-secondary">
                                <i class="bi bi-arrow-left"></i> Zurück zur Administration
                            </a>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/js/bootstrap.bundle.min.js"></script>
</body>
</html>

Backup-Verwaltung angepasst von Tommy.jpg








P.S.:

Ich habe in der Datei "admin.php" außerdem das Styling des Passwort-Input-Feldes geändert, weil es mir zu umständlich war, zuerst den vom Browser zufällig eingesetzten sechsstelligen Code löschen zu müssen, bevor man sein eigenes, gegebenenfalls bereits gespeichertes, Passwort eingeben kann:


Code: Alles auswählen

                            <form method="POST">
                                <input type="hidden" name="action" value="admin_login">
                                <div class="mb-4">
                                    <label for="password" class="form-label fw-semibold">Passwort</label>
                                    <!--<input type="password" name="password" id="password" 
                                           class="form-control form-control-lg" 
                                           placeholder="Admin-Passwort eingeben" required>-->
                                    <input type="password" name="password" id="password" 
                                           class="form-control form-control-lg" 
                                           placeholder="Passwort eingeben"
                                           autocomplete="new-password"
                                           value=""
                                           required>
                                </div>
                                <div class="d-grid">
                                    <button type="submit" class="btn btn-danger btn-lg">
                                        <i class="bi bi-key"></i> Anmelden
                                    </button>
                                </div>
                            </form>


Administrator Passwort Abfrage.jpg

Re: Gästebuch ohne Datenbank

Verfasst: Sa 6. Sep 2025, 07:45
von Volker
Moin Tommy,

hab deine backup.php ins Zip gelegt.

Was ich jetzt nicht ganz verstehe... ist das mit dem Admin Login. Ich hab da keine vom Browser ausgefüllte Zeichen.
Bei mir steht da nur der Platzhalter wie es sein soll :confused:
gbadmin1.png
https://www.niederastroth.de/gb/admin.php

Re: Gästebuch ohne Datenbank

Verfasst: Sa 6. Sep 2025, 09:34
von Tommy Herrmann
Kann gut sein, und das nehme ich an, dass das an dem Passwortmanager von meinem Firefox liegt - oder welchem Browser auch immer.

Wenn ich da Hunderte von gespeicherten Passwörtern habe, sollte (wie in meinem neuen Code oben) eben auch der Wert zunächst leer gesetzt werden, damit der Platzhalter angezeigt wird.

Code: Alles auswählen

autocomplete="new-password" value="" required

Code: Alles auswählen

<input type="password" name="password" id="password" 
class="form-control form-control-lg" 
placeholder="Passwort eingeben"
autocomplete="new-password"
value=""
required>
Deswegen ist es wahrscheinlich auch immer besser nicht nur ein Passwort zu verwenden sondern eben einen:

Usernamen und ein Passwort

Es können ja zum Beispiel dem User-Namen "Otto" 20 oder mehr unterschiedliche Passwörter zugeordnet sein, welches soll der Browser denn dann nehmen, also füllt er das Input-Feld mit einem zufälligen Passwort, das es gar nicht gibt. Das muss dann eben immer erst gelöscht werden und das nervt. So wird das Feld mit einem leeren Wert (value="") beschrieben und das kann nicht mehr passieren.

Re: Gästebuch ohne Datenbank

Verfasst: Sa 6. Sep 2025, 10:19
von Tommy Herrmann
Ich habe jetzt doch mal ChatGPT zu dem Thema Passwort befragt:

Ist es nicht eigentlich besser für einen solchen Administrator-Zugang zu einem Gästebuch oder wo auch immer, nicht nur ein Passwort, sondern einen Usernamen + ein Passwort abzufragen. Sonst kann ich mir vorstellen kommt zum Beispiel auch die Passwortverwaltung vom Browser durcheinander, denn es können ja dem gleichen Usernamen - wie zum Beispiel "Tommy" - eben ein Dutzend oder mehr unterschiedliche Passwörter zugeordnet sein. Kannst Du bitte eine kurze Stellungnahme dazu schreiben und ob ein Benutzername + Passwort eben besser wäre als nur ein Passwort und warum.

ChatGPT hat geschrieben:

Absolut, Tommy — du hast völlig recht. 🙂
Ich gebe dir eine **klare, kurze Stellungnahme** dazu, warum **Benutzername + Passwort** in den meisten Fällen besser ist als nur ein Passwort, insbesondere bei einem **Admin-Zugang** wie bei deinem Gästebuch.

---

## **1. Browser-Passwortmanager & Autovervollständigung**

* Wenn du **nur ein Passwortfeld** hast, kann der Browser nicht unterscheiden, für **welches Konto** dieses Passwort ist.
* Beispiel: Du hast 3 verschiedene Gästebücher oder mehrere Admin-Bereiche, und der Browser kennt mehrere gespeicherte Passwörter für die gleiche Domain.
→ Firefox/Chrome könnten **falsch automatisch ein Passwort einfüllen** → genau wie bei deinem Problem mit den **6 Punkten**.
* Mit einem **Benutzernamenfeld** (z. B. „admin“, „Tommy“, „Volker“) erkennt der Browser eindeutig, **welches Konto zu welchem Passwort gehört** → saubere Verwaltung.

---
## **2. Sicherheit** | **Nur Passwort** | **Benutzername + Passwort** | Angreifer muss nur **ein Feld** erraten | Angreifer muss **zwei Felder** erraten | Einfacher für Brute-Force-Angriffe | Viel schwieriger, weil Username ebenfalls geschützt werden kann | Kein Schutz vor bekannten Passwörtern | Selbst wenn das Passwort bekannt wird, bleibt der Admin-Bereich geschützt, wenn der Benutzername geheim ist Gerade für **Admin-Bereiche** ist das wichtig: Wenn jemand weiß, dass dein Gästebuch `admin.php` heißt, könnte er einfach massenhaft Passwörter durchprobieren. Mit einem **zusätzlichen Benutzernamen** muss er **erst einmal diesen kennen**, bevor er das Passwort überhaupt testen kann.
---

## **3. Sauberere Trennung der Konten**

* Bei mehreren Administratoren (z. B. Tommy & Volker) brauchst du eh **eigene Accounts**.
* Selbst wenn du nur **einen einzigen Admin** hast, ist ein Benutzername sinnvoll, weil:

* Die Passwortverwaltung im Browser übersichtlicher bleibt.
* Mehr Flexibilität für die Zukunft da ist (z. B. mehrere Admins oder rollenbasierte Rechte).

---

## **4. Best Practice**

Fast alle **professionellen Systeme** (WordPress, Joomla, Shopsysteme, Foren) verlangen **immer Benutzername + Passwort**, auch wenn es am Ende nur **einen Administrator** gibt.

Grund:

* **Bessere Browser-Kompatibilität**
* **Mehr Sicherheit**
* **Leichtere Verwaltung**
* Zukunftssichere Erweiterbarkeit

---

## **Empfehlung**

Für dein Gästebuch-Adminpanel würde ich langfristig **Benutzername + Passwort** empfehlen.

**Begründung:**

1. Browser-Passwortmanager arbeiten zuverlässiger → keine falschen Autofills.
2. Mehr Sicherheit, weil zwei unabhängige Faktoren abgefragt werden.
3. Bessere Erweiterbarkeit, falls du irgendwann mehrere Admins hast.
4. Gewohnte und etablierte Benutzererfahrung, wie bei allen großen Systemen.

---

## **Kurz gesagt**

> **Ja, Benutzername + Passwort ist klar besser**
> … für **Browserkompatibilität**, **Sicherheit** und **Zukunftssicherheit**.
> Dein aktuelles System **nur mit Passwort** ist okay für eine **einfache Einzelnutzung**,
> aber für sauberen Loginkomfort und langfristige Wartbarkeit ist die **Kombination** empfehlenswert.

---

Wenn du willst, könnte ich dir deine aktuelle **admin.php** so umbauen, dass du:

* einen **Benutzernamen + Passwort** abfragen kannst,
* ohne dass wir den kompletten Code anfassen,
* und so, dass es **abwärtskompatibel** bleibt, falls du erst mal nur **einen Benutzer** hast.

Das wäre ein kleiner Eingriff, aber verbessert langfristig sowohl die **Sicherheit** als auch die **Kompatibilität** mit Firefox, Chrome & Co.

Willst du, dass ich dir so eine **minimalinvasive Lösung** vorbereite?
Dann kannst du selbst entscheiden, ob du sie einbauen möchtest.

Re: Gästebuch ohne Datenbank

Verfasst: Sa 6. Sep 2025, 10:46
von Volker
Ja Tommy ist mir auch bewusst ;) ( Ohne KI )

Aber ich lasse das jetzt mal so nur mit Passwort. Das kann ja auch 12 oder mehr Zeichen haben - dann wirds auch nicht so schnell gehackt ;)

Re: Gästebuch ohne Datenbank

Verfasst: Sa 6. Sep 2025, 11:10
von Tommy Herrmann
Ja klar - ich wollte auch nicht, dass du das änderst. Ich wollte nur erklären, warum der Passwortmanager des Browsers falsche Autofills vornimmt und weshalb das Eingabefeld deshalb leer gesetzt werden sollte.

Re: Gästebuch ohne Datenbank

Verfasst: Mo 15. Sep 2025, 14:21
von Nachtfalke
Ich brauch mal euer Hilfe.
Bei einem Testeintrag im Gästebuch bekomme ich beim "Eintrag senden" diese Meldung.

"Ihr Eintrag wurde übermittelt und wartet auf Freischaltung. (E-Mail-Benachrichtigung fehlgeschlagen - bitte Admin kontaktieren)"

Die korrekte E‑Mail‑Adresse ist in der Datei "eintragsformular.php" im Abschnitt "Konfiguration" eingetragen.
Hosting ist bei DomainFactory.

https://aussie-scully.de/gaestebuch.php

Dann würde ich auch noch gerne die Button mit "Eintrag verfassen" "3 Einträge" und aria-label="Gästebuch Paginierung" in einer ander Farbe haben als das Blau. Das bekomme ich leider nicht hin.

Und dieser Hinweis "E-Mail-Schutz: Modus 3 aktiv" muss, sollte oder kann der bleiben ?

Re: Gästebuch ohne Datenbank

Verfasst: Mo 15. Sep 2025, 15:15
von Tommy Herrmann
Hallo Dieter,

ich glaube das hatte ich zunächst auch, jetzt habe ich mich inzwischen mit ganz viel anderen Dingen beschäftigt. Hast du denn im "eintragsformular.php" im Abschnitt "Konfiguration" an beiden vorgesehenen Stellen deine korrekte E‑Mail‑Adresse ein. Diese E-Mail muss auch dem Provider bekannt sein, also dort angelegt worden sein.

Ich habe vorhin bei Deinem Test auch sofort eine E-Mail erhalten und Dich vom Handy freigeschaltet.

Ich habe jetzt Besuch und kann heute leider nicht richtig helfen. Ich denke und hoffe das Volker noch hier aufschlägt.

Re: Gästebuch ohne Datenbank

Verfasst: Mo 15. Sep 2025, 16:48
von Tommy Herrmann
Das sieht bei mir so aus:

Code: Alles auswählen

/* =========================
   KONFIGURATION
   ========================= */
$SITE_NAME            = 'Gästebuch-Volker';
$ADMIN_EMAIL          = 'Tommy@MeineDomain.com';  // ← Empfänger (Admin)
$EMAIL_NOTIFICATIONS  = true;

// From/Envelope-Sender MUSS eine echte Mailbox derselben Domain sein!
$FROM_ADDRESS         = 'Tommy@MeineDomain.com';  // ← deine Provider-Mailbox
$FROM_NAME            = $SITE_NAME;               // Anzeigename im From-Header

Re: Gästebuch ohne Datenbank

Verfasst: Mo 15. Sep 2025, 17:02
von Nachtfalke
Danke- ich Check das mal. Sollte aber eigentlich alles soweit passen wie bei dir auch. Aber wie gesagt… eigentlich.
Werde dann noch mal berichten.

Re: Gästebuch ohne Datenbank

Verfasst: Mo 15. Sep 2025, 17:06
von Tommy Herrmann
Achte auch darauf, dass die Codierung "UTF-8" erhalten bleibt. Du darfst diese PHP Skripte auf keinen Fall mit einem Text-Editor, wie z.B. "Word" bearbeiten, sondern immer nur mit dem WINDOWS-Editor "Nodepad" oder auch "Notepad++":

https://notepad-plus-plus.org/downloads/

Schreibe uns auch, bei welchem Provider du bist.

Re: Gästebuch ohne Datenbank

Verfasst: Mo 15. Sep 2025, 17:15
von Nachtfalke
Provider hatte ich oben schon mitgeteilt… Hosting ist bei DomainFactory.
Zum bearbeiten von solchen Dateien nutze ich immer Notepad++

Re: Gästebuch ohne Datenbank

Verfasst: Mo 15. Sep 2025, 17:22
von Tommy Herrmann
Ich befürchte, dass dein Provider den Versand von E-Mail nur mittels SMTP zulässt und eben keinen reinen PHP() Versand.

Am besten du rufst mal den Support an und fragst. Bitte berichte dann.

Das hatte ich Volker bereits gesagt und befürchtet, dass das so Probleme geben wird.

viewtopic.php?p=17907#p17907

Volker muss noch lernen, dass es nicht bei allen funktioniert, nur weil es bei ihm funktioniert.

Re: Gästebuch ohne Datenbank

Verfasst: Mo 15. Sep 2025, 19:48
von Klaus
Um nur mal die PHP mail Funkiton zu testen folgendes in einer Datei auf den Server schieben,
am Besten in ein geschütztes Verzeichnis in das nur Du kommt (bzw. nach dem kurzen Test sofort löschen)
und von dort aufrufen.

!!! Jeder der die PHP Datei aufrufen kann kann ne Mail versenden !!!
->Daher auf keinen Fall löschen vergessen und nur ganz kurz für den Test auf dem Server legen!

Ganz wichtig die E-Mail Adresse muss eine gültige E-Mail Adresse der Domain sein von der Du versenden willst.
Für den Test in Test2 beide Adressen gleich und beide gültige E-Mail Adressen von der Domain von der Du versenden willst.

Test1:

Code: Alles auswählen

<?php
  mail("meine-mail-bei-df@example.com", "Betreff", "Nachricht");
?>
Oder falls das nicht klappt hiermit:

Test 2:

Code: Alles auswählen

<?php
  mail("meine-mail-bei-df@example.com", "Betreff", "Nachricht", "From: meine-mail-bei-df@example.com");
?>
Es würde noch einen 3ten Test geben mit einer -f Option ... erkläre ich dann wenn Test 1 und Test 2 nicht funktionieren.

Re: Gästebuch ohne Datenbank

Verfasst: Mo 15. Sep 2025, 19:49
von Volker
Tja, das Problem kenne ich wirklich nicht.
Ich muss dann wohl in jedes Script den PHPMailer einbauen und SMTP Versand einbauen.

Genau das wollte ich eigentlich nicht bei dem GB, weil es ja nur um die E-Mail Benachrichtigung über einen neuen Eintrag geht. Werde das aber jetzt nachholen. Kommt halt der PHPMailer dazu und eine Änderung am Script.