Extension:ContactManager
État de la version : stable |
|
|---|---|
| Implémentation | Accroche, Page spéciale |
| Description | logiciel complet de courriel sur le web, de gestionnaire de contacts et de démarchage par courriel pour MediaWiki basé sur VisualData |
| Auteur(s) | thomas-topway-it (thomas-topway-itdiscussion) |
| Dernière version | 1.3.1 (2025-10-19) |
| MediaWiki | 1.35.3+ |
|
|
|
|
| Licence | Licence publique générale GNU v2.0 ou ultérieur |
| Téléchargement | |
| Exemple | demo |
| Traduire l’extension ContactManager sur translatewiki.net si elle y est disponible | |
| Problèmes | Tâches ouvertes · Signaler un bogue |
ContactManager est un logiciel de courriel sur le web complète basé sur MediaWiki et VisualData. Grâce à la flexibilité de MediaWiki, la puissance de json-schema et la modularité de VisualData, cela permet aussi de l'utiliser en tant que gestionnaire de contacts (d'où son nom), ainsi que logiciel de démarchage par courriel, simlilaire à Mailchimp ou à MailUP.
Fonctionnalités clé:
- plusieurs boîtes à lettres possibles (IMAP et SMTP)
- prise en charge de tous les critères de recherche IMAP
- filtres du courriel (reconnait toutes les métadonnées du courriel)
- prend en charge les pièces jointes hors et intra bande
- agents courriel (mailers) multiples (tous les agents pris en charge par Symfony sont reconnus : smtp, sendmail, native, Amazon SES, Mandrill, Mailgun, Mailjet, OhMySMTP, Postmark, SendGrid, Sendinblue)
- récupère automatiquement les contacts dans les courriels envoyés ou reçus, avec des catégories prédéfinies en fonction des options de recherche dans la boîte à lettres
- crée automatiquement des conversations à partir des courriels envoyés ou reçus en se basant sur le destinataire et non pas sur le sujet du courriel
- possibilité d'envoyer des courriels à des catégories de contacts et de faire des substitutions
- Modèles Twig
- suivi des courriels (si utilisé avec un agent courriel tiers tel que sendgrid)
- autocomplétion de
to,cc,bccen utilisant les requêtes de formulaires standard VisualData - entièrement configurable en utilisant les schémas de VisualData, les modèles et les articles de Mediawiki.
- Intégration de TinyMCE
- intégration des notifications Echo
Voir la démonstration – Envoyer un courriel pour information à wikisphere.org et observer le fonctionnement
Eléments de l'interface utilisateur
Après l'installation l'extension crée les liens suivants dans le panneau latéral :
Installation
- installer PHP-Imap sur votre serveur. Sous Ubuntu ceci est fait avec la seconde commande
sudo apt install php7.1-imap
(remplacer 7.1 par votre version PHP actuelle)
- Installer Extension:VisualData en suivant les instructions correspondantes.
- Télécharger ContactManager et placer les fichiers dans le répertoire
ContactManagerdu dossierextensions/. - Exécuter
composer update --no-devdans le répertoire des extensions pour installer les bibliothèques PHP nécessaires - Ajouter le code suivant à la fin de votre LocalSettings.php
wfLoadExtension( 'ContactManager' );
- Exécuter
php maintenance/run.php update(pour installer les tables nécessaires) - Exécuter
php ./extensions/ContactManager/maintenance/ImportData.php(pour importer les articles dans l'espace de nomsContactManangerdu wiki avec les modèles et les schémas nécessaires à l'extension)
Fait – Aller sur Special:Version sur votre wiki pour vérifier que l'extension s'est bien installée.
Cette extension nécessite Extension:VisualData 1.0.9+, Extension:UrlGetParameters et Extension:Tabs (Extension:SubpageNavigation est aussi recommandé) |
Installer les extensions suivantes :
- Extension:UrlGetParameters
- Extension:Tabs ou Extension:TabberNeue (il est recommandé de télécharger Extension:Tabs à partir d'ici ou de là)
- Extension:TemplateStyles
Activer StringFunctions :
$wgPFEnableStringFunctions = true;
La configuration de base doit être similaire à :
wfLoadExtension( 'VisualData' ); // wfLoadExtension( 'TabberNeue' ); // $wgTabberNeueEnableAnimation = false; wfLoadExtension( 'Tabs' ); wfLoadExtension( 'UrlGetParameters' ); wfLoadExtension( 'TemplateStyles' ); wfLoadExtension( 'ContactManager' ); $wgVisualDataEditDataNamespaces = [ 0, 4, 2226, 2230, 2260 ]; $wgNamespacesWithSubpages[2260] = true; $wgPFEnableStringFunctions = true; $wgContactManagerAttachmentsFolder = "$IP/ContactManagerFiles"; // *** désactiver l'affichage des sous-pages éventuellement trop coûteux $wgSubpageNavigationDisablePaths = [ 'ContactManager:Mailboxes', 'ContactManager:Contacts', ];
Créer deux entrées dans le fichier de la crontab :
* * * * * php www-data $IP/maintenance/run.php "$IP/extensions/ContactManager/maintenance/CheckMessages.php" > /dev/null 2>&1 * * * * * php www-data $IP/maintenance/runJobs.php --type ContactManagerJob --memory-limit default >> $IP/ContactManagerJob.log 2>&1
(ce qui suppose que le nom d'utilisateur du serveur Web est www-data et qu'il peut exécuter les fichiers connexes; remplacer $IP par le chemin absolu de votre installation Mediawiki)
Le premier script crée les tâches pour vérifier les nouveaux messages courriels s'ils sont dûs, et le second exécute toutes les minutes les tâches présentes en file d'attente.
Voici un tutoriel pour gérer les crontab.
Pour créer une crontab pour un utilisateur particulier (par exemple www-data) utilisez la commande suivante :
sudo crontab -e -u www-data
Dans ce cas les entrées de la crontab doivent apparaître ainsi :
* * * * * php $IP/maintenance/run.php "$IP/extensions/ContactManager/maintenance/CheckMessages.php" > /dev/null 2>&1 * * * * * php $IP/maintenance/runJobs.php --type ContactManagerJob --memory-limit default >> $IP/ContactManagerJob.log /dev/null 2>&1
(remplacez $IP par le chemin absolu de votre installation Mediawiki)
(optionnel mais recommandé) Veillez à ce que le chemin d'installation MediaWiki soit la propriété du serveur web (Apache2 sous Ubuntu)
sudo chown www-data:www-data $IP -R
(remplacez $IP par le chemin absolu de votre installation Mediawiki)
Accordez les droits d'exécution au propriétaire du fichier : (mettre 777 si vous avez sauté l'étape précédente)
sudo chmod 755 $IP/extensions/ContactManager/maintenance/CheckMessages.php
(remplacez $IP par le chemin absolu de votre installation Mediawiki)
Créer le répertoire ContactManagerFiles sous le chemin d'installation Méwiawiki ou spécifier un autre chemin en utilisant le paramètre $wgContactManagerAttachmentsFolder dans le fichier LocalSettings.
Accordez au serveur web les droits de le modifier en utilisant :
sudo chown www-data:www-data $IP/ContactManagerFiles
(remplacez $IP par le chemin absolu de votre installation Mediawiki)
Cela garanti que les pièces jointes (si activé) peuvent être sauvegardées et gérées par l'extension.
Flux de travail
L'extension crée un ensemble de pages dans l'espace de noms ContactManager (ainsi que des modèles avec le préfixe ContactManager/) permettant de créer et de modifier les boîtes à lettres, d'ajouter des agents courriel, de gérer les messages et leur entête ainsi que les tâches, les conversations et les contacts pour chacune des boîtes, d'envoyer des messages, et de naviguer parmi tous les articles, les schémas, les modèles et les modules créés par l'extension.
Voici tout ce qu'il vous faut savoir pour disposer d'un courriel web complètement fonctionnel en quelques minutes.
Etape 1 : créer une boîte à lettres
Créer une boîte à lettres sur la page ContactManager:Mailboxes
Insérer simplement le nom souhaité de la boîte à lettres et une liste d'adresses courriel autorisées dans le formulaire name <email> (ou simplement le courriel), ainsi que le champ reply-to.
Après avoir créé une boîte à lettres l'application vous redirige vers la page suivante :
Panneau de contrôle principal pour chaque boîte à lettres, avec lequel vous pouvez gérer les tâches, afficher et actualiser les informations de ces boîtes, les dossiers, définir des règles pour récupérer les messages, lire les en-têtes et le contenu des messages, gérer les conversations et les contacts et composer les messages.
Etape 2 : définir les données personnelles de la boîte à lettres
Créer les clés des boîtes à lettres
Modifier Manuel:LocalSettings.php et créer une clé dans le paramètre global $wgContactManagerIMAP (utilisé pour recevoir le courriel) et $wgContactManagerSMTP (utilisé pour envoyer le courriel), avec le nom de la boîte à lettres créée, ainsi :
$wgContactManagerIMAP = [
'mailbox_1' => [
'server' => '',
'username' => '',
'password' => '',
'port' => 993,
],
// ...
];
$wgContactManagerSMTP = [
'mailbox_1' => [
'server' => '',
'username' => '',
'password' => '',
'port' => 465
],
// ...
];
(remplacer mailbox_1 par le nom de la boîte à lettres utilisé à l'étape 1)
Utiliser getenv de PHP pour stocker le ,mot de passe dans les variables d'environnement pour des raisons de sécurité.
Noter que certains fournisseurs de courriels, tel que gmail ou yahoo, nécessitent de créer un mot de passe d'application à utiliser à la place de votre mot de passe habituel. Informations supplémentaires ici. |
Activer Imap avec Gmail
Aller dans les paramètres de gmail, dans l'onglet Forwarding and POP/IMAP et activez Imap
Puis aller sur le Gestionnaire du compte Google, configurer l'authentification à deux facteurs (2FA) en suivant ces étapes, et déclarer un mot de passe pour l'application en suivant ces étapes.
Saisir imap.gmail.com dans le champ Mailbox server du formulaire Boîte à lettres du gestionnaire de contacts, et le mot de passe de l'application dans le champ Mailbox password.
Attention : même si le mot de passe d'application de gmail est affiché avec des espaces après la création, il doit être saisi sans espace dans l'objet de configuration sinon cela ne fonctionne pas ! |
Etape 3 : définir les tâches
Cliquer sur les boutons Get mailbox info et Get folders comme indiqué ci-dessous.
Noter que chaque bouton se compose du bouton principal (2) sur la gauche et du bouton de modification (1) sur la droite. Le premier ensemble définit les propriétés du bouton et le second l'active. Les deux premiers boutons doivent être remplis avec le nom de la boîte à lettres et le nom de la tâche, afin que vous puissiez les activer ensemble simultanément. Si la crontab a été correctement configurée comme indiqué dans les instructions d'installation, elles seront exécutées et terminées dans les 1 à 3 minutes.
En revanche, si la crontab n'a pas encore été configurée, vous devez exécuter la commande suivante à partir de la ligne de commande :
php maintenance/runJobs.php --type ContactManagerJob --memory-limit -1
Une fois que cette liste de répertoires a été récupérée à partir de la boîte à lettres et sauvegardée dans les données JSON associées à l'article, cliquer sur le bouton d'édition à côté du bouton primaire Get messages afin de configurer les propriétés associées.
Le formulaire permet de définir quels répertoires sont à télécharger de la boîte à lettres, le nom du répertoire local, le critère de recherche pour chaque dossier, s'il faut ou non récupérer le contenu des messages, la méthode de recherche (critère du search ou par UID) pour assigner des catégories, vérifier les messages toutes les n minutes, définir un nombre arbitraire de filtres à la fois pour l'entête et pour les messages avec leurs actions associées et bien plus encore !
Nous vous recommandons de chercher d'abord les messages à partir d'une date donnée (par exemple la dernière année calendaire en utilisant fetch search) et ensuite de définir fetch UIDs incremental et check email every à 10 minutes) pour que la connaissance de votre boîte aux lettres soit toujours à niveau !
Dans le premier cas, il faut activer la tâche en cliquant sur le bouton principal Get messages après avoir enregistré les propriétés. Dans le second cas, il n'est pas nécessaire d'activer la tâche à chaque fois car elle est recréée toutes les n minutes par le script de maintenance de la crontab.
Tous les critères de recherche IMAP sont pris en charge et accessibles ou éditables par le biais du formulaire pour chaque dossier séparément.
- ALL
- ANSWERED
- BCC
- BEFORE
- BODY
- CC
- DELETED
- FLAGGED
- FROM
- KEYWORD
- NEW
- OLD
- ON
- RECENT
- SEEN
- SINCE
- SUBJECT
- TEXT
- TO
- UNANSWERED
- UNDELETED
- UNFLAGGED
- UNKEYWORD
- UNSEEN
Un nombre arbitraire de filtres pour les entêtes et les messages peut également être initialisé à travers le formulaire afin de sauter les messages correspondants en fonction d'une condition spécifique, de les enregistrer dans un chemin spécifique ou d'attribuer une ou plusieurs catégories. Les expressions régulières sont prises en charge pour les champs textuels, les entrées de date pour les champs de date et les entrées numériques pour les champs numériques.
Filtres pris en charge pour les entêtes
- subject
- from
- to
- date
- message_id
- references
- in_reply_to
- size
- uid
- msgno
- recent
- flagged
- answered
- deleted
- seen
- draft
- udate
Filtres pris en charge pour les messages
- id
- headersRaw
- imapPath
- mailboxFolder
- isSeen
- isAnswered
- isRecent
- isFlagged
- isDeleted
- isDraft
- parsedDate
- sender/name
- sender/address
- deliveredTo
- textPlain
- textHtml
- visibleText
- detectedLanguage
- hasAttachments
- regularAttachments
- conversationHash
- headers/returnPath
- headers/received
- headers/resentDate
- headers/resentFrom
- headers/resentSender
- headers/resentTo
- headers/resentCc
- headers/resentBcc
- headers/resentMessageId
- headers/date
- headers/from
- headers/sender
- headers/replyTo
- headers/to
- headers/cc
- headers/bcc
- headers/messageId
- headers/inReplyTo
- headers/references
- headers/subject
- headers/comments
- headers/keywords
- headers/mimeVersion
- headers/contentType
- headers/contentTransferEncoding
- headers/contentId
- headers/contentDescription
- headers/contentDisposition
- headers/contentLanguage
- headers/contentBase
- headers/contentLocation
- headers/contentFeatures
- headers/contentAlternative
- headers/contentMd5
- headers/contentDuration
- headers/autoSubmitted
- attachments/contentId
- attachments/encoding
- attachments/description
- attachments/contentType
- attachments/name
- attachments/sizeInBytes
- attachments/sizeInMB
- attachments/disposition
- attachments/fileinfo
- attachments/mime
- attachments/mimeType
- attachments/mimeEncoding
- attachments/fileExtension
Etape 4 : gérer la boîte à lettres
Après avoir défini les règles pour récupérer les messages, activé la tâche en cliquant sur le côté principal (gauche) du bouton et récupéré les messages soit en exécutant la tâche à partir de la ligne de commande ou de la crontab, la page d'aperçu de la boîte à lettres sera remplie interactivement avec les entêtes, les messages, les conversations et les contacts récupérés !
Voici l'affichage après quelques minutes :
Bien que la récupération de milliers d'entêtes de courriels ne prenne que quelques minutes, la récupération du contenu des courriels peut prendre de nombreuses heures en fonction de la taille de la boîte à lettres et des critères et filtres utilisés. |
Pendant que les conversations, les contacts et les messages sont récupérés, vous pouvez immédiatement catégoriser les contacts afin d'envoyer des courriels en masse vers les catégories, également avec des substitutions, et les gérer selon vos besoins.
La page des contacts d'un destinataire est accessible à partir des tables suivantes (ou des pages) :
- conversations
- lire le courriel (champ from)
- contacts
Une page de contact ressemble à ceci, pour la modifier cliquer sur le bouton Edit comme sur l'image, puis cliquer sur validate et ajouter une ou plusieurs catégories :
Cette page est créée automatiquement par l'extension en se basant sur les contacts reçus et envoyés, complétée grâce à l'analyse syntaxique avec le nom, les dates de première et dernière visite, les langues, et plus encore.
Etape 5 : créer des agents courriel supplémentaires
Un agent courriel (mailer) est un programme qui envoie les messages courriel. Il peut se trouver sur le serveur (tel que sendmail) ou être fourni en tant que SaaS comme SendGrid, mailgun et autres.
Grâce à l'intégration de l'agent Symfony, ContactManager prend en charge tous les fournisseurs reconnus par Symfony
Ils peuvent être utilisés pour envoyer des messages courriels en masse et supportent les modèles natifs et les substitutions.
Pour déclarer un agent supplémentaire (sendmail ou un fournisseurs tiers) aller sur la page ContactManager:Mailers, choisir le fournisseur et lui assigner un nom en utilisant le formulaire suivant.
Une fois la page créée, elle affiche un tableau modifiable :
Etape 6 : définir les données confidentielles des agents créés
Chaque agent courriel peut utiliser SMTP, HTTP et (ou) l'API transport, et nécessite son ensemble de données confidentielles spécifiques, en fonction de la table suivante.
| Fournisseur | SMTP | HTTP | API |
|---|---|---|---|
| Amazon SES | username/password | access_key/secret_key | access_key/secret_key |
| Gmail | username/app-password | n/a | n/a |
| Mandrill | username/password | KEY | KEY |
| Mailgun | username/password | KEY/DOMAIN | KEY/DOMAIN |
| Mailjet | access_key/secret_key | n/a | access_key/secret_key |
| Postmark | ID | n/a | KEY |
| Sendgrid | KEY | n/a | KEY |
| Sendinblue | username/password | n/a | KEY |
| OhMySMTP | API_TOKEN | n/a | API_TOKEN |
(source : https://symfony.com/doc/5.x/mailer.html)
De même ContactManager va rechercher un objet dans LocalSettings.php avec la structure suivante.
$wgContactManagerAMAZON = [
'mailer_1' => [
'smtp' => [
'username' => '',
'password' => ''
],
'http' => [
'access_key' => '',
'secret_key' => ''
],
'api' => [
'access_key' => '',
'secret_key' => ''
]
],
// ...
];
// ...
$wgContactManagerSENDGRID = [
'mailer_2' => [
'smtp' => [
'username' => '',
'password' => '',
],
'api' => [
'KEY' => '',
]
],
// ...
];
où $wgContactManagerAMAZON est le nom du paramètre global composé avec le nom du fournisseur en majuscules comme suffixe, mailer_n est le nom du fournisseur choisi, et les clés nécessaires reflètent le tableau ci-dessus pour chacun des fournisseurs et le transport.
C'est pourquoi l'approche est d'utiliser un objet pour chaque fournisseur, chacun d'eux contenant un ou plusieurs comptes, pour une meilleure lisibilité par rapport à l'utilisation d'un objet unique qui les contiendrait tous.
Attention : actuellement seules les substitutions des propriétés du schéma du destinataire sont prises en charge en utilisant SendGrid |
Etape 7 : envoyer des courriels en masse aux destinataires de la conversation ou aux contacts des catégories
Aller sur la page ContactManager:Compose, sélectionner une boîte à lettres et entrer une catégorie de test (avec des articles correspondant aux contacts de ContactManager comme expliqué à l'étape 4, ou avec tout schéma de VisualData qui comprend une propriété type de courriel) dans le champ catégories bcc.
Le formulaire ci-dessous permet de :
- envoyer du courriel en utilisant différents agents
- sélectionner à partir des champs enregistrés sous chaque agent
- sélectionner les destinataires existants pour
to,ccetbccavec l'auto-complétion et ajouter de nouveaux destinataires. - envoyer vers les catégories de contacts
- exclure des destinataires particuliers d'une catégorie
- choisir entre plain-text et html (plain-text sera encapsulé dans un modèle Twig à la différence de html)
- choisir un modèle Twig (si le type du contenu est du texte)
- ajouter des pièces jointes (non encore testé ni complètement implémenté)
- définir le décalage et la limite lors de l'envoi vers une grande quantité de destinataires
Les remplacements, dans le formulaire %first_name% (basé sur le schéma associé à chaque destinataire) sont autorisés uniquement en utilisant un agent (actuellement sendgrid) puisqu'ils sont effectués après l'envoi du courriel, ceci afin d'éviter d'envoyer à partir du serveur Mediawiki, un courriel pour chaque destinataire.
Pour la même raison, les substitutions de propriétés du schéma ne sont pas autorisées dans le modèle Twig, qui est utilisé comme enveloppe commune pour le contenu du corps.
Le même formulaire est également utilisé dans une fenêtre contextuelle quand la réponse est faite depuis la boîte de réception, ou lors de l'envoi du courriel aux participants de la conversation !
Droits et privilèges
Groupes
L'extension crée les groupes suivants : (ils peuvent être assignés aux utilisateurs via la page spéciale standard Special:UserRights). Seuls les utilisateurs de ces groupes peuvent créer les tâches de ContactManager, et voir les liens dans le panneau latéral de l'interface utilisateur. Néanmoins, cela n'empêche pas d'accéder aux pages concernées et à l'espace de noms de ContactManager. Si vous devez les protéger, utiliser Extension:PageOwnership.
| Groupe | Description |
|---|---|
contactmanager-admin |
permettre aux utilisateurs de gérer les boîtes à lettres et de parcourir le suivi |
L'extension crée les droits utilisateur suivants.
| Droit | Description |
|---|---|
contactmanager-can-manage-mailboxes |
peut gérer les boîtes à lettres |
contactmanager-can-browse-tracking |
peut voir le suivi |
Droits des groupes
| Groupe | contactmanager-can-manage-mailboxes | contactmanager-can-browse-tracking |
|---|---|---|
sysop |
v | v |
bureaucrat |
v | v |
contactmanager-admin |
v | v |
Problèmes connus
Les conversations du tableau des conversations ne peuvent pas être recherchées à l'aide du nom des participants si leur nombre dépasse la limite (Ajax est utilisé pour la navigation). Cela se produit parce que le nom des participants est récupéré à l'aide d'un modèle, avec une requête supplémentaire à l'intérieur, après quoi la requête principale est traitée. Peut être corrigé uniquement si Extension:VisualData prend en charge les jointures dans les requêtes, ce qu'il ne fait pas actuellement.
Feuille de route
suivi du courriel (quand utilisé avec des agents)implémentation des pièces jointes en ligne- pièces jointes en ligne avec TinyMCE
- intégration de Twilio
Support et bogues
Pour un support professionnel veuillez écrire à cette adresse courriel
Voir aussi
- Stable extensions/fr
- Hook extensions/fr
- Special page extensions/fr
- BeforeCreateEchoEvent extensions/fr
- BeforeInitialize extensions/fr
- BeforePageDisplay extensions/fr
- EchoGetBundleRules extensions/fr
- LoadExtensionSchemaUpdates extensions/fr
- ParserFirstCallInit extensions/fr
- SkinBuildSidebar extensions/fr
- VisualData::OnFormSubmit extensions/fr
- GPL licensed extensions/fr
- Extensions in Wikimedia version control/fr
- All extensions/fr
