Automatisches Email Backup

Adrachin:

Automatisches Email Backup eines Ordner in einem anderen Email Account.

Ich kaufe regelmässig Audio Software. Üblicher weise wird eine Bestätigungsmail geschickt, die wichtige Daten enthält wie Download Link oder Serienummer, Keys.

Diese sichere ich in einem Ordner “Daten” der sich auf dem Server des Email Anbieters befindet.

LiquidGPT:

Um automatisch ein E-Mail-Backup eines spezifischen Ordners wie “Daten” in einen anderen E-Mail-Account zu machen, gibt es mehrere Möglichkeiten, dies zu automatisieren. Dabei kann man verschiedene Ansätze verwenden, abhängig von den E-Mail-Diensten, die du nutzt (z. B. Gmail, Outlook, etc.). Ich werde dir hier eine allgemeine Anleitung geben, die in vielen Fällen funktioniert. Du kannst sie dann für deinen spezifischen E-Mail-Dienst anpassen.

Mögliche Lösungen:

1. IMAP-Synchronisation

Du kannst beide E-Mail-Konten über das IMAP-Protokoll miteinander verbinden, um Nachrichten zwischen den Konten zu synchronisieren. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. IMAP in beiden Accounts aktivieren:
    Stelle sicher, dass in beiden E-Mail-Konten IMAP aktiviert ist. Das geht in den Einstellungen deines E-Mail-Anbieters (meist unter „Weiterleitung und POP/IMAP“).

  2. E-Mail-Client verwenden:
    Verwende einen E-Mail-Client (wie Thunderbird, Outlook oder Apple Mail), der es ermöglicht, beide Konten gleichzeitig zu verwalten.

    • Richten beide E-Mail-Konten über IMAP in deinem E-Mail-Client ein.
    • Kopiere den „Daten“-Ordner (oder bestimmte E-Mails) aus dem ersten Konto in das zweite Konto, indem du die E-Mails oder den Ordner einfach per Drag & Drop verschiebst.

    Dies ist allerdings eine manuelle Methode. Für eine Automatisierung gibt es andere Ansätze.

2. Automatisierte Skripte mit IMAP

Für fortgeschrittene Nutzer könnte ein Python-Skript verwendet werden, um automatisch E-Mails aus dem Ordner „Daten“ in einem Konto zu extrahieren und in ein anderes Konto zu verschieben oder zu kopieren. Hier ein Überblick:

  1. IMAPClient-Paket installieren:
    Installiere das Python-Paket IMAPClient, um Zugriff auf deine E-Mails zu bekommen:

    pip install imapclient
  2. Automatisches Backup-Skript:
    Hier ist ein Beispiel-Skript, das die E-Mails aus einem Ordner eines Kontos in einen anderen Account kopiert:

    from imapclient import IMAPClient
    import email
    import smtplib
    
    # Erster Account für den "Daten"-Ordner
    EMAIL_1 = "dein_email_1@example.com"
    PASSWORD_1 = "dein_password_1"
    SERVER_1 = "imap.example.com"
    
    # Zweiter Account für das Backup
    EMAIL_2 = "dein_email_2@example.com"
    PASSWORD_2 = "dein_password_2"
    SERVER_2 = "imap.example.com"
    
    def fetch_emails_from_folder(server, email_address, password, folder):
        with IMAPClient(server) as client:
            client.login(email_address, password)
            client.select_folder(folder)
            messages = client.search(['ALL'])
            response = client.fetch(messages, ['RFC822'])
            return response
    
    def send_emails_to_backup_account(emails, email_address, password, smtp_server):
        with smtplib.SMTP_SSL(smtp_server) as server:
            server.login(email_address, password)
            for msg_id, data in emails.items():
                raw_email = data[b'RFC822']
                server.sendmail(email_address, email_address, raw_email)
    
    # E-Mails vom ersten Konto abrufen
    emails = fetch_emails_from_folder(SERVER_1, EMAIL_1, PASSWORD_1, 'Daten')
    
    # E-Mails an das zweite Konto senden
    send_emails_to_backup_account(emails, EMAIL_2, PASSWORD_2, "smtp.example.com")
  3. Cronjob oder Scheduler verwenden:
    Um das Skript regelmäßig auszuführen, kannst du einen Cronjob (für Linux/Mac) oder Task Scheduler (für Windows) einrichten. Dies würde dann z. B. täglich oder wöchentlich ein Backup durchführen.

3. Automatisierte Weiterleitung mit Filtern

Falls du keine Programmierkenntnisse hast oder eine einfachere Lösung bevorzugst, könntest du in vielen E-Mail-Clients Filterregeln einrichten. Die Regel könnte so aussehen:

  1. Regel erstellen:
    Erstelle in deinem E-Mail-Anbieter eine Regel, die alle E-Mails im „Daten“-Ordner automatisch an deine zweite E-Mail-Adresse weiterleitet.

    • Beispiel für Gmail:
      • Gehe zu Einstellungen > Filter und blockierte Adressen.
      • Klicke auf Neuen Filter erstellen.
      • Wähle „Label ist: Daten“ und „An: deine_email@example.com“.
      • Als Aktion: „Weiterleiten an“ (zweites Konto).

    Nachteil: Nicht jeder Anbieter unterstützt Weiterleitungen von E-Mails, die bereits eingegangen sind. Es funktioniert in der Regel nur für neue E-Mails.

4. Spezialisierte Backup-Tools

Es gibt auch spezialisierte Tools, die für diese Aufgabe entwickelt wurden, wie z. B.:

Zusammenfassung der Optionen:

Welchen Ansatz bevorzugst du, oder soll ich bei einem spezifischen Beispiel weiter ins Detail gehen?

Adrachin:

Filterregeln fallen aus. Die Emails sind sehr unterschiedlich. Manchmal kauft man einen Artikel aber die Durchführung wird durch einen Zahlunganbieter geleistet. Es kann nicht im Voraus mit einer Regel bestimmt werden welche Mails verschoben werden sollen.

Ich verwende Apple Mail.

Email Anbieter A ist [EMAIL-PROVIDER]
Email Anbieter B ist ptonton.me

Zu beiden Providern habe ich IMAP Zugang.
Bei beiden Providern erxistiert schon ein Ordner “Daten”
Im Moment sind beide Ordner “Daten” manuell synchronisiert.

Der einfachst weg wäre eine lokale Möglichkeit um neue Mails, die in den Ordner GMX Daten verschoben werden direkt auf dem Computer über ein Script in den Ordner Protonmail “Daten” zu verschieben.

Gibt es eine Möglichkeit das umzusetzen?

LiquidGPT:

Ja, es ist möglich, diese Aufgabe mit einem Script auf deinem lokalen Rechner zu automatisieren, insbesondere unter macOS, da du Apple Mail verwendest und beide E-Mail-Konten über IMAP angebunden sind. Der Ansatz wäre, ein Skript zu erstellen, das automatisch alle neuen E-Mails im GMX-Daten-Ordner erfasst und in den ProtonMail-Daten-Ordner kopiert.

Schritte zur Umsetzung:

1. Apple Mail Automatisierung über IMAP

Da du bereits beide E-Mail-Konten via IMAP in Apple Mail synchronisiert hast, kannst du ein Python-Skript verwenden, um mit den IMAP-Servern direkt zu arbeiten und die E-Mails zwischen den beiden Ordnern zu synchronisieren. Apple Mail bietet selbst keine eingebaute Automatisierungsfunktion für das Kopieren von E-Mails, daher müssen wir die IMAP-Protokoll-basierte Lösung auf deinem lokalen Rechner implementieren.

2. Python-Skript für die IMAP-Automatisierung

Wir schreiben ein Python-Skript, das sich mit beiden IMAP-Servern verbindet, den GMX-Ordner „Daten“ auf neue E-Mails überprüft und diese dann in den ProtonMail-Ordner „Daten“ kopiert.

3. Benötigte Python-Pakete

Du benötigst das Python-Paket imaplib und email, die Standardbibliotheken sind, um mit IMAP zu arbeiten. Zusätzlich kann IMAPClient genutzt werden, da es die Arbeit mit IMAP deutlich vereinfacht.

4. Skript zum Verschieben von E-Mails

Hier ist ein Python-Skript, das die neuen E-Mails aus dem GMX-Daten-Ordner liest und in den ProtonMail-Daten-Ordner kopiert:

import imaplib
import email
import smtplib
from email.mime.text import MIMEText

# GMX Serverdaten
GMX_IMAP_SERVER = 'imap.[EMAIL-PROVIDER]'
GMX_EMAIL = 'dein_gmx_email[EMAIL-PROVIDER]'
GMX_PASSWORD = 'dein_gmx_passwort'
GMX_FOLDER = 'Daten'

# ProtonMail Serverdaten
PROTON_IMAP_SERVER = 'imap.[EMAIL-PROVIDER]'
PROTON_EMAIL = 'dein_protonmail_email[EMAIL-PROVIDER]'
PROTON_PASSWORD = 'dein_protonmail_passwort'
PROTON_FOLDER = 'Daten'

# Verbindung zum GMX IMAP Server
def connect_to_imap(server, email_address, password):
    mail = imaplib.IMAP4_SSL(server)
    mail.login(email_address, password)
    return mail

# Neue E-Mails von GMX abrufen
def fetch_emails(mail, folder):
    mail.select(folder)
    result, data = mail.search(None, 'ALL')
    email_ids = data[0].split()
    emails = []

    for eid in email_ids:
        result, msg_data = mail.fetch(eid, '(RFC822)')
        raw_email = msg_data[0][1]
        msg = email.message_from_bytes(raw_email)
        emails.append(msg)

    return emails

# E-Mails an ProtonMail weiterleiten
def send_to_protonmail(smtp_server, smtp_port, proton_email, proton_password, emails):
    smtp = smtplib.SMTP_SSL(smtp_server, smtp_port)
    smtp.login(proton_email, proton_password)

    for msg in emails:
        if msg.is_multipart():
            payload = msg.get_payload()[0].get_payload(decode=True)
        else:
            payload = msg.get_payload(decode=True)

        subject = msg['subject']
        sender = msg['from']
        recipient = proton_email

        mime_msg = MIMEText(payload.decode('utf-8'))
        mime_msg['Subject'] = subject
        mime_msg['From'] = sender
        mime_msg['To'] = recipient

        smtp.sendmail(sender, recipient, mime_msg.as_string())

    smtp.quit()

# Hauptlogik
def sync_emails():
    # Verbindung zu GMX herstellen
    gmx_mail = connect_to_imap(GMX_IMAP_SERVER, GMX_EMAIL, GMX_PASSWORD)
    print("Verbunden mit GMX")

    # Neue E-Mails von GMX abrufen
    emails = fetch_emails(gmx_mail, GMX_FOLDER)
    print(f"{len(emails)} E-Mails von GMX erhalten")

    gmx_mail.logout()

    # ProtonMail SMTP-Daten
    SMTP_SERVER = 'smtp.[EMAIL-PROVIDER]'
    SMTP_PORT = 465

    # E-Mails an ProtonMail senden
    send_to_protonmail(SMTP_SERVER, SMTP_PORT, PROTON_EMAIL, PROTON_PASSWORD, emails)
    print("E-Mails erfolgreich zu ProtonMail übertragen")

if __name__ == "__main__":
    sync_emails()

Erklärungen:

  1. IMAP-Verbindung: Das Skript verbindet sich mit dem IMAP-Server von GMX und ruft alle E-Mails im „Daten“-Ordner ab.

  2. Senden zu ProtonMail: Die E-Mails werden dann über SMTP an das ProtonMail-Konto weitergeleitet und in den entsprechenden „Daten“-Ordner gespeichert.

  3. Automatisierung: Du kannst dieses Skript regelmäßig ausführen lassen, indem du einen Cronjob auf deinem Mac einrichtest.

5. Cronjob einrichten (macOS)

Um dieses Skript automatisch z. B. einmal am Tag laufen zu lassen, kannst du einen Cronjob einrichten:

  1. Öffne das Terminal.

  2. Gib den Befehl ein, um den Crontab zu bearbeiten:

    crontab -e
  3. Füge folgende Zeile hinzu, um das Skript jeden Tag um 2:00 Uhr morgens auszuführen:

    0 2 * * * /usr/bin/python3 /pfad/zu/deinem/script.py

    Ersetze /pfad/zu/deinem/script.py mit dem tatsächlichen Pfad zu deinem Python-Skript.

  4. Speichere und schließe den Editor.

Jetzt wird das Skript jeden Tag automatisch ausgeführt und die E-Mails werden zwischen GMX und ProtonMail synchronisiert.

Zusammenfassung:

Damit hast du eine Lösung, die ohne manuelles Eingreifen funktioniert und trotzdem flexibel genug ist, um mit unterschiedlichen E-Mails umzugehen.