Serienhelper, HTML Ausgabe und E-Mails

Wie ich bei der ersten Veröffentlichung vom Serienhelper angekündigt habe, ist eines meiner nächsten Ziele eine HTML Ausgabe zu bauen und euch dann zu Zeigen wie ihr euren Linux Server dazu bringt euch regelmäßig E-Mails mit den Ergebnissen schicken zu lassen das will ich euch heute zeigen
Doch zunächst in Serienhelper V1.1 gibt es ein neues Kommando getupdateinfo
welches jetzt noch irrelevant ist aber in V1.2 wichtig wird, damit kann ein JSON erzeugt werden, das für alle Serienordner die URLs zum abrufen ermittelt, das ist wichtig um in der nächsten Version die showinfo Dateien zu aktualisieren da sich der Aufbau ändern wird
Und jetzt zum eigentlichen Thema
Neuen Benutzer anlegen und SerienHelper V1.1 herunterladen
Aus Sicherheitsgründen möchte man Dienste nicht als Root laufen lassen, daher legen wir einen neuen Benutzer serienhelper an
sudo useradd -r -s /usr/sbin/nologin -d /home/serienhelper -M serienhelper
Das erzeugt einen neuen Benutzer serienhelper mit einem Homeverzeichnis /home/serienhelper
der sich nicht einloggen darf
Nun wechseln wir in den neuen Benutzer durch den Schalter -s /bin/bash
wird mit gegeben das die Bash als Shell verwendet werden soll, da der Benutzer keine hat
sudo su - serienhelper -s /bin/bash
Nun laden wir SerienHelper V1.1 herunter, die URL müsst ihr entsprechend für euer System anpassen (Linux64, LinuxArm64, LinuxArm unten findet ihr die Downloads)
wget https://blog.es-development.de/wp-content/uploads/2025/05/ESD.SerienHelper_Linux64_V1.1.zip
Dann entpackt ihr das ZIP mit
unzip ESD.SerienHelper_Linux64_V1.1.zip
Jetzt habt ihr ein Verzeichnis /home/serienhelper/ESD.SerienHelper_Linux64
Jetzt müsst ihr SerienHelper noch ausführbar machen
chmod +x ESD.SerienHelper_Linux64/SerienHelper
Einrichten von msmtp als alternative zu Sendmail mit einem lokalen Mailserver
Mein Server läuft mit Ubuntu 24.04, zu nächst installieren wir also msmtp
sudo apt install msmtp msmtp-mta
Nun legen wir die Datei /etc/msmptrc an
sudo nano /etc/msmtprc
Minimalistisch gehalten könnte diese so aussehen, da wir das zweimal machen zeige ich bei der zweiten eine ausführlichere Kofiguration
defaults
auth on
tls on
logfile /var/log/msmtp.log
account default
host smtp.domain.de
port 587
from server@domain.de
user server@domain.de
password DeinMailPasswort
aliases /etc/aliases
Was man nicht vergessen darf, die /etc/msmtprc
muss spezielle rechte haben
sudo chmod 600 /etc/msmptrc
Damit kann dir nun das System bzw. Root E-Mails schicken, testen könnt ihr das so
echo -e "Subject: Testmail\n\nDies ist eine Testmail" | sendmail account@domain.de
SendMail für den Benutzer serienhelper einrichten
Im Homeverzeichnis unseres serienhelper Benutzers legen wir nun die Datei .msmptrc an
nano .msmtprc
# Set default values for all following accounts.
defaults
# Use the mail submission port 587 instead of the SMTP port 25.
port 587
# Always use TLS.
tls on
# Mail account
# TODO: Use your own mail address
account account@domain.de
# Host name of the SMTP server
# TODO: Use the host of your own mail account
host smtp.domain.de
# This is especially important for mail providers like
# Ionos, 1&1, GMX and web.de
set_from_header on
# As an alternative to tls_trust_file/tls_crl_file, you can use tls_fingerprint
# to pin a single certificate. You have to update the fingerprint when the
# server certificate changes, but an attacker cannot trick you into accepting
# a fraudulent certificate. Get the fingerprint with
# $ msmtp --serverinfo --tls --tls-certcheck=off --host=smtp.freemail.example
#tls_fingerprint 00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33
# Envelope-from address
# TODO: Use your own mail address
from account@domain.de
# Authentication. The password is given using one of five methods, see below.
auth on
# TODO: Use your own user name fpr the mail account
user account@domain.de
# Password method 1: Add the password to the system keyring, and let msmtp get
# it automatically. To set the keyring password using Gnome's libsecret:
# $ secret-tool store --label=msmtp \
# host smtp.freemail.example \
# service smtp \
# user joe.smith
# Password method 2: Store the password in an encrypted file, and tell msmtp
# which command to use to decrypt it. This is usually used with GnuPG, as in
# this example. Usually gpg-agent will ask once for the decryption password.
#passwordeval gpg2 --no-tty -q -d ~/.msmtp-password.gpg
# Password method 3: Store the password directly in this file. Usually it is not
# a good idea to store passwords in plain text files. If you do it anyway, at
# least make sure that this file can only be read by yourself.
# TODO: Use the password of your own mail account
password DeinPasswort
# Password method 4: Store the password in ~/.netrc. This method is probably not
# relevant anymore.
# Password method 5: Do not specify a password. Msmtp will then prompt you for
# it. This means you need to be able to type into a terminal when msmtp runs.
# Set a default account
# TODO: Use your own mail address
account default: account@domain.de
Wie man sieht ist die wesentlich ausführlicher und ich finde sie erklärt die Einstellungen ganz gut, hab ich hier geklaut
Auch hier wieder Berechtigungen setzen
chmod 600 .msmptrc
Das kann man dann wieder testen
echo -e "Subject: Testmail\n\nDies ist eine Testmail" | sendmail account@domain.de
Script Anlegen
Ok nachdem wir nun unseren Benutzer haben und dieser Mails verschicken kann benötigen wir noch ein kleines Script das uns die Mail zusammen baut und sendet bei mir heißt es send_SerienHelper.sh
#!/bin/bash
Content=$(ESD.SerienHelper_Linux64/SerienHelper compare all folder /mnt/shares/Serien/ ignore ignore.json lang Deutsch out html replacepath "/mnt/share/Serien/" "V:\\Serien" "\\")
(
echo "To: acount@domain.de"
echo "Subject: SerienHelper auto mail"
echo "Content-Type: text/html; charset=UTF-8"
echo ""
echo "$Content"
) | sendmail -t
wie man sieht kommen hier neue Optionen zum Einsatz
- out
Mit out kann nun die Ausgabe angepasst werden möglich Werte sind html, json oder text, wir nutzen hier html - replacepath
Da wir die Mail von einem Linux erzeugen und diese unter Windows nutzen wollen, kann hiermit der Path angepasst werden, der erste Wert ist der zu ersetzende Teil, dann durch was dieser Ersetzt werden soll und als drittes kann optional angegeben werden welches Pfadtrennzeichen verwendet werden soll
Nachdem ihr das Script für euch angepasst habt muss es noch ausführbar gemacht werden
chmod +x send_SerienHelper.sh
Wenn wir das nun ausführen ./send_SerienHelper.sh
sollten wir nach abschluss ein Ergebnis per Mail erhalten das in etwa so aussieht

Cronjob einrichten
Wir öffnen den crontab editor
crontab -e
Ich wähle nano als Editor aus und trage mein Script in der letzten Zeile ein
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
30 3 * * 1 bash send_SerienHelper.sh
Jeden Montag um 3:30 Uhr wird nun unser Script ausgeführt, zur Erklärung hier nochmal der Syntax

Bitte beachtet, das ihr nicht zu oft nach neuen Folgen suchen solltet, das Programm ist bewusst nicht Asynchron am abrufen der Seiten um die Belastung niedrig zu halten, ich denke einmal die Woche ist ein vernünftiges maß
Was kommt als nächstes
Was SerienHelper noch nicht kann, ist die ignore,json von Windows übernehmen um das zu ermöglichen ist ein größerer Umbau nötig
Aber da es sich um JSON handelt kannst du die Datei selbst anpassen, einfach die Datei öffnen kurz durch einen beliebigen JS Beautifier jagen und dann die Pfade anpassen
Oder du wartest noch ein bisschen in der nächsten Version möchte ich relative Pfade unterstützen
Darüber hinaus wird die nächste Version schluss mit den gersub Ordnern machen, stattdessen werden die Ordner nun ein Kürzel haben das etwa so aussieht en-de oder jp-de
Dabei handelt es sich um ISO-639-1-Codes für Länder der erste gibt die Audiosprache und der zweite die Untertitelsprache an