Alle E-Mail Anhänge vom Postfach Gmail herunterladen TOOL? Docker?

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.388
Punkte für Reaktionen
1.206
Punkte
234
Du brauchst kein Docker.
  1. Lade dir dieses Skript herunter und speichere es auf deiner DS: https://raw.githubusercontent.com/geimist/mail_attachments_downloader/main/get_mail_attachments.sh
  2. Öffne es mit dem DSM Texteditor
  3. Passe die Werte in den oberen Zeilen an (Host, Username, Passwort, Zielordner)
    • der Zielordner muss ein absoluter Pfad sein, also mit /volume… beginnen.
  4. Erstelle im Aufgabenplaner ein Benutzerdefiniertes Skript
    1. Öffne dazu im DSM die Systemsteuerung​

      • Aufgabenplaner
      • Schaltfläche Erstellen
      • geplante Aufgabe
      • Benutzerdefiniertes Skript
    2. Registerkarte "Allgemein":​

      • Benutzer (wähle einen Benutzer, der Schreibrechte auf deinen Zielordner hat)
      • ein beliebiger Name unter Vorgang
      • Haken bei aktiviert
    3. Registerkarte "Zeitplan":​

      • hier gewünschtes Intervall (z.B. stündlich)
    4. Registerkarte "Aufgabeneinstellung":​

      • hier den Pfad zum Skript hineinkopieren und /bin/bash mit Leerzeichen voranstellen.
      • Enthält dein Pfad Leerzeichen, muss er in Anführungszeichen gesetzt werden.
      • Das könnte jetzt so aussehen:
        /bin/bash "/volume1/meine dokumente/get_mail_attachments.sh"
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Monacum

driftkingisback

Benutzer
Mitglied seit
17. Sep 2020
Beiträge
122
Punkte für Reaktionen
4
Punkte
18
das hab ich alles so gemacht hat auch jede Mengen Dateien aktualisert
aber finde irgendwie nichts in dem Ordner den ich angegeben habe, sind viele Dateien mit vielen Unterordnern
 

Anhänge

  • Bildschirm­foto 2023-08-02 um 20.38.26.png
    Bildschirm­foto 2023-08-02 um 20.38.26.png
    248,8 KB · Aufrufe: 12
Zuletzt bearbeitet von einem Moderator:

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.388
Punkte für Reaktionen
1.206
Punkte
234
Du scheinst im Verzeichnis der Python Environment zu sein (das wird parallel zum abgelegten Skript erstellt, heißt wie das Skript mit der zusätzlichen Endung _pyEnv). Ich denke nicht, dass das dein angegebener Zielordner ist.

PS: der Zielordner wäre ja im täglichen Workflow dann dein synOCR Inputordner
 

driftkingisback

Benutzer
Mitglied seit
17. Sep 2020
Beiträge
122
Punkte für Reaktionen
4
Punkte
18
Code:
#!/bin/bash
# Mail attachement downloader
# /volume3/DEV/get_mail_attachments.sh
# Python library: https://github.com/jamesridgway/attachment-downloader

# ACHTUNG: Alle Dateien, die nicht einer Dateierweiterung in $file_extensions_user entspricht, werden gelöscht,
# da attachment-downloader zunächst alle Mailanhänge herunter lädt

# lokales Zielverzeichnis:
DOWNLOAD_FOLDER="/volume1/FESTPLATTE/02_Marco/01_Dokumente/12_Emails-test"

# Gewünschte Dateiendungen definieren (Groß- und Kleinschreibung wird ignoriert - Beispiel: ("jpg" "png" "pdf") ):
file_extensions_user=("pdf")

# IMAP Host:
HOST="imap.gmail.com"

# IMAP Username:
USERNAME="marcogeorge890@gmail.com"

# IMAP Password:
PASSWORD="xxxxxxxx"

# IMAP Folder to extract attachments from:
IMAP_FOLDER="inbox"

# --------------------- optionale Parameter --------------------
# Regex, mit der der Betreff übereinstimmen muss:
SUBJECT_REGEX=""

# Startzeitpunkt für die Suche (Weltzeit!):
# leer lassen, um keine Limit in der Vergangenheit zu setzen
# wird am Ende des Skriptes auf die aktuelle Zeit gesetzt um beim erneuten Aufruf als Startzeit zu dienen
# z.B. "2021-02-06T13:00:00"
#DATE_AFTER="2023-08-01T17:40:48"
DATE_AFTER=""

# Endzeitpunkt für die Suche (Weltzeit!):
# leer lassen, um alle Mails bis 'JETZT' zu berücksichtigen
# z.B. "2021-02-06T13:25:00"
DATE_BEFORE=""

# Vorlage für Dateinamen (jinja2):
# z.B. "{{date}}/{{ message_id }}/{{ subject }}/{{ attachment_name }}"
FILENAME_TEMPLATE=""

# heruntergeladene Mails löschen (true / false)
DELETE="false"

# IMAP Ordner, um Mails vor dem Löschen zu kopieren:
DELETE_COPY_FOLDER=""

# speziellen imap server port verwenden (defaults to 993 for TLS and 143 otherwise)
PORT=""

# keine verschlüsselte Verbindung verwenden (nicht empfohlen) (true / false)
UNSECURE=""

# verwende STARTTLS (nicht empfohlen) (true / false)
STARTTLS=""


# ab hier nichts mehr ändern
# ##############################################################
# Startzeit speichern:
# --------------------------------------------------------------
start_datetime=$(date +'%Y-%m-%dT%H:%M:%S')
start_datetime_utc=$(date -u +'%Y-%m-%dT%H:%M:%S')

# prüfe Variablen:
# --------------------------------------------------------------
[ ! -d "${DOWNLOAD_FOLDER}" ] && echo "! ! ! ERROR - Zielverzeichnis ist ungülgig!" && exit 1
[ -z "${HOST}" ] && echo "! ! ! ERROR - kein Server (HOST) definiert." && exit 1
[ -z "${USERNAME}" ] && echo "! ! ! ERROR - kein Benutzername (USERNAME) definiert." && exit 1
[ -z "${PASSWORD}" ] && echo "! ! ! ERROR - kein Passwort (PASSWORD) definiert." && exit 1

# stelle Kommando zusammen:
# --------------------------------------------------------------
cmd="--host=${HOST} --username=\"${USERNAME}\" --password=${PASSWORD}"
[ -n "${IMAP_FOLDER}" ] && cmd="${cmd} --imap-folder=${IMAP_FOLDER}"
[ -n "${SUBJECT_REGEX}" ] && cmd="${cmd} --subject-regex=${SUBJECT_REGEX}"
[ -n "${DATE_AFTER}" ] && cmd="${cmd} --date-after=${DATE_AFTER}"
[ -n "${DATE_BEFORE}" ] && cmd="${cmd} --date-before=${DATE_BEFORE}"
[ -n "${FILENAME_TEMPLATE}" ] && cmd="${cmd} --filename-template=${FILENAME_TEMPLATE}"
if [ -n "${DELETE}" ] && [ "${DELETE}" = true ]; then
    cmd="${cmd} --delete"
    [ -n "${DELETE_COPY_FOLDER}" ] && cmd="${cmd} --delete-copy-folder=${DELETE_COPY_FOLDER}"
fi
[ -n "${PORT}" ] && cmd="${cmd} --port=${PORT}"
[ -n "${UNSECURE}" ] && [ "${UNSECURE}" = true ] && cmd="${cmd} --unsecure"
[ -n "${STARTTLS}" ] && [ "${STARTTLS}" = true ] && cmd="${cmd} --starttls"
cmd="${cmd} --output=${DOWNLOAD_FOLDER}"

echo "Kommando: attachment-downloader ${cmd}"

# ##############################################################
# erstelle python environment:
# --------------------------------------------------------------
echo "➜ check Pythonumgebung …"
python_module_list=( attachment-downloader )
my_name="${0##*/}"
my_path="${0%/*}"
python_env_path="${my_path}/${my_name%.*}_pyEnv"

if [ ! -d "${python_env_path}" ]; then
    python3 -m venv "${python_env_path}"
    source "${python_env_path}/bin/activate"
else
    source "${python_env_path}/bin/activate"
fi

if ! python3 -m pip --version > /dev/null  2>&1 ; then
    # Python3 pip was not found and will be now installed:
    # install pip:
    python3 -m ensurepip --default-pip
    # upgrade pip:
    python3 -m pip install --upgrade pip
fi

if python3 -m pip list 2>&1 | grep -q "version.*is available" ; then
    printf "%s\n" "pip already installed ($(python3 -m pip --version)) / upgrade available ..."
    python3 -m pip install --upgrade pip
fi

# check / install python modules:
echo "➜ check Pythonmodule …"
moduleList=$(python3 -m pip list 2>/dev/null)

for module in "${python_module_list[@]}"; do
    moduleName=$(echo "${module}" | awk -F'=' '{print $1}' )

    unset tmp_log1
    printf "%s" "➜ check python module \"${module}\": ➜ "
    if !  grep -qi "${moduleName}" <<<"${moduleList}"; then
        printf "%s" "${module} was not found and will be installed ➜ "

        # install module:
        tmp_log1=$(python3 -m pip install "${module}")

        # check install:
        if grep -qi "${moduleName}" <<<"$(python3 -m pip list 2>/dev/null)" ; then
            echo "ok"
        else
            echo "failed ! ! ! (please install ${module} manually)"
            echo "install log:" && echo "${tmp_log1}"
            return 1
        fi
    else
        printf "ok\n"
    fi
done


# ##############################################################
# run attachment-downloader
# ---------------------------------------------------------------------
echo "➜ Mailanhänge laden …"
eval "attachment-downloader ${cmd}"

echo "➜ setze \"DATE_AFTER\" auf Startzeit des aktuellen Aufrufs (UTC) …"
sed -i 's~^'DATE_AFTER'=.*~'DATE_AFTER'=\"'${start_datetime_utc}'\"~' "${0}"

echo "➜ lösche unerwünschte Dateien …"

# Konvertieren der eingegebenen Dateiendungen in eine reguläre Ausdruckssyntax (Groß- und Kleinschreibung ignorieren)
file_extensions_regex=""
for ext in "${file_extensions_user[@]}"; do
    file_extensions_regex+="\|$(echo "$ext" | tr '[:upper:]' '[:lower:]')"
    file_extensions_regex+="\|$(echo "$ext" | tr '[:lower:]' '[:upper:]')"
done
file_extensions_regex="\(${file_extensions_regex:2}\)" # Entferne das führende "|" und ergänze Klammer

# Löschen aller anderen Dateien im aktuellen Verzeichnis
find "${DOWNLOAD_FOLDER}" -maxdepth 1 -type f ! -regex ".*\.${file_extensions_regex}$" -newermt "${start_datetime}" -exec rm -f {} \;


echo "done :-)"
 

Stevenb0024

Benutzer
Mitglied seit
02. Dez 2023
Beiträge
1
Punkte für Reaktionen
0
Punkte
1
Guten Abend zusammen.
Ich suche ebenfalls nach einer Lösung, Mailanhänge sofort auf meiner Synology abzuspeichern. Der Code hier sieht ja schon mega aus, jedoch erhalten ich immer nur eine Fehlermeldung.
Fehler:
Aktueller Status: 127 (Unterbrochen)
Standardausgabe/Fehler:
/bin/bash: volume1/MailPlus/get_mail_attachments.sh: No such file or directory
Ich arbeite zwar nicht mit Gmail, sollte jedoch auch für Strato Webmail funktioneren?

Über eine Hilfe woran der Fehler liegen könnte würde ich mich freuen
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat