Lecteur Markdown
MAILBOX_DOCUMENTATION
Mailbox — Client email IMAP/POP3 intégré #
Description #
Supporte les connexions IMAP et POP3 via l'extension PHP `imap_open`. Chaque utilisateur peut configurer plusieurs comptes email et basculer entre eux.
Prérequis #
- Extension PHP `ext-imap` activée
- jQuery UI (dialogs, autocomplete, draggable, droppable)
- jQuery DataTables
- Table SQL `mailer-daemon`
Fonctionnalités #
Gestion des comptes #
- Comptes multiples par utilisateur, stockés en BDD (`mailer-daemon`)
- Sélecteur de compte actif dans l'interface (session via `Sessions::set`)
- Configuration par compte : serveur, port, type de connexion, identifiant, mot de passe, signature
- Types de connexion supportés : POP3/SSL, IMAP/SSL, POP3/SSL (no validate), IMAP/SSL (no validate), POP3/SSL/TLS, IMAP/SSL/TLS
- Suppression de compte
Consultation des emails #
- Liste paginée via DataTables avec chargement AJAX (`mailbox.mod&list=1`)
- Colonnes : statut lu/non lu, expéditeur, objet (avec compteur de messages et taille totale), pièces jointes, date, taille
- Ouverture d'un email dans un dialog jQuery UI modal (75% de largeur)
- Affichage des headers complets : De, À, CC, Date, Sujet
- Téléchargement des pièces jointes via `mailbox.mod&act=download`
- Sélection individuelle, multiple (Ctrl/Shift), ou globale (checkbox header)
Composition et réponse #
- Composition d'un nouvel email (`openComposeDialog('compose')`)
- Réponse avec pré-remplissage du destinataire, sujet (RE:), contenu original et date (`openComposeDialog('reply')`)
- Transfert avec sujet (FW:), contenu original et date (`openComposeDialog('forward')`)
- Autocomplétion des contacts sur le champ destinataire (`mailbox.mod&act=get_contacts`)
- Contenu email encodé en base64 pour le transit (fonctions `utf8_to_b64` / `b64_to_utf8`)
Gestion des dossiers IMAP #
- Sidebar avec liste des dossiers chargée dynamiquement (`mailbox.mod&act=list_folders`)
- Création de dossier (`mailbox.mod&act=create_folder`)
- Suppression de dossier (`mailbox.mod&act=delete_folder`) avec fallback sur INBOX
- Le dossier INBOX ne peut être ni supprimé ni renommé
- Changement de dossier au clic : recharge la DataTable avec la nouvelle source
Drag & drop #
- Les emails (première colonne) sont draggables vers les dossiers de la sidebar
- Helper visuel affichant le nombre de mails déplacés
- Les dossiers sont droppables avec feedback visuel (classe `folder-hover`)
- Déplacement effectif via `mailbox.mod&act=move_emails` avec UIDs IMAP
Suppression #
- Suppression des emails sélectionnés via `mailbox.mod&act=DELETE`
- Confirmation par `confirmWindow` avec compteur d'emails sélectionnés
- Extraction des UIDs IMAP depuis le `DT_RowId` (format : `msgno-uid-imapuid`)
Architecture #
Fichiers #
/plugins/mailbox/
├── mailbox.php # Interface principale
├── /conf/
│ └── mailbox.conf.inc.php # Configuration
├── /doc/
│ └── mailbox.md # Cette documentation
├── /lib/
│ └── mailbox.lib.inc.php # Bibliothèque (fonctions IMAP)
├── /locale/
│ ├── mailbox.en.inc.php
│ └── mailbox.fr.inc.php
├── /handlers/
│ └── mailbox.mod.php # Endpoint AJAX
├── /css/
│ └── mailbox.css
├── /js/
│ └── mailbox.js # Logique frontend
├── /images/
│ ├── read.gif
│ ├── unread.gif
│ ├── paperclip.gif
│ ├── small_pen.png
│ ├── small_papers.png
│ ├── small_cogs.png
│ ├── trash.png
│ └── /ui/
│ └── attachment.png
└── /sql/
└── mailbox.sql
Endpoints AJAX (mailbox.mod) #
| Action | Méthode | Description |
|-------------------|---------|------------------------------------------|
| `list=1` | GET | Liste des emails (DataTables JSON) |
| `act=read` | POST | Lecture d'un email (headers, body, pièces jointes) |
| `act=reply` | POST | Formulaire de réponse/composition |
| `act=download` | GET | Téléchargement d'une pièce jointe |
| `act=DELETE` | POST | Suppression d'emails par UIDs |
| `act=config` | POST | Sauvegarde de la configuration compte |
| `act=list_folders`| GET | Liste des dossiers IMAP |
| `act=create_folder`| POST | Création d'un dossier |
| `act=rename_folder`| POST | Renommage d'un dossier |
| `act=delete_folder`| POST | Suppression d'un dossier |
| `act=move_emails` | POST | Déplacement d'emails entre dossiers |
| `act=get_contacts`| GET | Autocomplétion des contacts |
Format DT_RowId #
{msgno}-{uid}-{imap_uid}
Le troisième segment est l'UID IMAP réel, utilisé pour toutes les opérations (lecture, suppression, déplacement). Extraction via `getRealImapUidFromRowId()`.
Traductions JavaScript #
Passées via `setJavascriptLocale()` dans le namespace `PLUGIN_TRANSLATION.mailbox`. Clés utilisées : `error`, `compose`, `reply`, `forward`, `attention`, `no_selection`, `areyousure`, `emails`, `emailids`, `move`, `success`.
Sécurité #
- Chaque requête SQL vérifie `owner_user_id` pour isoler les comptes par utilisateur
- Adresses email encodées en base64 dans le transit JSON (`source_address`, `reply_addresses`)
- Formulaire de configuration avec double saisie du mot de passe
- Validation côté client via `validerFormulaire()` avant soumission AJAX
Dépendances externes #
- jQuery UI : dialogs, autocomplete, draggable, droppable
- jQuery DataTables : liste des emails paginée
- `javascript/dialogs.js` : alertWindow, confirmWindow, promptWindow, infoWindow, errorWindow
Notes #
- La variable globale `currentFolder` (défaut : `INBOX`) détermine le dossier actif pour toutes les opérations
- `BEAM_MAILS_PER_PAGE` est injectée depuis PHP via `$headdata`
- Le `loadFolders()` est déclenché avec un `setTimeout` de 500ms pour laisser DataTables s'initialiser
- La fonction `br_do_bytes()` affiche les tailles en notation unicode superscript (ᴷᴮ, ᴹᴮ, ᴳᴮ, ᵀᴮ)
Changelog #
- 0.91.2 (2026-01-18) : Comptes multiples, gestion des dossiers IMAP, drag & drop, transfert d'emails, renommage/suppression de dossiers
- 0.x (2002–2025) : Évolutions progressives depuis le client email original