Stack: Nginx + PHP 8.2 + MariaDB + Postfix + Dovecot + Samba - install.sh: script installation automatisé pour RPi OS Bookworm - Interface web: visionneuse mails + admin (comptes, domaine, dashboard) - Chaque compte mail génère automatiquement un share Samba - Processeur cron: extraction pièces jointes via zbateson/mail-mime-parser - Zéro injection SQL (PDO + prepared statements) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.5 KiB
2.5 KiB
Projet copymail
Description
Système de réception et distribution automatique de pièces jointes par email. Tourne sur Raspberry Pi OS (Debian Bookworm). Remplace une solution Synology existante.
Concept
- Un email avec PJ arrive sur le serveur mail
- Le processeur (cron 1 min) extrait les PJ
- Les fichiers sont déposés dans le share SMB du compte destinataire
- L'interface web permet de consulter l'historique et gérer les comptes
Stack
- OS : Raspberry Pi OS Lite (Bookworm / Debian 12)
- Web : Nginx + PHP 8.2-FPM + MariaDB
- Mail : Postfix (SMTP) + Dovecot (IMAP) — virtual mailboxes
- Partage fichiers : Samba (un share par compte)
- Traitement : PHP CLI via cron, lib
zbateson/mail-mime-parser
Infrastructure
- App déployée dans
/opt/copymail/ - Mails stockés dans
/var/mail/vhosts/<domain>/<user>/Maildir/ - Fichiers extraits dans
/srv/copymail/<user>/ - Config BDD :
/opt/copymail/config.php(généré par install.sh)
Installation
# Variables optionnelles (sinon valeurs par défaut)
export COPYMAIL_DOMAIN="mail.mondomaine.fr"
export COPYMAIL_HOSTNAME="raspberrypi"
export COPYMAIL_ADMIN_PASS="monmotdepasse"
sudo bash install.sh
Comptes mail
Créés via l'interface web /admin/accounts.php.
Chaque compte crée automatiquement :
- Boîte mail
user@domain - Dossier Maildir
- Share Samba
\\serveur\user
Structure fichiers
/opt/copymail/
├── install.sh
├── config.php ← généré à l'install (BDD credentials)
├── sql/schema.sql
├── web/ ← webroot Nginx
│ ├── index.php ← visionneuse mails
│ ├── login.php / logout.php
│ ├── admin/
│ │ ├── index.php ← dashboard statut services
│ │ ├── domain.php ← config domaine + ports
│ │ └── accounts.php ← gestion comptes
│ ├── mail/download.php
│ ├── api/
│ └── includes/ ← db.php, auth.php, layout.php
├── processor/
│ ├── process_mail.php ← script cron extraction PJ
│ └── composer.json
└── scripts/
├── create_account.sh
├── delete_account.sh
└── apply_config.sh ← régénère configs + reload services
Notes
- Basé sur une ancienne version PHP (artek-mail-script) qui tournait sur Synology
- Réécriture complète en PHP 8.2, PDO, Bootstrap 5
- Plus d'injections SQL : toutes les requêtes utilisent des prepared statements