Metainformationen zur Seite
Dies ist eine alte Version des Dokuments!
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.
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ß!