$ini['hash']['uniqueKey'], // works like password salt // file name of confirm script 'confirmScript' => '/newsletter/confirm.php', // status code to be used when redirection to success or error page 'statusCode' => 'HTTP/1.1 303 See Other', // array of SQL statements used 'sql' => [ 'create_table' => 'CREATE TABLE IF NOT EXISTS subscribers (id INTEGER PRIMARY KEY, email TEXT NOT NULL UNIQUE, name TEXT);', 'create_record' => 'INSERT INTO subscribers(email, name) VALUES(:e, :n);', 'read_record' => 'SELECT 1 FROM subscribers WHERE email = :e;', 'update_record' => '', 'delete_record' => 'DELETE FROM subscribers WHERE email = :e;' ], 'notificationAddress' => 'webseite@tobias-radloff.de' ]; // complete site URL $general['siteURL'] = $ini['general']['protocol'] . '://' . $ini['general']['domain']; $smtp = $ini['smtp']; $db = $ini['db']; function GetConfirmationHash($confEmail) { global $general; return md5($confEmail . $general['uniqueKey']); } // connects to database and returns PDO object function getPDO($dbType = 'sqlite') { global $db; return new \PDO($db[$dbType]['dsn']); } // Sends an email to single recipient with subject, body and sender info specified in an array function SendEmail($toAddress, $mailContents) { global $general, $smtp; $mail = new PHPMailer(true); //Server settings //$mail->SMTPDebug = SMTP::DEBUG_SERVER; //Enable verbose debug output $mail->isSMTP(); $mail->Host = $smtp['host']; $mail->Port = $smtp['port']; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS` $mail->SMTPAuth = $smtp['auth']; $mail->Username = $smtp['username']; $mail->Password = $smtp['password']; //$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; //Enable implicit TLS encryption // recipient $mail->addAddress($toAddress); // content $mail->CharSet = 'UTF-8'; if ( isset($mailContents['bodyHTML']) and $mailContents['bodyHTML'] != '' ) { $mail->isHTML(true); $mail->Body = $mailContents['bodyHTML']; $mail->AltBody = $mailContents['bodyText']; } else { $mail->isHTML(false); $mail->Body = $mailContents['bodyText']; } $mail->Subject = $mailContents['subject']; $mail->setFrom($mailContents['fromAddress'], $mailContents['fromName']); // send $mail->send(); } function MakeSureTableExists($pdo) { global $general; $query = $pdo->prepare($general['sql']['create_table']); if ( ! $query->execute() ) { return 'Unbekannter Datenbankfehler'; } return TRUE; } // returns true if record does not yet exist in database; error string otherwise function NotYetSubscribed($email, $pdo = NULL) { if (!isset($pdo)) { $pdo = getPDO(); } $result = MakeSureTableExists($pdo); if ( gettype($result) == 'string' ) { return $result; } global $general; $query = $pdo->prepare($general['sql']['read_record']); if ( ! $query->execute([':e' => $email]) ) { return 'Fehler beim Zugriff auf Datenbank'; } if ( $query->fetch() ) { return "Emailadresse {$email} ist bereits eingetragen"; } // success return TRUE; } // redirects to specified URL via GET request and conveys an optional message; then exits function GracefulExit($location, $message = NULL) { global $general; header($general['statusCode']); if (isset($message)) { $location .= '?' . http_build_query(['msg' => $message]); error_log("Redirecting to {$location} now …"); } header("Location: {$location}"); exit; } ?>