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-imapactivé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_emailsavec UIDs IMAP
Suppression #
- Suppression des emails sélectionnés via
mailbox.mod&act=DELETE - Confirmation par
confirmWindowavec 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_idpour 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_PAGEest injectée depuis PHP via$headdata- Le
loadFolders()est déclenché avec unsetTimeoutde 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