Empfängt E-Mails über IMAP und speichert Anhänge automatisch in Nextcloud-Benutzerordnern. Die Zuordnung zum richtigen Benutzer erfolgt über den Betreff der E-Mail.
- Alle Benutzer senden E-Mails mit Anhängen an eine zentrale E-Mail-Adresse (z.B. ein 1&1/IONOS-Postfach)
- Im Betreff wird der Nextcloud-Benutzername angegeben, z.B.
[anna] Rechnung Mai - Ein Nextcloud-Hintergrund-Job pollt das IMAP-Postfach periodisch
- Die App erkennt den Benutzernamen im Betreff und legt die Anhänge im Ordner des jeweiligen Benutzers ab
- Verarbeitete E-Mails werden als gelesen markiert (optional gelöscht)
| Betreff | Ergebnis |
|---|---|
[anna] Rechnung Mai |
Anhänge → Benutzerin anna |
[max] Vertrag unterschrieben |
Anhänge → Benutzer max |
Rechnung ohne Tag |
→ Fallback-Benutzer oder wird ignoriert |
- Nextcloud 28–33
- PHP 8.1+
- PHP IMAP Extension
- Ein IMAP-fähiges E-Mail-Postfach (z.B. 1&1/IONOS, GMX, Gmail, eigener Mailserver)
- Nextcloud Cron (empfohlen: Systemcron, nicht AJAX)
Das Nextcloud-Docker-Image (ab Debian Trixie) enthält kein php-imap-Paket.
Am einfachsten geht es mit dem Tool install-php-extensions:
docker exec -u root <container> bash -c "\
curl -sSLf https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions \
-o /usr/local/bin/install-php-extensions && \
chmod +x /usr/local/bin/install-php-extensions && \
install-php-extensions imap"
docker restart <container>Prüfen ob die Extension aktiv ist:
docker exec <container> php -m | grep imap
# Erwartete Ausgabe: imapWichtig: Bei einem Container-Update (neues Nextcloud-Image) geht die Extension verloren. Für eine dauerhafte Lösung ein eigenes Dockerfile verwenden:
FROM nextcloud:33
RUN curl -sSLf https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions \
-o /usr/local/bin/install-php-extensions && \
chmod +x /usr/local/bin/install-php-extensions && \
install-php-extensions imap# App-Verzeichnis in den Nextcloud-Container kopieren:
docker cp mail2folder/ <container>:/var/www/html/custom_apps/mail2folder
# Berechtigungen setzen:
docker exec -u root <container> chown -R www-data:www-data /var/www/html/custom_apps/mail2folder
# App aktivieren (erstellt automatisch die Datenbank-Tabellen):
docker exec -u www-data <container> php occ app:enable mail2folderNavigiere zu Verwaltungseinstellungen → Verwaltung → Zusätzliche Einstellungen → Mail2Folder.
IMAP-Server (Beispiel für 1&1/IONOS):
| Einstellung | Wert |
|---|---|
| IMAP-Host | imap.ionos.de |
| Port | 993 |
| Verschlüsselung | SSL/TLS |
| Benutzername | upload@meine-domain.de |
| Passwort | Dein E-Mail-Passwort |
| IMAP-Ordner | INBOX |
Benutzer-Zuordnung:
| Einstellung | Wert / Erklärung |
|---|---|
| Betreff-Muster | [benutzername] (Standard) — erkennt [anna] im Betreff |
| Fallback-Benutzer | z.B. admin — fängt Mails ohne gültigen Benutzertag auf |
Unterstützte Betreff-Muster:
| Muster | Beispiel-Betreff |
|---|---|
[benutzername] |
[anna] Rechnung Mai 2025 |
@benutzername |
@anna Rechnung Mai 2025 |
user:benutzername |
user:anna Rechnung Mai 2025 |
Verhalten:
| Einstellung | Wert / Erklärung |
|---|---|
| Abfrage-Intervall | 300 Sekunden (= 5 Minuten, Minimum: 60) |
| Unterordner-Struktur | Nach Datum, Monat, Absender, Betreff oder flach |
| Nach Verarbeitung löschen | Optional — E-Mails nach dem Speichern löschen |
| E-Mail-Text mitspeichern | Optional — speichert den Mail-Body als .txt-Datei |
Wenn „E-Mail-Text mitspeichern" aktiviert ist, wird der Inhalt jeder E-Mail als Textdatei
im selben Ordner wie die Anhänge abgelegt. Der Dateiname wird aus dem Betreff abgeleitet
(z.B. Rechnung Mai 2025.txt). Die Datei enthält einen kurzen Header (Von, Betreff, Datum)
gefolgt vom E-Mail-Text. HTML-Mails werden automatisch in lesbaren Klartext umgewandelt.
Klicke auf „Verbindung testen" um die IMAP-Verbindung zu prüfen.
Jeder Benutzer kann unter Persönliche Einstellungen → Zusätzliche Einstellungen → Mail2Folder
seinen Zielordner anpassen (Standard: Mail-Attachments). Dort sieht jeder Benutzer auch
eine Anleitung mit seiner persönlichen Betreff-Kennung und der E-Mail-Adresse.
Für zuverlässiges Polling muss Nextcloud Cron per System-Cron laufen:
# Cron-Modus aktivieren (falls noch nicht geschehen):
docker exec -u www-data <container> php occ background:cron
# Crontab auf dem Host bearbeiten:
crontab -e
# Zeile hinzufügen (alle 5 Minuten):
*/5 * * * * docker exec -u www-data <container> php cron.phpJe nach Admin-Einstellung werden Anhänge in Unterordnern organisiert:
| Modus | Beispielpfad |
|---|---|
date |
Mail-Attachments/2025/2025-06-15/bericht.pdf |
month |
Mail-Attachments/2025/06/bericht.pdf |
sender |
Mail-Attachments/max.mustermann/bericht.pdf |
subject |
Mail-Attachments/Rechnung_Mai/bericht.pdf |
flat |
Mail-Attachments/bericht.pdf |
Bei der Unterordner-Struktur subject wird der Benutzertag (z.B. [anna]) automatisch
aus dem Betreff entfernt, sodass nur der eigentliche Betrefftext als Ordnername verwendet wird.
| Anbieter | IMAP-Host | Port | Verschlüsselung |
|---|---|---|---|
| 1&1 / IONOS | imap.ionos.de |
993 | SSL/TLS |
| GMX | imap.gmx.net |
993 | SSL/TLS |
| Gmail | imap.gmail.com |
993 | SSL/TLS |
| Outlook.com | outlook.office365.com |
993 | SSL/TLS |
| Postfix/Dovecot | mail.example.com |
993 | SSL/TLS |
Hinweis für Gmail: Es muss ein App-Passwort erstellt werden (nicht das normale Login-Passwort).
- Das IMAP-Passwort wird in der Nextcloud-Datenbank gespeichert (
oc_appconfig) - Nur E-Mails mit gültigem Nextcloud-Benutzernamen im Betreff werden verarbeitet
- Unbekannte Benutzernamen werden ignoriert (Mail bleibt ungelesen im Postfach)
- Dateinamen werden sanitisiert (kein Path Traversal möglich)
- Duplikate werden anhand der Message-ID erkannt und übersprungen
- Der Betreff-Abgleich ist case-insensitive (
[Anna]findet Benutzeranna)
# Logs prüfen:
docker exec -u www-data <container> php occ log:tail --level=debug | grep Mail2Folder
# Hintergrund-Jobs anzeigen:
docker exec -u www-data <container> php occ background-job:list | grep Mail2Folder
# Job manuell ausführen:
docker exec -u www-data <container> php occ background-job:execute \
"OCA\Mail2Folder\BackgroundJob\FetchMailJob"
# IMAP Extension prüfen:
docker exec <container> php -m | grep imap
# App-Status prüfen:
docker exec -u www-data <container> php occ app:list | grep mail2folder„Mail2Folder ist noch nicht konfiguriert" → Das ist die persönliche Einstellungsseite. Die Admin-Konfiguration befindet sich unter Verwaltungseinstellungen (nicht persönliche Einstellungen) → Zusätzliche Einstellungen.
IMAP-Verbindung schlägt fehl → Prüfe Host, Port und Zugangsdaten. Bei 1&1/IONOS: Benutzername ist die vollständige E-Mail-Adresse. Teste die Verbindung über den Button in den Admin-Einstellungen.
Keine Anhänge werden gespeichert → Prüfe ob der Benutzername im Betreff exakt einem Nextcloud-Benutzer entspricht. Der Abgleich ist case-insensitive, aber Tippfehler werden nicht erkannt.
E-Mails werden nicht abgeholt
→ Stelle sicher, dass Nextcloud Cron per System-Cron läuft (php occ background:cron).
Im AJAX-Modus werden Hintergrund-Jobs nur bei Seitenaufrufen ausgeführt.
docker exec -u root <container> rm -rf /var/www/html/custom_apps/mail2folder
docker cp mail2folder/ <container>:/var/www/html/custom_apps/mail2folder
docker exec -u root <container> chown -R www-data:www-data /var/www/html/custom_apps/mail2folderDie App muss nicht erneut aktiviert werden — die Einstellungen bleiben in der Datenbank erhalten.
mail2folder/
├── appinfo/
│ ├── info.xml # App-Manifest
│ └── routes.php # API-Routen
├── lib/
│ ├── AppInfo/Application.php
│ ├── BackgroundJob/FetchMailJob.php # Cron-Job (IMAP-Polling)
│ ├── Controller/
│ │ ├── AdminSettingsController.php # Admin API (Speichern/Testen)
│ │ └── PersonalSettingsController.php # User API (Zielordner)
│ ├── Db/
│ │ ├── ProcessedMail.php # Entity
│ │ └── ProcessedMailMapper.php # DB-Queries
│ ├── Migration/
│ │ └── Version1000Date...Install.php # DB-Schema
│ ├── Service/
│ │ ├── ImapService.php # IMAP-Verbindung & Attachment-Extraktion
│ │ ├── AttachmentService.php # Datei-Speicherung in Nextcloud
│ │ └── MailProcessorService.php # Orchestrierung & Betreff-Routing
│ └── Settings/
│ ├── AdminSettings.php # Admin-Panel Registration
│ └── PersonalSettings.php # User-Panel Registration
├── templates/
│ ├── admin.php # Admin-UI (IMAP-Konfiguration)
│ └── personal.php # User-UI (Anleitung & Zielordner)
├── js/
│ ├── admin.js # Admin-Frontend
│ └── personal.js # User-Frontend
├── css/
│ └── style.css # Styles
├── img/
│ └── app.svg # App-Icon
└── README.md
AGPL-3.0 – wie Nextcloud selbst.