In diesem Video zeige ich euch, wie wir in dem Formular zum Erstellen und Senden des Newsletters einen sehr guten, kostenlosen WYSIWYG-Editor einbinden – TinyMCE.
+++ WICHTIG: Damit die mail-Funktion eine Mail versenden kann, muss auf dem System, auf dem sie ausgeführt wird, ein Mailserver eingerichtet sein. Somit funktioniert diese Methode standardmäßig nicht, wenn man gängige Tools wie XAMPP lokal nutzt. Auf einem Webserver/Webspace sollte es allerdings ohne weitere Probleme funktionieren +++
Quellcode herunterladen
Quellcode index.php:
<?php require_once 'database.php'; $db = new DB(); if($_POST['eintragen']) { $name = $_POST['name']; $email = $_POST['email']; $optin_key = sha1(uniqid()); if($db->subscribeToNewsletter($name, $email, $optin_key)) { $betreff = "Bitte bestätige deine Newsletter-Anmeldung bei TutCubeDE"; $header = [ 'From' => 'TutCubeDE <info@tutcube.de>', 'Reply-To' => 'info@tutcube.de', 'Content-Type' => 'text/html' ]; $inhalt = " Hey du! <br /> Cool, dass du Dich für den Newsletter angemeldet hast. <br /><br /> Bitte bestätige kurz mit Klick auf folgenden Link deine Anmeldung für den besten Newsletter der Welt: <a href='https://tutcube.de/dev/newsletter/newsletter_confirm.php?key=" . $optin_key . "'> https://tutcube.de/dev/newsletter/newsletter_confirm.php?key=" . $optin_key . " </a> "; if(mail($email, $betreff, $inhalt, $header)) { echo "Vielen Dank! Wir haben Dir eine Mail gesendet. Bitte bestätige die Anmeldung!"; } else { echo "Leider konnten wir Dir gerade keine Mail senden, da ist wohl etwas schief gelaufen :("; // @todo Datensatz aus Datenbank löschen } } else { echo "Leider trat ein Problem beim Eintragen in den Newsletter auf. Bitte probiere es später erneut! :("; } } ?> <html> <head> <title>Newsletter</title> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <div id="wrapper" class="shadow"> <h1>Zum Newsletter anmelden</h1> <form action="index.php" method="POST"> <table border="0"> <tr> <td>Name:</td> <td><input type="text" name="name" required /></td> </tr> <tr> <td>E-Mail:</td> <td><input type="email" name="email" required /></td> </tr> <tr> <td colspan="2"><input type="checkbox" name="datenschutz" value="datenschutz_ok" required /> Mit Anmeldung zum Newsletter stimme ich den Datenschutzbestimmungen zu. Der Newsletter wird ausschließlich dazu verwendet, Dich über neue Inhalte von TutCubeDE zu informieren. Gelegentlich können auch interessante Inhalte von oder über TutCubeDE verteilt werden.</td> </tr> <tr> <td colspan="2"><input type="submit" value="Eintragen" name="eintragen" /></td> </tr> </table> </form> </div> </body> </html>
Quellcode database.php:
<?php class DB { private static $db_username = "c1newsletter"; private static $db_password = "fgwgjMQ!4RD3"; private static $db_host = "localhost"; private static $db_name = "c1newsletterdb"; private static $db; function __construct() { try { self::$db = new PDO("mysql:host=" . self::$db_host . ";dbname=" . self::$db_name, self::$db_username , self::$db_password); } catch(PDOException $e) { echo "Datenbankverbindung gescheitert!"; die(); } } function subscribeToNewsletter($name, $email, $optin_key) { $stmt = self::$db->prepare("INSERT INTO newsletter_user (name, email, optin_key) VALUES(:name, :email, :optin_key)"); $stmt->bindParam(":name", $name); $stmt->bindParam(":email", $email); $stmt->bindParam(":optin_key", $optin_key); if($stmt->execute() && $stmt->rowCount()) { return true; } else { return false; } } function confirmOptinKey($optin_key) { $stmt = self::$db->prepare("UPDATE newsletter_user SET bestaetigt=1 WHERE optin_key=:optin_key"); $stmt->bindParam(":optin_key", $optin_key); if($stmt->execute() && $stmt->rowCount()) { return true; } else { return false; } } function checkConfirmOptinKey($optin_key) { $stmt = self::$db->prepare("SELECT email, bestaetigt FROM newsletter_user WHERE optin_key=:optin_key"); $stmt->bindParam(":optin_key", $optin_key); if($stmt->execute()) { return $stmt->fetch(); } else { return false; } } function getAllConfirmedNewsletterEmails() { $stmt = self::$db->prepare("SELECT email, name FROM newsletter_user WHERE bestaetigt=1"); if($stmt->execute()) { return $stmt->fetchAll(PDO::FETCH_ASSOC); } else { return false; } } }
Quellcode newsletter_confirm.php:
<?php require_once 'database.php'; $db = new DB(); $key = $_GET['key']; if($key == "") { echo "Kein Opt-In-Key angegeben!"; exit(); } $check_optin_key = $db->checkConfirmOptinKey($key); if($check_optin_key) { if($check_optin_key['bestaetigt']) { // wurde schon bestätigt echo "Deine E-Mail-Adresse (" . $check_optin_key['email'] . ") wurde bereits erfolgreich bestätigt!"; } else { if($db->confirmOptinKey($key)) { echo "E-Mail erfolgreich bestätigt."; } else { echo "E-Mail konnte nicht bestätigt werden!"; } } } else { echo "Keine E-Mail zu diesem Key vorhanden!"; }
Quellcode send_newsletter.php:
<?php require_once 'database.php'; $db = new DB(); // https://www.tiny.cloud/get-tiny/self-hosted/ // https://www.tiny.cloud/docs/quick-start/ ?> <!DOCTYPE html> <html> <head> <title>Newsletter</title> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="style.css"> <script src="js/tinymce/tinymce.min.js"></script> <script> tinymce.init({ selector: '#emailtext' }); </script> </head> <body> <div id="wrapper" class="shadow"> <h1>Newsletter an alle senden</h1> <form action="send_newsletter.php" method="POST"> <table border="0"> <tr> <td>Betreff:</td> <td><input type="text" name="betreff" required /></td> </tr> <tr> <td>E-Mail-Text:</td> <td><textarea type="email" id="emailtext" name="emailtext" rows="20" cols="50"></textarea></td> </tr> <tr> <td colspan="2"><input type="submit" value="Senden" name="senden" /></td> </tr> </table> </form> <?php if($_POST['senden']) { $betreff = $_POST['betreff']; $inhalt = $_POST['emailtext']; $newsletterUser = $db->getAllConfirmedNewsletterEmails(); if(!empty($newsletterUser)) { $header = [ 'From' => 'TutCubeDE <info@tutcube.de>', 'Reply-To' => 'info@tutcube.de', 'Content-Type' => 'text/html' ]; foreach($newsletterUser as $user) { $email = $user['email']; if(mail($email, $betreff, $inhalt, $header)) { echo "Erfolgreich Newsletter zu <strong>" . $email . "</strong> gesendet!<br />"; } else { echo "Newsletter zu <strong>" . $email . "</strong> konnte nicht gesendet werden!<br />"; } } } else { echo "Keine E-Mail-Adresse zum Newslettererhalt vorhanden!"; } } ?> </div> </body> </html>
Quellcode style.css:
body { margin-top: 20px; font-family: Arial, Helvetica, sans-serif; background: #70737c; } #wrapper { margin-left: auto; margin-right: auto; width: 900px; background-color: #fefefe; padding: 40px; } .shadow { -webkit-box-shadow: 0px 0px 10px #000; -moz-box-shadow: 0px 0px 10px #000; box-shadow: 0px 0px 10px #000; } .shadow-menu { -webkit-box-shadow: 0px 0px 3px #000; -moz-box-shadow: 0px 0px 3px #000; box-shadow: 0px 0px 3px #000; }