====== PDF entschlüsseln ====== und in Dokuwiki übertragen ===== Warum? ===== Wir erhalten unsere Gehaltsabrechnungen von einem externen Anbieter und der verschickt sie mit einem Passwort verschlüsselt.\\ Leider kann paperless damit nichts anfangen und die Date wird nicht automatisch eingelesen, wie ich es gerne hätte. Jetzt wird die E-Mail einfach weitergeleitet an z.B. paperless-crypted@domain.tld Das Skript hat mir ChatGPT zurecht gebaut und kann mit Sicherheit auch um mehrere Passwörter erweitert werden. ===== Voraussetzung ===== * eigener Mail Server * Linux Server * 2 Mail-Adressen bevorzugt * Passwort ist bekannt ===== Ablauf ===== Das Skript holt die Mail mit dem Passwort geschützten PDF vom Mailserver ab (z.B. paperless-crypted@domain.tld). Extrahiert das PDF, entschlüsselt es und schickt es an die andere E-Mail-Adresse weiter (z.B. adresse_die_paperless_abruft@domain.tld). \\ Dort kann paperless die Mail wie gewohnt abholen und den Anhang verarbeiten. ===== Disclaimer ===== Wie immer, was ihr macht, passiert auf eigene Gefahr. \\ Ich empfehle, dass das ganze auf ein und demselben Server passiert, da eure Datei sonst unverschlüsselt über das Internet wandern könnte. ===== Setup ===== ==== Installation der benötigten Tools ==== apt update apt install getmail6 mpack qpdf file sendmail-base ==== E-Mail Abarbeitung einrichten ==== mkdir .getmail nano .getmail/getmailrc === Inhalt einfügen === [retriever] type = SimpleIMAPSSLRetriever server = imap.domain.tld username = paperless-crypted@domain.tld password = password mailboxes = ("INBOX",) [destination] type = Maildir #Pfad anpassen path = /path/to/.getmail/Maildir/ [options] delete = true === Empfang testen === getmail --getmaildir /path/to/.getmail/ ==== Versand testen ==== echo "Test" | mail -s "Sendmail-Test" adresse_die_paperless_abruft@domain.tld Der Versand hängt stark von euren Mail-Server-Settings ab, dazu gibt es aber diverse Tutorials ;-) ===== Das Skript ===== #!/bin/bash set -euo pipefail # === Konfiguration === MAILDIR="/path/to/.getmail/Maildir" GETMAILRC="/path/to/.getmail/" WORKDIR="/path/to/paperless_process" DECRYPTED="$WORKDIR/decrypted" ATTACHMENTS="$WORKDIR/attachments" PDF_PASSWORD="geheimes Passwort" #Adresse die Paperless abruft FORWARD_TO="adresse_die_paperless_abruft@domain.tld" #Adresse, die das Passwort geschützte PDF bereitstellt SENDER="paperless-crypted@domain.tld" # === Vorbereitung === mkdir -p "$WORKDIR" "$DECRYPTED" "$ATTACHMENTS" # === 1. E-Mails abrufen === getmail --getmaildir "$GETMAILRC" # === 2. Neue Mails parsen === shopt -s nullglob cd "$MAILDIR/new" || exit 1 for mailpath in *; do [ -f "$mailpath" ] || continue fullpath="$MAILDIR/new/$mailpath" # MIME dekodieren & Anhänge extrahieren munpack -q -f -C "$ATTACHMENTS" "$fullpath" # Füge .pdf-Endung hinzu, wenn MIME-Typ PDF ist aber keine Endung existiert for f in "$ATTACHMENTS"/*; do [ -f "$f" ] || continue mimetype=$(file --mime-type -b "$f") if [[ "$mimetype" == "application/pdf" && "$f" != *.pdf |]]; then mv "$f" "$f.pdf" fi done # Maildatei verschieben nach erfolgreicher Verarbeitung mv "$fullpath" "$MAILDIR/cur/$mailpath" done shopt -u nullglob # === 3. PDFs entschlüsseln === cd "$ATTACHMENTS" for file in *.pdf; do [ -f "$file" ] || continue OUTFILE="$DECRYPTED/$(basename "$file" .pdf)_unlocked.pdf" qpdf --password="$PDF_PASSWORD" --decrypt "$file" "$OUTFILE" done # === 4. Weiterleiten per sendmail === cd "$DECRYPTED" for pdf in *_unlocked.pdf; do [ -f "$pdf" ] || continue # Original-Dateiname ohne "_unlocked" (und mit .pdf) base=$(basename "$pdf" .pdf) filename="${base%_unlocked}.pdf" filename="${filename//\"/}" # Anführungszeichen entfernen filename="${filename// /_}" ( echo "From: $SENDER" echo "To: $FORWARD_TO" echo "Subject: Entschlüsseltes Dokument" echo "MIME-Version: 1.0" echo 'Content-Type: multipart/mixed; boundary="sep"' echo echo "--sep" echo "Content-Type: text/plain; charset=utf-8" echo echo "Dokument im Anhang" echo "--sep" echo "Content-Type: application/pdf" # echo "Content-Disposition: attachment; filename=\"$filename\"" printf 'Content-Disposition: attachment; filename="%s"\n' "$filename" echo "Content-Transfer-Encoding: base64" echo base64 "$pdf" echo "--sep--" ) | /usr/sbin/sendmail -f "$SENDER" -t done # Aufräumen rm -rf "$ATTACHMENTS"/* "$DECRYPTED"/* Skript ausführbar machen und testen. chmod +x name_eures_skriptes.sh ./name_eures_skriptes.sh Eine ähnliche Ausgabe sollte erfolgen (vorher natürlich eine Mail mit dem PDF an die Adresse schicken) getmail version 6.18.13 Copyright (C) 1998-2023 Charles Cazabon and others. Licensed under GNU GPL version 2. SimpleIMAPSSLRetriever:paperless-crypted@domain.tld:993: msg 1/1 (103964 bytes) delivered, deleted 1 messages (103964 bytes) retrieved, 0 skipped tempdesc.txt: File exists image001.png (image/png) DATEINAME_DER_PDF.pdf (application/octet-stream) Danach sollte die Mail im Posteingang von "adresse_die_paperless_abruft@domain.tld" von paperless abrufbar sein. Viel Spaß!