Client Webmail
Un client webmail complet intégré directement dans le panneau d'administration Larapen. Connectez n'importe quel compte e-mail IMAP/SMTP et lisez, composez, répondez, transférez et gérez vos messages sans quitter votre tableau de bord.
IMAP & SMTP
Connectez n'importe quel fournisseur de messagerie standard : Gmail, Outlook, serveurs de messagerie personnalisés : via IMAP pour la lecture et SMTP pour l'envoi.
Multi-comptes
Chaque utilisateur administrateur peut ajouter plusieurs comptes e-mail, définir un compte par défaut et basculer entre eux dans la vue de la boîte de réception.
Composer & Répondre
Support complet de la composition, réponse, réponse à tous et transfert avec pièces jointes et signatures par compte.
Cache local
Cache de messages optionnel en base de données pour un chargement plus rapide. Seuls les nouveaux messages sont récupérés de manière incrémentielle depuis le serveur.
Gestion des dossiers
Découverte et synchronisation automatiques des dossiers. Boîte de réception, Envoyés, Brouillons, Corbeille, Spam, Archives et dossiers personnalisés sont tous pris en charge.
Recherche plein texte
Recherchez les messages par sujet et contenu du corps en utilisant l'indexation FULLTEXT de MySQL lorsque le cache local est activé.
Cas d'utilisation
Administrateur de site
Vous gérez un site Larapen et souhaitez lire et répondre aux e-mails (demandes de support, notifications de formulaires de contact) sans basculer vers un client de messagerie séparé.
- Ajoutez votre compte e-mail professionnel (ex.
admin@votresite.com). - Lisez les messages entrants dans la boîte de réception du panneau d'administration.
- Répondez directement depuis le tableau de bord avec votre signature e-mail.
Comptes d'équipe multiples
Chaque utilisateur administrateur gère son ou ses propres comptes e-mail. Un responsable du support peut ajouter à la fois
support@entreprise.com et facturation@entreprise.com, en basculant entre eux selon les besoins.
Communication centralisée
Gardez toute la communication liée au site visible au même endroit. Transférez les e-mails importants, composez des messages de prospection et gérez la correspondance avec les clients : le tout depuis le panneau d'administration.
Prérequis
- Larapen CMS v1.0.0 ou ultérieur
- PHP 8.3+ avec l'extension
imapactivée - MySQL 8.0+ (requis pour l'indexation FULLTEXT sur la table des messages)
- Le package Composer
webklex/php-imap(inclus avec l'add-on) - Un compte e-mail avec accès IMAP et SMTP
Installation
Étape 1 : Placer l'add-on
Copiez ou créez un lien symbolique du dossier webmail dans le répertoire "extensions/addons" de votre Larapen :
Étape 2 : Activer l'add-on
Allez dans Admin → Add-ons → Add-ons installés et activez Client Webmail.
Étape 3 : Exécuter les migrations
Cela crée 5 tables : webmail_accounts, webmail_folders,
webmail_identities, webmail_messages et webmail_attachments.
Étape 4 : Définir les permissions
L'add-on enregistre 12 permissions (voir Permissions). Attribuez-les aux rôles d'administration via Admin → Utilisateurs → Rôles & Permissions.
Étape 5 : Ajouter un compte e-mail
Naviguez vers Admin → Webmail → Comptes et cliquez sur Ajouter un compte. Entrez les détails de votre serveur IMAP et SMTP. Utilisez le bouton Tester la connexion pour vérifier avant d'enregistrer. Voir Comptes.
Configuration
Les paramètres globaux sont gérés dans Admin → Webmail → Paramètres.
Le fichier de configuration est config/webmail.php et les valeurs peuvent être remplacées
depuis le panneau d'administration (stockées dans la table settings, groupe webmail).
| Paramètre | Description | Défaut |
|---|---|---|
local_cache |
Lorsqu'activé, les messages sont stockés dans la base de données locale pour un chargement plus rapide. Seuls les nouveaux messages sont récupérés de manière incrémentielle depuis le serveur IMAP. | false |
messages_per_page |
Nombre de messages affichés par page dans la vue de la boîte aux lettres. | 25 |
auto_refresh_interval |
Intervalle de rafraîchissement automatique en secondes. Définissez à 0 pour désactiver le rafraîchissement automatique. |
0 |
max_attachment_size |
Taille maximale des pièces jointes en Ko. Par défaut 25 Mo (25600 Ko). | 25600 |
attachment_preview |
Lorsqu'activé, les pièces jointes prévisualisables (images, PDF) sont ouvertes directement dans le navigateur au lieu de forcer un téléchargement. | true |
html_display_mode |
Mode de rendu des e-mails HTML : iframe (isolé) ou text (texte brut uniquement). |
iframe |
date_format |
Chaîne de format PHP date() utilisée pour afficher les dates des messages. |
M j, g:i A |
default_imap_port |
Port IMAP par défaut pré-rempli lors de la création d'un nouveau compte. | 993 |
default_imap_encryption |
Chiffrement IMAP par défaut pré-rempli lors de la création d'un nouveau compte. | ssl |
default_smtp_port |
Port SMTP par défaut pré-rempli lors de la création d'un nouveau compte. | 465 |
default_smtp_encryption |
Chiffrement SMTP par défaut pré-rempli lors de la création d'un nouveau compte. | ssl |
Gestion des comptes
Chaque utilisateur administrateur gère ses propres comptes e-mail. Les comptes sont liés à l'utilisateur authentifié : un utilisateur ne peut ni voir ni modifier les comptes d'un autre utilisateur.
Ajouter un compte
Naviguez vers Admin → Webmail → Comptes → Ajouter un compte. Le formulaire requiert :
| Champ | Requis | Description |
|---|---|---|
name |
Oui | Nom d'affichage du compte (ex. « E-mail professionnel »). |
email |
Oui | Adresse e-mail. Doit être unique par utilisateur. |
imap_host |
Oui | Nom d'hôte du serveur IMAP (ex. imap.gmail.com). |
imap_port |
Oui | Port IMAP (généralement 993 pour SSL, 143 pour STARTTLS). |
imap_encryption |
Oui | Chiffrement : ssl, tls, starttls ou none. |
imap_username |
Oui | Nom d'utilisateur IMAP (généralement l'adresse e-mail). |
imap_password |
Oui | Mot de passe IMAP. Chiffré avant le stockage. |
imap_validate_cert |
Non | Valider le certificat SSL. Par défaut : true. Désactivez pour les certificats auto-signés. |
smtp_host |
Oui | Nom d'hôte du serveur SMTP (ex. smtp.gmail.com). |
smtp_port |
Oui | Port SMTP (généralement 465 pour SSL, 587 pour STARTTLS). |
smtp_encryption |
Oui | Chiffrement : ssl, tls, starttls ou none. |
smtp_username |
Non | Nom d'utilisateur SMTP. Utilise le nom d'utilisateur IMAP par défaut si vide. |
smtp_password |
Non | Mot de passe SMTP. Utilise le mot de passe IMAP par défaut si vide. Chiffré avant le stockage. |
signature |
Non | Signature e-mail HTML ajoutée aux messages sortants. Maximum 10 000 caractères. |
is_active |
Non | Activer ou désactiver le compte. Par défaut : true. |
is_default |
Non | Définir comme compte par défaut. Un seul compte par utilisateur peut être par défaut. |
Crypt de Laravel avant d'être stockés en base de données. Ils ne sont déchiffrés que lors de
l'établissement d'une connexion au serveur de messagerie.
Paramètres IMAP & SMTP courants
| Fournisseur | Hôte IMAP | Port IMAP | Hôte SMTP | Port SMTP | Chiffrement |
|---|---|---|---|---|---|
| Gmail | imap.gmail.com |
993 | smtp.gmail.com |
465 | SSL |
| Outlook / Microsoft 365 | outlook.office365.com |
993 | smtp.office365.com |
587 | STARTTLS |
| Yahoo Mail | imap.mail.yahoo.com |
993 | smtp.mail.yahoo.com |
465 | SSL |
| Personnalisé / cPanel | mail.votredomaine.com |
993 | mail.votredomaine.com |
465 | SSL |
myaccount.google.com → Sécurité → Mots de passe d'application.
Tester la connexion
Cliquez sur le bouton Tester la connexion dans le formulaire de compte pour vérifier la connectivité IMAP avant d'enregistrer. Le test tente de se connecter au serveur IMAP avec les identifiants fournis et retourne un message de succès ou d'erreur. Il s'agit d'une requête AJAX : aucun rechargement de page nécessaire.
Boîte de réception & Dossiers
La vue principale de la boîte aux lettres est accessible dans Admin → Webmail → Boîte de réception. Elle affiche la liste des messages pour le compte et le dossier sélectionnés.
Changement de compte
Si un utilisateur possède plusieurs comptes, un menu déroulant permet de basculer entre eux. Le compte par défaut est sélectionné automatiquement au premier chargement.
Navigation dans les dossiers
Les dossiers sont synchronisés automatiquement depuis le serveur IMAP. L'add-on détecte les types de dossiers standards :
- Boîte de réception : messages entrants
- Envoyés : messages envoyés
- Brouillons : brouillons de messages
- Corbeille : messages supprimés
- Spam : messages indésirables
- Archives : messages archivés
- Personnalisé : tout autre dossier créé par l'utilisateur
La détection du type de dossier gère les conventions de nommage de Gmail, Outlook et IMAP standard. Chaque dossier affiche le nombre total de messages et le nombre de messages non lus.
Rafraîchissement des dossiers
Cliquez sur le bouton Rafraîchir pour resynchroniser les dossiers depuis le serveur IMAP. Cela met à jour les listes de dossiers, les compteurs de messages et (lorsque le cache local est activé) télécharge les nouveaux messages.
Lecture des messages
Cliquez sur n'importe quel message dans la liste pour afficher son contenu complet. La vue de détail du message affiche :
- Adresses De, À, CC, CCI
- Sujet et date
- Corps HTML (rendu dans un iframe isolé) ou corps en texte brut
- Liste des pièces jointes avec liens de téléchargement
- Boutons d'action rapide : Répondre, Répondre à tous, Transférer, Supprimer
html_display_mode est défini sur iframe,
les e-mails HTML sont rendus à l'intérieur d'un <iframe> isolé pour prévenir les attaques XSS.
Définissez-le sur text pour n'afficher que la version texte brut des messages.
Recherche
Utilisez la barre de recherche pour trouver des messages dans le dossier actuel. Lorsque le cache local est activé,
la recherche utilise l'indexation FULLTEXT de MySQL sur les colonnes subject et text_body,
ainsi que la recherche JSON sur les champs d'adresses. Lorsque le cache est désactivé, la recherche interroge directement le serveur IMAP.
Actions sur les messages
Les actions suivantes sont disponibles via AJAX (sans rechargement de page) :
| Action | Description |
|---|---|
| Marquer comme lu | Marquer le message comme lu sur le serveur IMAP. |
| Marquer comme non lu | Marquer le message comme non lu sur le serveur IMAP. |
| Suivre | Marquer/suivre le message avec un drapeau. |
| Ne plus suivre | Retirer le drapeau/suivi du message. |
| Supprimer | Supprimer définitivement le message du serveur. |
| Déplacer vers la corbeille | Déplacer le message dans le dossier Corbeille. |
| Déplacer | Déplacer le message vers un autre dossier. |
| Spam | Déplacer le message dans le dossier Spam. |
Composer & Répondre
Nouveau message
Naviguez vers Admin → Webmail → Composer pour créer un nouvel e-mail. Sélectionnez le compte d'envoi (si vous en avez plusieurs), remplissez les champs À, CC et CCI, saisissez un sujet et le corps du message, puis cliquez sur Envoyer.
- Plusieurs destinataires peuvent être saisis sous forme d'adresses séparées par des virgules.
- Les champs CC et CCI sont masqués par défaut et peuvent être dépliés via des liens de bascule.
- La signature du compte est ajoutée automatiquement si elle est configurée.
Répondre & Transférer
Depuis la vue de détail du message, cliquez sur Répondre, Répondre à tous ou Transférer pour ouvrir le formulaire de composition pré-rempli avec :
- Répondre : champ À défini sur l'expéditeur original. Sujet préfixé par
Re:. Message original cité. - Répondre à tous : champ À défini sur l'expéditeur original plus tous les destinataires CC. Sujet préfixé par
Re:. - Transférer : champ À laissé vide. Sujet préfixé par
Fwd:. Message original cité avec un bloc d'en-tête de transfert.
Le format de citation utilise le modèle : « Le [date], [expéditeur] a écrit : » suivi du corps du message original.
Pièces jointes
Les messages sortants prennent en charge les pièces jointes. La taille maximale des pièces jointes est contrôlée par le
paramètre max_attachment_size (par défaut : 25 Mo). Les pièces jointes prévisualisables (images, PDF) peuvent
être ouvertes directement dans le navigateur lorsque attachment_preview est activé.
Pour télécharger une pièce jointe d'un message reçu, cliquez sur le nom de la pièce jointe dans la vue de détail du message. Les pièces jointes sont récupérées directement depuis le serveur IMAP à la demande.
Paramètres
Naviguez vers Admin → Webmail → Paramètres pour configurer l'add-on. Les paramètres sont organisés en sections :
Affichage
- Messages par page : nombre de messages affichés par page dans la boîte aux lettres.
- Mode d'affichage HTML :
iframe(isolé, recommandé) outext(texte brut uniquement). - Format de date : format de date PHP pour les horodatages des messages.
- Aperçu des pièces jointes : ouvrir les images/PDF directement ou forcer le téléchargement.
- Taille maximale des pièces jointes : taille maximale des fichiers pour les pièces jointes sortantes (en Ko).
Performance
- Cache local : activer le cache de messages en base de données pour un chargement plus rapide.
- Intervalle de rafraîchissement automatique : rafraîchissement automatique de la boîte aux lettres en secondes. Définissez à
0pour désactiver, ou choisissez des intervalles comme « au focus de l'onglet », 30 secondes, 1 minute, etc.
Mise à jour
Étape 1 : Remplacer les fichiers
Remplacez le répertoire de l'add-on par la nouvelle version.
Étape 2 : Exécuter les migrations
Étape 3 : Vider les caches
Étape 4 : Vérifier
Visitez Webmail → Comptes et vérifiez que vos comptes sont toujours listés et opérationnels. Cliquez sur Tester la connexion sur un compte pour confirmer la connectivité.
Dépannage
Le test de connexion échoue : « Could not connect to IMAP server »
Vérifiez que :
- L'hôte et le port IMAP sont corrects pour votre fournisseur de messagerie.
- Le type de chiffrement correspond au port (SSL pour 993, STARTTLS pour 143).
- Le nom d'utilisateur et le mot de passe sont corrects. Pour Gmail, utilisez un mot de passe d'application si l'authentification à deux facteurs est activée.
- Le pare-feu de votre serveur autorise les connexions sortantes sur le port IMAP.
- Si vous utilisez un certificat auto-signé, désactivez
imap_validate_cert.
Les messages ne se chargent pas : boîte de réception vide
- Cliquez sur Rafraîchir pour forcer une synchronisation des dossiers.
- Vérifiez que le compte est marqué comme Actif.
- Consultez la colonne
connection_errordanswebmail_accountspour les messages d'erreur stockés. - Vérifiez que le serveur IMAP autorise la connexion (certains fournisseurs nécessitent d'activer « l'accès IMAP » dans leurs paramètres).
L'envoi d'e-mail échoue : « Send failed »
- Vérifiez les paramètres d'hôte, de port et de chiffrement SMTP.
- Si le nom d'utilisateur/mot de passe SMTP est laissé vide, le système utilise les identifiants IMAP par défaut : assurez-vous qu'ils fonctionnent aussi pour le SMTP.
- Vérifiez les logs du serveur (
storage/logs/laravel.log) pour le message d'erreur SMTP spécifique. - Certains fournisseurs (ex. Gmail) nécessitent d'autoriser les « applications moins sécurisées » ou d'utiliser des mots de passe d'application.
La synchronisation des dossiers affiche des types de dossiers incorrects
L'add-on utilise une détection heuristique pour identifier les types de dossiers. Si un dossier est incorrectement catégorisé (ex. votre dossier « Envoyés » apparaît comme « personnalisé »), vérifiez que :
- Le nom du dossier suit les conventions IMAP standard de votre fournisseur.
- Les dossiers Gmail utilisent le préfixe
[Gmail]/(ex.[Gmail]/Sent Mail). - La méthode
resolveCanonicalFolders()gère les types en double en sélectionnant le plus approprié.
Le cache local ne se met pas à jour
- Assurez-vous que
local_cacheest défini surtruedans Webmail → Paramètres. - Vérifiez la colonne
uid_validitydanswebmail_folders. Si elle a changé sur le serveur, le cache est automatiquement purgé et resynchronisé lors du prochain accès. - Essayez de cliquer sur Rafraîchir pour déclencher une synchronisation incrémentielle.
- Pour les problèmes persistants, videz manuellement le cache en tronquant la table
webmail_messagespour le dossier concerné et en réinitialisantlast_synced_uidà0.
Les pièces jointes ne se téléchargent pas
- Les pièces jointes sont récupérées directement depuis le serveur IMAP à la demande : elles ne sont pas stockées localement. Assurez-vous que la connexion IMAP est active.
- Si l'index de la pièce jointe est incorrect, le téléchargement échouera. Cela peut se produire si la structure du message a changé sur le serveur.
- Vérifiez le paramètre
max_attachment_size: il s'applique aux pièces jointes sortantes, pas aux téléchargements.
La recherche ne retourne aucun résultat
- Lorsque le cache local est désactivé, la recherche interroge directement le serveur IMAP. Certains serveurs IMAP ont des capacités de recherche limitées.
- Lorsque le cache local est activé, la recherche utilise le FULLTEXT MySQL. Les termes de recherche courts
(moins de 3-4 caractères, selon le
ft_min_word_lende MySQL) peuvent ne pas retourner de résultats. - Assurez-vous que les messages ont été synchronisés dans le cache local avant de rechercher.
Le compte par défaut ne persiste pas
Le WebmailAccountObserver garantit qu'un seul compte par utilisateur peut être défini par défaut.
Lors de la définition d'un nouveau compte par défaut, tous les autres comptes de cet utilisateur sont automatiquement désactivés comme défaut. Si aucun
compte par défaut n'est explicitement défini, le premier compte actif est utilisé comme solution de repli.