Wrapper script around `occ mail:account:create` to bulk-link IMAP/SMTP accounts for multiple Nextcloud users from a CSV file. Includes README with usage, limitations (no connection test, no initial sync), and .gitignore that blocks real credential CSVs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
85 lines
2.8 KiB
Markdown
85 lines
2.8 KiB
Markdown
# Nextcloud-ConnectMail
|
|
|
|
Bulk-link IMAP/SMTP mailaccounts voor Nextcloud-gebruikers via `occ mail:account:create`.
|
|
|
|
Bedoeld voor admins die in één keer mail-accounts willen koppelen voor meerdere users —
|
|
bijvoorbeeld bij onboarding, migratie, of provisioning op basis van een externe lijst.
|
|
|
|
## Wanneer dit script gebruiken
|
|
|
|
De Nextcloud Mail-app biedt **geen** REST-endpoint om als admin een account voor een
|
|
andere user te koppelen. Wel bestaat `occ mail:account:create <userId> ...`, maar dat
|
|
is positioneel en omslachtig voor bulk-werk. Dit script wrapt die call en leest een CSV.
|
|
|
|
Alternatieven:
|
|
- **Provisioning-templates** (admin-UI in Mail): één template per domein, géén
|
|
per-user credentials. Werkt alleen als alle users hetzelfde mail-cluster delen.
|
|
- **Eigen REST-controller**: vereist een patch op de Mail-app.
|
|
|
|
## Vereisten
|
|
|
|
- Shell-toegang tot de Nextcloud-server (rechtstreeks of via SSH/docker exec)
|
|
- `occ` uitvoerbaar als web-user (meestal `www-data`)
|
|
- De Nextcloud Mail-app geïnstalleerd en geactiveerd
|
|
- `python3` op de host waar het script draait (voor RFC-4180 CSV-parsing)
|
|
|
|
## Gebruik
|
|
|
|
```bash
|
|
OCC_CMD="docker exec -u www-data nc-dev php occ" \
|
|
./mail-bulk-link.sh accounts.csv
|
|
```
|
|
|
|
Voor classic installs:
|
|
|
|
```bash
|
|
OCC_CMD="sudo -u www-data php /var/www/nextcloud/occ" \
|
|
./mail-bulk-link.sh accounts.csv
|
|
```
|
|
|
|
Remote via SSH:
|
|
|
|
```bash
|
|
OCC_CMD="ssh hetzner-ax42 docker exec -u www-data nc-dev php occ" \
|
|
./mail-bulk-link.sh accounts.csv
|
|
```
|
|
|
|
## CSV-formaat
|
|
|
|
Header verplicht, kolomvolgorde vrij. Verplichte kolommen:
|
|
|
|
```
|
|
userId,name,email,imapHost,imapPort,imapSsl,imapUser,imapPass,smtpHost,smtpPort,smtpSsl,smtpUser,smtpPass
|
|
```
|
|
|
|
Optionele kolom: `authMethod` (`password` of `xoauth2`, default `password`).
|
|
|
|
- `imapSsl` / `smtpSsl`: `ssl`, `tls`, of `none`
|
|
- Regels die beginnen met `#` worden overgeslagen
|
|
- Quote velden met komma's volgens RFC 4180 (`"foo,bar"`)
|
|
|
|
Zie [accounts.example.csv](accounts.example.csv) voor een voorbeeld.
|
|
|
|
## Beperkingen
|
|
|
|
- **Geen connectie-test.** De `occ`-command slaat blind op — foute credentials worden
|
|
geaccepteerd. De user merkt het pas bij de eerste sync. De REST-route (`POST
|
|
/api/accounts`) doet wel een live IMAP/SMTP-test, maar werkt alleen voor de
|
|
ingelogde user zelf.
|
|
- **Geen initial mailbox-sync.** Wordt door de REST-route wel getriggerd, door
|
|
`occ` niet. Eerste sync gebeurt bij de eerstvolgende background-job of bij eerste
|
|
login van de user.
|
|
- **Wachtwoorden in CSV.** Plaintext op disk tijdens uitvoer. Na de run:
|
|
`shred -u accounts.csv`. Nooit committen.
|
|
|
|
## Security
|
|
|
|
- Voeg `accounts.csv` (en varianten) toe aan `.gitignore` van je deploy-repo
|
|
- Draai dit alleen vanuit een omgeving waar je sowieso admin-rechten hebt
|
|
- Voor productie: overweeg de credentials uit een secrets-store te halen en de
|
|
CSV on-the-fly te genereren in tmpfs
|
|
|
|
## Licentie
|
|
|
|
AGPL-3.0-or-later (consistent met Nextcloud Mail).
|