En vous promenant sur Beamreactor, nous stockons votre IP 48h pour des raisons de sécurité.

Lecteur Markdown

mailbox Documentation › MAILBOX_DOCUMENTATION

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
de en fr