From 87cd80b3d806200d8829b71153a625b7653bbc64 Mon Sep 17 00:00:00 2001 From: smueller Date: Tue, 7 Jul 2026 10:23:47 +0200 Subject: [PATCH] Refactor newsletter HTML structure and styles for improved readability and consistency. Adjusted padding, colors, and font sizes across various elements. Updated unsubscribe link styling and background color for better visibility. --- README.md | 74 ++++++++++++++++++++++++++++++++++ index.php | 116 ++++++++++++++++++++++++++--------------------------- wiki.php | 117 +++++++++++++++++++++++++++--------------------------- 3 files changed, 191 insertions(+), 116 deletions(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..baaa0b6 --- /dev/null +++ b/README.md @@ -0,0 +1,74 @@ +# Newsletter Generator (TK Wiki) + +Dieses Tool erzeugt aus den neuesten Artikeln im Thomas-Krenn-Wiki einen HTML-Newsletter, bietet eine Vorschau im Browser und versendet per SMTP (inkl. Testversand und optionalem Cron-Lauf). + +## Voraussetzungen + +- PHP 8.1+ (empfohlen) +- PHP-Erweiterungen: + - `curl` + - `json` + - `mbstring` + - `openssl` + - optional: `dom` (bessere Artikel-Erkennung) +- Composer +- SMTP-Zugangsdaten + +## Installation + +1. Projekt auf den Webserver kopieren. +2. Im Projektordner Abhängigkeiten installieren: + +```bash +composer install +``` + +3. Admin-Passwort setzen: + - In `index.php` (und ggf. `wiki.php`) die Konstante `ADMIN_PASSWORD` ändern. + - Standardwert `CHANGE_ME_ADMIN_PASSWORD` **nicht** produktiv verwenden. + +4. Webserver auf den Projektordner zeigen lassen (Document Root). + +## Erste Einrichtung im Browser + +1. Datei im Browser öffnen: + - z. B. `https://deine-domain.tld/index.php` +2. SMTP- und Newsletter-Felder ausfüllen: + - SMTP Host, Port, Verschlüsselung, Benutzer/Passwort + - Absender (`from_email`, `from_name`) + - Empfänger (`recipient_email`, optional `test_recipient_email`) +3. Auf **Einstellungen speichern** klicken. +4. Mit **Vorschau erzeugen** Layout prüfen. +5. Mit **Testnewsletter senden** Testversand durchführen. + +## Monatlicher Versand per Cron + +Das Tool unterstützt einen tokenbasierten Cron-Endpunkt. + +- Token wird im Admin-Bereich unter **Cron Token** angezeigt/gesetzt. +- CLI-Beispiel: + +```bash +php index.php --cron --token='DEIN_CRON_TOKEN' +``` + +- Web-Cron-Beispiel: + +```bash +curl -fsS 'https://deine-domain.tld/index.php?cron=DEIN_CRON_TOKEN' > /dev/null +``` + +Hinweis: Der Monatsnewsletter wird pro Zeitraum nur einmal versendet (Status in `newsletter-state.json`). + +## Wichtige Dateien + +- `index.php` – Hauptdatei (Admin, Vorschau, Versand, Cron) +- `wiki.php` – parallele Variante mit gleicher Funktionalität +- `newsletter-config.json` – gespeicherte Konfiguration +- `newsletter-state.json` – Versandstatus pro Monat + +## Sicherheitshinweise + +- `ADMIN_PASSWORD` immer sofort ändern. +- Projekt nicht öffentlich zugänglich lassen, wenn kein Login aktiv ist. +- SMTP-Zugangsdaten im Dateisystem schützen (Dateirechte/Backup-Zugriff). diff --git a/index.php b/index.php index 1bbe9c0..66ef2ac 100644 --- a/index.php +++ b/index.php @@ -339,16 +339,15 @@ function buildNewsletterHtml(array $config, array $articles, string $periodLabel $replyEmail = trim((string)($config['reply_to'] ?: $config['from_email'])); $replyHref = 'mailto:' . $replyEmail; - $firstname = trim((string)$config['firstname']) !== '' ? (string)$config['firstname'] : 'zusammen'; $articleRows = ''; if ($count === 0) { $articleRows = ' - - +
+ - @@ -359,29 +358,29 @@ function buildNewsletterHtml(array $config, array $articles, string $periodLabel foreach ($articles as $article) { $articleRows .= ' -
+ Für diesen Zeitraum wurden keine neuen Artikel gefunden.
- +
+ - - - - -
+ Thomas-Krenn-Wiki
- ' . h($article['title']) . ' + + ' . h($article['title']) . '
+ Veröffentlicht am ' . h($article['date_de']) . ' von ' . h($article['author']) . '.
+ -
- Jetzt Artikel lesen + + Jetzt Artikel lesen
@@ -395,10 +394,10 @@ function buildNewsletterHtml(array $config, array $articles, string $periodLabel $testBadge = $isTest ? '
+ - @@ -410,7 +409,7 @@ function buildNewsletterHtml(array $config, array $articles, string $periodLabel $unsubscribeFooter = ''; $unsubscribeUrl = trim((string)($config['unsubscribe_url'] ?? '')); if ($unsubscribeUrl !== '' && $unsubscribeUrl !== '#' && filter_var($unsubscribeUrl, FILTER_VALIDATE_URL)) { - $unsubscribeFooter = '  |  Newsletter abbestellen'; + $unsubscribeFooter = '
Newsletter abbestellen'; } $summaryText = $count === 1 @@ -425,79 +424,82 @@ function buildNewsletterHtml(array $config, array $articles, string $periodLabel Thomas-Krenn Wiki Newsletter - +
' . h($preheader) . ' ‌ ‌ ‌ ‌
- -
-
+ TESTVERSAND
+
+
-
- +