Gästebuch Block

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

Gästebuch Block

Ungelesener Beitrag von Volker »

Huhu :D

Ich hab da mal was gebastelt ;)



Demo Seite: https://www.niederastroth.de/gbdemo/
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 8526
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Gästebuch Block

Ungelesener Beitrag von Tommy Herrmann »

Hattest Du nicht schon einen Gästebuch-Block :eek:

https://www.mobirise-tutorials.com/Tuto ... Volker.php
Volker
Moderator
Moderator
Beiträge: 2465
Registriert: Sa 12. Dez 2020, 22:35

Re: Gästebuch Block

Ungelesener Beitrag von Volker »

Tommy

das ist ein Block den kann man einfach in Mobirse einbauen.
Schau ihn dir mal an, dann siehst den unterschied ;)

Nix Iframe oder include :D

Styling komplett in den Blockeigenschaften ;)
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 8526
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Gästebuch Block

Ungelesener Beitrag von Tommy Herrmann »

Noch nicht angeguckt, kurze Frage:

Wieso steht da das Passwort denn überhaupt im HTML des Blocks "volker04", zumal es gar nicht das richtige Passwort ist.

Code: Alles auswählen

var currentAdminKey = currentSection ? String(currentSection.getAttribute('data-admin-key')).trim() : 'volker04';
Kann man denn das Gästebuch auch so einstellen, dass Beiträge erst nach der Freigabe vom Admin erscheinen, das ist ja sonst viel zu gefährlich. Da haut ein Bot sonst mal zehntausend Porno-Beiträge in einer Minute rein.

Natürlich müsste der Admin dann auch mit jedem neuen Eintrag ins Gästebuch mit einer E-Mail benachrichtigt werden.

Weiterhin reicht mir eigentlich das "nur löschen" (Papierkorb) nicht aus - man muss ein Gästebuch auch immer editieren können.

Sieht aber sehr schick aus und kann natürlich auch genau so bleiben - nur das mit dem Passwort hätte ich gerne gewusst.
Volker
Moderator
Moderator
Beiträge: 2465
Registriert: Sa 12. Dez 2020, 22:35

Re: Gästebuch Block

Ungelesener Beitrag von Volker »

Tommy,
da ich jetzt eh 9 Stunden im Bus sitze :D

Werde ich das mal aufhübschen für Dich und alle anderen ;)

Melde mich dann...
Volker
Moderator
Moderator
Beiträge: 2465
Registriert: Sa 12. Dez 2020, 22:35

Re: Gästebuch Block

Ungelesener Beitrag von Volker »

Tommy teste mal admin PW volker04 man kann löschen und editieren, bekommt eine mail kann frei schalten alles wie gewünscht.
Wenn dein OK kommt hau ich das ins zip

Passwort ist aus dem HTML auch raus ;)

Das war ja heute morgen eine ganz neue Idee und die sollte so einfach wie möglich sein (für mich)
Jetzt durch Tommy mal wieder eine Profi Anwendung :D

https://www.niederastroth.de/gbdemo/
Volker
Moderator
Moderator
Beiträge: 2465
Registriert: Sa 12. Dez 2020, 22:35

Re: Gästebuch Block

Ungelesener Beitrag von Volker »

Ich hab es mal in Zip gepackt ;)

Ab jetzt müsst ihr nur in der API die Werte ändern:
// 🔒 EINSTELLUNGEN
$adminPassword = 'volker04';
$adminEmail = 'volker@niederastroth.de'; // <-- DEINE MAIL-ADRESSE!
$websiteUrl = 'https://www.niederastroth.de/gbdemo/'; // <-- URL ZU DEINEM GB-ORDNER!
Also Passwort, Eure E-Mail und die URL zum Gästebuch. Das ist alles. Die API sollte dann aber auch im selben Verzeichnis sein wie das Gästebuch !
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 8526
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Gästebuch Block

Ungelesener Beitrag von Tommy Herrmann »

Wieso sitzt Du 9 Stunden in einem Bus :eek:

Wie schaltet man einen Beitrag denn frei?
Volker
Moderator
Moderator
Beiträge: 2465
Registriert: Sa 12. Dez 2020, 22:35

Re: Gästebuch Block

Ungelesener Beitrag von Volker »

Tommy ich arbeite doch beim Landratsamt und mache Geschwindigkeits Messungen ;)
Freischalten geht per mail, wenn du auf den link in der mail klickst wird frei geschaltet

Hab Deinen jetzt frei geschaltet
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 8526
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Gästebuch Block

Ungelesener Beitrag von Tommy Herrmann »

Habe das jetzt hier (noch nicht fertig) eingebaut.

https://www.mobirise-tutorials.com/AI-B ... tbuch.html

Leider kann ich keinen Beitrag freischalten, weil die einfache Mail nicht ankommt. Das Problem kennen wir ja bereits, IONOS verlangt SFTP mit Server-Angabe, Passwort, usw.
Volker
Moderator
Moderator
Beiträge: 2465
Registriert: Sa 12. Dez 2020, 22:35

Re: Gästebuch Block

Ungelesener Beitrag von Volker »

Dann bau ich SMTP noch ein ;)

auf die schnelle Tommy, teste das mal als api:

Code: Alles auswählen

<?php
// guestbook-api.php - Intelligente Hybrid-Mail (SMTP / PHP-Mail) & Admin-Modus
header('Content-Type: application/json; charset=utf-8');
date_default_timezone_set('Europe/Berlin');

// 🔒 Konfiguration
$apiPassword = 'volker04'; // Dein Admin-Passwort für den Doppelklick
$adminEmail  = 'info@niederastroth.de'; // Deine Empfänger-Adresse
$websiteUrl  = 'https://www.niederastroth.de/gbdemo/'; // URL zu diesem Ordner (für den Freischaltlink)

// 📧 SMTP KONFIGURATION (Leer lassen, wenn du normales PHP-Mail nutzen willst!)
define('SMTP_HOST', 'smtp.niederastroth.de'); // z.B. smtp.niederastroth.de
define('SMTP_PORT', 465);                 // 465 (SSL) oder 587 (TLS)
define('SMTP_CRYPT', 'ssl');              // 'ssl', 'tls' oder ''
define('SMTP_USER', 'info@niederastroth.de'); // Deine SMTP-Mailadresse
define('SMTP_PASS', 'DEIN_SMTP_PASSWORT'); // Dein echtes Mail-Passwort (leer lassen für PHP-Mail)

$dbFile = 'gaestebuch.db';

try {
    $db = new PDO('sqlite:' . __DIR__ . '/' . $dbFile);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    $db->exec("CREATE TABLE IF NOT EXISTS entries (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        message TEXT NOT NULL,
        status INTEGER DEFAULT 0,
        created_at TEXT NOT NULL
    )");
} catch (PDOException $e) {
    echo json_encode(['success' => false, 'error' => 'Datenbankfehler: ' . $e->getMessage()]);
    exit;
}

// GET-ANFRAGEN: Einträge laden oder Freischaltung per E-Mail-Link
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    // Fall A: Freischaltung über den Link aus der E-Mail
    if (isset($_GET['action']) && $_GET['action'] === 'approve') {
        $id = intval($_GET['id'] ?? 0);
        $hash = $_GET['hash'] ?? '';
        
        if ($hash === md5($id . $apiPassword)) {
            $stmt = $db->prepare("UPDATE entries SET status = 1 WHERE id = ?");
            $stmt->execute([$id]);
            
            header("Content-Type: text/html; charset=UTF-8");
            echo "<html><head><title>Erfolg</title></head><body style='font-family:Arial,sans-serif;text-align:center;padding-top:80px;background:#f8fafc;color:#0f172a;'>";
            echo "<div style='display:inline-block;background:#fff;padding:40px;border-radius:14px;box-shadow:0 4px 20px rgba(0,0,0,0.05);'>";
            echo "<h2 style='color:#22c55e;'>🎉 Eintrag erfolgreich freigeschaltet!</h2>";
            echo "<p>Der Beitrag ist ab jetzt live für alle Besucher sichtbar.</p>";
            echo "</div></body></html>";
            exit;
        } else {
            header("Content-Type: text/html; charset=UTF-8");
            die("<h3>Ungültiger Freischalt-Code.</h3>");
        }
    }

    // Fall B: Normale Einträge für das Gästebuch laden
    $isAdmin = false;
    if (isset($_GET['adminCheck']) && $_GET['adminCheck'] === $apiPassword) {
        $isAdmin = true;
    }

    if ($isAdmin) {
        $stmt = $db->query("SELECT * FROM entries ORDER BY created_at DESC");
    } else {
        $stmt = $db->query("SELECT * FROM entries WHERE status = 1 ORDER BY created_at DESC");
    }
    $entries = $stmt->fetchAll(PDO::FETCH_ASSOC);
    echo json_encode(['success' => true, 'entries' => $entries]);
    exit;
}

// POST-ANFRAGEN: Eintragen, Löschen, Bearbeiten, Login-Prüfung
$input = json_decode(file_get_contents('php://input'), true);

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    
    if (isset($input['action']) && $input['action'] === 'checkLogin') {
        if (isset($input['password']) && $input['password'] === $apiPassword) {
            echo json_encode(['success' => true]);
        } else {
            echo json_encode(['success' => false, 'error' => 'Falsches Passwort!']);
        }
        exit;
    }

    if (isset($input['action']) && $input['action'] === 'delete') {
        if (!isset($input['password']) || $input['password'] !== $apiPassword) {
            echo json_encode(['success' => false, 'error' => 'Nicht autorisiert!']);
            exit;
        }
        $stmt = $db->prepare("DELETE FROM entries WHERE id = ?");
        $stmt->execute([$input['id']]);
        echo json_encode(['success' => true]);
        exit;
    }

    if (isset($input['action']) && $input['action'] === 'update') {
        if (!isset($input['password']) || $input['password'] !== $apiPassword) {
            echo json_encode(['success' => false, 'error' => 'Nicht autorisiert!']);
            exit;
        }
        $stmt = $db->prepare("UPDATE entries SET message = ? WHERE id = ?");
        $stmt->execute([$input['message'], $input['id']]);
        echo json_encode(['success' => true]);
        exit;
    }

    // Neuer Eintrag verfassen
    if (isset($input['name']) && isset($input['message'])) {
        $name = trim(htmlspecialchars($input['name']));
        $message = trim(htmlspecialchars($input['message']));

        if (empty($name) || empty($message)) {
            echo json_encode(['success' => false, 'error' => 'Bitte alle Felder ausfüllen.']);
            exit;
        }

        $stmt = $db->prepare("INSERT INTO entries (name, message, created_at, status) VALUES (?, ?, ?, 0)");
        $timestamp = date('Y-m-d H:i:s');
        $stmt->execute([$name, $message, $timestamp]);
        $lastId = $db->lastInsertId();

        // Freischalt-Link generieren
        $approveHash = md5($lastId . $apiPassword);
        $approveLink = $websiteUrl . "guestbook-api.php?action=approve&id=" . $lastId . "&hash=" . $approveHash;

        $subject = "Neuer Gästebucheintrag von " . $name;
        $mailBody = "Hallo Admin,\n\nein neuer Eintrag wartet auf Freischaltung:\n\nName: $name\nNachricht:\n$message\n\nKlicke auf den folgenden Link, um den Eintrag sofort zu veröffentlichen:\n" . $approveLink . "\n\nGruß dein Server.";
        
        // 🔀 DIE ENTWEDER-ODER-SCHLEIFE (Wählt vollautomatisch den richtigen Weg)
        if (SMTP_PASS !== 'DEIN_SMTP_PASSWORT' && SMTP_PASS !== '') {
            sendHybridSMTP($adminEmail, $subject, $mailBody);
        } else {
            $headers = "From: no-reply@" . $_SERVER['HTTP_HOST'] . "\r\n" . "Content-Type: text/plain; charset=UTF-8";
            @mail($adminEmail, $subject, $mailBody, $headers);
        }

        echo json_encode(['success' => true]);
        exit;
    }
}

// NATIVE SMTP SOCKET ENGINE
function sendHybridSMTP($to, $subject, $body) {
    $host = SMTP_CRYPT === 'ssl' ? 'ssl://' . SMTP_HOST : SMTP_HOST;
    $socket = @fsockopen($host, SMTP_PORT, $errno, $errstr, 10);
    if (!$socket) return false;

    function parseResponse($socket) {
        $res = "";
        while (($str = fgets($socket, 515)) !== false) {
            $res .= $str;
            if (substr($str, 3, 1) == " ") break;
        }
        return $res;
    }

    parseResponse($socket);
    fwrite($socket, "EHLO " . $_SERVER['SERVER_NAME'] . "\r\n");
    parseResponse($socket);

    if (SMTP_CRYPT === 'tls') {
        fwrite($socket, "STARTTLS\r\n");
        parseResponse($socket);
        stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
        fwrite($socket, "EHLO " . $_SERVER['SERVER_NAME'] . "\r\n");
        parseResponse($socket);
    }

    fwrite($socket, "AUTH LOGIN\r\n");
    parseResponse($socket);
    fwrite($socket, base64_encode(SMTP_USER) . "\r\n");
    parseResponse($socket);
    fwrite($socket, base64_encode(SMTP_PASS) . "\r\n");
    parseResponse($socket);

    fwrite($socket, "MAIL FROM: <" . SMTP_USER . ">\r\n");
    parseResponse($socket);
    fwrite($socket, "RCPT TO: <" . $to . ">\r\n");
    parseResponse($socket);
    fwrite($socket, "DATA\r\n");
    parseResponse($socket);

    $headers = "MIME-Version: 1.0\r\nContent-Type: text/plain; charset=UTF-8\r\n";
    $headers .= "From: <" . SMTP_USER . ">\r\nTo: <" . $to . ">\r\nSubject: =?UTF-8?B?" . base64_encode($subject) . "?=\r\n";
    
    fwrite($socket, $headers . "\r\n" . $body . "\r\n.\r\n");
    parseResponse($socket);
    fwrite($socket, "QUIT\r\n");
    fclose($socket);
    return true;
}
?>
ich hoffe das geht so ohne den phpmailer, ich kanns jetzt gerade nicht testen
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 8526
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Gästebuch Block

Ungelesener Beitrag von Tommy Herrmann »

Kann ich machen - NUR - Du musst es tun, denn das benötigt fast jeder und wenn es bei Dir im Download fehlt, ist es nicht zu gebrauchen und ich kann dann diese Erweiterung auch nicht bei mir promoten.


Ich teste Deine neue Datei ---
Volker
Moderator
Moderator
Beiträge: 2465
Registriert: Sa 12. Dez 2020, 22:35

Re: Gästebuch Block

Ungelesener Beitrag von Volker »

wenn du sagst das die api geht kommt die in den download
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 8526
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Gästebuch Block

Ungelesener Beitrag von Tommy Herrmann »

Jetzt geht die E-Mail und auch das Freischalten.

Das Passwort funktioniert nicht :confused:
Volker
Moderator
Moderator
Beiträge: 2465
Registriert: Sa 12. Dez 2020, 22:35

Re: Gästebuch Block

Ungelesener Beitrag von Volker »

Passwort ? Muss gehen
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 8526
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Gästebuch Block

Ungelesener Beitrag von Tommy Herrmann »

Egal welches Passwort ich eintrage (auch "volker04") geht es nicht …

Hast Du eine Idee
Volker
Moderator
Moderator
Beiträge: 2465
Registriert: Sa 12. Dez 2020, 22:35

Re: Gästebuch Block

Ungelesener Beitrag von Volker »

Warte

hab den Fehler gefunden Passwort 2 mal drin einmal für SMTP und einmal Login änderung:

komplette API

Code: Alles auswählen

<?php
// =========================================================================
// guestbook-api.php - Vollständige Hybrid-Version (SMTP/Mail) mit Inline-Editor
// =========================================================================
header('Content-Type: application/json; charset=utf-8');
date_default_timezone_set('Europe/Berlin');

// 🔒 1. DEIN ADMIN-PASSWORT FÜR BROWSER-LOGIN (DOPPELKLICK)
$apiPassword = 'volker04'; 

// 📧 2. SMTP & MAIL EMPFÄNGER CONFIGURATION
$adminEmail  = 'info@niederastroth.de'; 
$websiteUrl  = 'https://www.niederastroth.de/gbdemo/'; // Wichtig für den Freischaltlink!

define('SMTP_HOST', 'smtp.niederastroth.de'); 
define('SMTP_PORT', 465);                 // 465 (SSL) oder 587 (TLS)
define('SMTP_CRYPT', 'ssl');              // 'ssl', 'tls' oder ''
define('SMTP_USER', 'info@niederastroth.de'); 
define('SMTP_PASS', 'DEIN_SMTP_PASSWORT'); // Echte Zugangsdaten eintragen (oder leer lassen für PHP mail)

// =========================================================================
// AB HIER NIX MEHR ÄNDERN - DIESER TEIL LÄUFT VOLLAUTOMATISCH
// =========================================================================
$dbFile = 'gaestebuch.db';

try {
    $db = new PDO('sqlite:' . __DIR__ . '/' . $dbFile);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    $db->exec("CREATE TABLE IF NOT EXISTS entries (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        message TEXT NOT NULL,
        status INTEGER DEFAULT 0,
        created_at TEXT NOT NULL
    )");
} catch (PDOException $e) {
    echo json_encode(['success' => false, 'error' => 'Datenbankfehler: ' . $e->getMessage()]);
    exit;
}

// 🌐 GET-ANFRAGEN: Einträge laden oder E-Mail-Freischaltung abfangen
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    
    // Fall A: Freischaltung über den E-Mail-Link
    if (isset($_GET['action']) && $_GET['action'] === 'approve') {
        $id = intval($_GET['id'] ?? 0);
        $hash = $_GET['hash'] ?? '';
        
        if ($hash === md5($id . $apiPassword)) {
            $stmt = $db->prepare("UPDATE entries SET status = 1 WHERE id = ?");
            $stmt->execute([$id]);
            
            header("Content-Type: text/html; charset=UTF-8");
            echo "<html><head><title>Erfolg</title></head><body style='font-family:Arial,sans-serif;text-align:center;padding-top:80px;background:#f8fafc;color:#0f172a;'>";
            echo "<div style='display:inline-block;background:#fff;padding:40px;border-radius:14px;box-shadow:0 4px 20px rgba(0,0,0,0.05);'>";
            echo "<h2 style='color:#22c55e;'>🎉 Eintrag erfolgreich freigeschaltet!</h2>";
            echo "<p>Der Beitrag ist ab jetzt live für alle Besucher sichtbar.</p>";
            echo "</div></body></html>";
            exit;
        } else {
            header("Content-Type: text/html; charset=UTF-8");
            die("<h3>Ungültiger Freischalt-Code.</h3>");
        }
    }

    // Fall B: Einträge für das Gästebuch laden (Prüfung gegen das Admin-Passwort)
    $isAdmin = false;
    if (isset($_GET['adminCheck']) && $_GET['adminCheck'] === $apiPassword) {
        $isAdmin = true;
    }

    if ($isAdmin) {
        $stmt = $db->query("SELECT * FROM entries ORDER BY created_at DESC");
    } else {
        $stmt = $db->query("SELECT * FROM entries WHERE status = 1 ORDER BY created_at DESC");
    }
    $entries = $stmt->fetchAll(PDO::FETCH_ASSOC);
    echo json_encode(['success' => true, 'entries' => $entries]);
    exit;
}

// 🛠️ POST-ANFRAGEN: Formular absenden, Löschen, Editieren, Login prüfen
$input = json_decode(file_get_contents('php://input'), true);

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    
    // Admin Login-Prüfung (Doppelklick-Event)
    if (isset($input['action']) && $input['action'] === 'checkLogin') {
        if (isset($input['password']) && $input['password'] === $apiPassword) {
            echo json_encode(['success' => true]);
        } else {
            echo json_encode(['success' => false, 'error' => 'Falsches Passwort!']);
        }
        exit;
    }

    // Eintrag löschen
    if (isset($input['action']) && $input['action'] === 'delete') {
        if (!isset($input['password']) || $input['password'] !== $apiPassword) {
            echo json_encode(['success' => false, 'error' => 'Nicht autorisiert!']);
            exit;
        }
        $stmt = $db->prepare("DELETE FROM entries WHERE id = ?");
        $stmt->execute([$input['id']]);
        echo json_encode(['success' => true]);
        exit;
    }

    // Eintrag editieren (Inline-Update)
    if (isset($input['action']) && $input['action'] === 'update') {
        if (!isset($input['password']) || $input['password'] !== $apiPassword) {
            echo json_encode(['success' => false, 'error' => 'Nicht autorisiert!']);
            exit;
        }
        $stmt = $db->prepare("UPDATE entries SET message = ? WHERE id = ?");
        $stmt->execute([$input['message'], $input['id']]);
        echo json_encode(['success' => true]);
        exit;
    }

    // Neuen Eintrag verarbeiten (Erhält status = 0)
    if (isset($input['name']) && isset($input['message'])) {
        $name = trim(htmlspecialchars($input['name']));
        $message = trim(htmlspecialchars($input['message']));

        if (empty($name) || empty($message)) {
            echo json_encode(['success' => false, 'error' => 'Bitte alle Felder ausfüllen.']);
            exit;
        }

        $stmt = $db->prepare("INSERT INTO entries (name, message, created_at, status) VALUES (?, ?, ?, 0)");
        $timestamp = date('Y-m-d H:i:s');
        $stmt->execute([$name, $message, $timestamp]);
        $lastId = $db->lastInsertId();

        // Absicherung für Freischalt-Link bauen
        $approveHash = md5($lastId . $apiPassword);
        $approveLink = $websiteUrl . "guestbook-api.php?action=approve&id=" . $lastId . "&hash=" . $approveHash;

        $subject = "Neuer Gästebucheintrag von " . $name;
        $mailBody = "Hallo Admin,\n\nein neuer Eintrag wartet auf Freischaltung:\n\nName: $name\nNachricht:\n$message\n\nKlicke auf den folgenden Link, um den Eintrag sofort zu veröffentlichen:\n" . $approveLink . "\n\nGruß dein Server.";
        
        // Vollautomatische SMTP-Erkennungsschleife
        if (SMTP_PASS !== 'DEIN_SMTP_PASSWORT' && SMTP_PASS !== '') {
            sendHybridSMTP($adminEmail, $subject, $mailBody);
        } else {
            $headers = "From: no-reply@" . $_SERVER['HTTP_HOST'] . "\r\n" . "Content-Type: text/plain; charset=UTF-8";
            @mail($adminEmail, $subject, $mailBody, $headers);
        }

        echo json_encode(['success' => true]);
        exit;
    }
}

// 🌐 INTUATIVE SOCKET SMTP ENGINE
function sendHybridSMTP($to, $subject, $body) {
    $host = SMTP_CRYPT === 'ssl' ? 'ssl://' . SMTP_HOST : SMTP_HOST;
    $socket = @fsockopen($host, SMTP_PORT, $errno, $errstr, 10);
    if (!$socket) return false;

    function parseResponse($socket) {
        $res = "";
        while (($str = fgets($socket, 515)) !== false) {
            $res .= $str;
            if (substr($str, 3, 1) == " ") break;
        }
        return $res;
    }

    parseResponse($socket);
    fwrite($socket, "EHLO " . $_SERVER['SERVER_NAME'] . "\r\n");
    parseResponse($socket);

    if (SMTP_CRYPT === 'tls') {
        fwrite($socket, "STARTTLS\r\n");
        parseResponse($socket);
        stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
        fwrite($socket, "EHLO " . $_SERVER['SERVER_NAME'] . "\r\n");
        parseResponse($socket);
    }

    fwrite($socket, "AUTH LOGIN\r\n");
    parseResponse($socket);
    fwrite($socket, base64_encode(SMTP_USER) . "\r\n");
    parseResponse($socket);
    fwrite($socket, base64_encode(SMTP_PASS) . "\r\n");
    parseResponse($socket);

    fwrite($socket, "MAIL FROM: <" . SMTP_USER . ">\r\n");
    parseResponse($socket);
    fwrite($socket, "RCPT TO: <" . $to . ">\r\n");
    parseResponse($socket);
    fwrite($socket, "DATA\r\n");
    parseResponse($socket);

    $headers = "MIME-Version: 1.0\r\nContent-Type: text/plain; charset=UTF-8\r\n";
    $headers .= "From: <" . SMTP_USER . ">\r\nTo: <" . $to . ">\r\nSubject: =?UTF-8?B?" . base64_encode($subject) . "?=\r\n";
    
    fwrite($socket, $headers . "\r\n" . $body . "\r\n.\r\n");
    parseResponse($socket);
    fwrite($socket, "QUIT\r\n");
    fclose($socket);
    return true;
}
?>
bitte testen
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 8526
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Gästebuch Block

Ungelesener Beitrag von Tommy Herrmann »

Habe gerade selbst gesucht - aber nichts gefunden -

--- warte
Volker
Moderator
Moderator
Beiträge: 2465
Registriert: Sa 12. Dez 2020, 22:35

Re: Gästebuch Block

Ungelesener Beitrag von Volker »

sollte jetzt gehen ich habs getestet ;)
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 8526
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Gästebuch Block

Ungelesener Beitrag von Tommy Herrmann »

Scheint jetzt alles zu funktionieren. Ich habe auch nur meine SMTP-Daten eingetragen und oben die Schlampen-Mail so stehen gelassen.

Schön wäre natürlich noch eine Möglichkeit auch im Admin Panel einen Beitrag zusätzlich freischalten zu können. Das fehlt doch sehr.
Antworten

Wer ist online?

Mitglieder in diesem Forum: Volker und 1 Gast