Envoyer un mail à Redmine pour créer une issue

De Analyse Développement Hacking
Sauter à la navigation Sauter à la recherche

Glider.png

Le wiki : Accueil - Administrateur - Bureautique - Développeur - Intégrateur - Marketing - Multimédia - Objets numériques - Jeux - We make Hack

Le site : Accueil du site - Annuaire - Blog - Forum - Outils - Utilisateur
Le FTP : Accueil du FTP - Le privatebin : Accueil du privatebin
Le Redmine : Accueil du Redmine

Envoyer un mail à Redmine pour créer une issue

Redmine permet l'envoi de mails de notification suite à la création de nouveaux tickets ou de mise à jour des tickets.
Redmine permet également la réception de mails pour créer de nouveaux tickets et mettre à jour de nouveaux tickets.
Ce tutoriel permet d'établir une connexion IMAP avec un serveur de messagerie pour lire les mails avec un script qui va créer une nouvelle issue dans Redmine pour chaque mail lu.
Les mails traités par Redmine ne seront pas supprimés du serveur de messagerie mais marqués comme lu.
Des paramètres incorrects dans un mail ne permettrons pas la création du ticket Redmine et vous ne recevrez aucun rebond ou information sur ce qui aura entraîné un dysfonctionnement.
Il est facilement possible de connaître les mails qui n'auront pas entraînés la création d'une issue en les déplaçant vers un dossier "Ko".

Méthodologie

Trois méthodes permettent de récupérer les mails pour les transformer en issues.
Lire les mails à partir de l'entrée standard.
Avantages : Suffisant pour des tests.
Inconvénients : Lent car l'environnement est rechargé à chaque fois qu'un mail est lu, nécessite une configuration sur le MTA. (Par exemple, Postfix, Sendmail, ...)
Transférer des mails depuis votre serveur de messagerie.
Avantages : Fonctionne avec un serveur de messagerie distant, les e-mails sont traités instantanément, rapidement. (Pas de rechargement de l'environnement.)
Inconvénients : Nécessite une configuration sur l'agent de transfert de courrier.
Récupérer des mails depuis un serveur IMAP ou POP3.
Avantages : Facile à installer, pas besoin de configurer votre MTA, fonctionne avec un serveur de messagerie distant.
Inconvénients : Les mails ne sont pas synchronisés en continue. Les tickets ne sont donc pas créés instantanément. Une tâche cron doit être ajoutée pour lire les mails périodiquement.

Prérequis

Configurer Redmine pour recevoir des mails nécessite un accès à la ligne de commande du système et une connaissance du shell et de cron au niveau du système.
Posséder les accès à un compte mail sur un serveur de mail IMAP.

Générer une clé depuis l'administration de Redmine

Générer une clé depuis l'administration / Configuration / Mail entrant

Configuration du Firewall

# Configurer le Firewall pour laisser sortir les connexions TCP sur le port IMAP 143.
sudo iptables -A INPUT -p tcp -m multiport --dports 143 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m multiport --dports 143 -m state --state NEW,ESTABLISHED -j ACCEPT

Administration du serveur

Administrer redmine avec son utilisateur dédié

# Se connecter au serveur.
# S'identifier avec l'utilisateur en charge d'administrer Redmine :
su - redmine
Mot de passe
# Se positionner à la racine du projet Redmine :
cd /opt/redmine
# Se positionner à la racine du projet Redmine dans le cas d'une multi-installation :
cd /opt/redmine/projet-1
# Il semble inutile de sélectionner le Gemset :
cd ~
rvm list gemsets
rvm use gemset ruby-2.4.5@redmine-4.0-stable

Lister les scripts Redmine disponibles

# Lister les scripts Redmine disponibles :
RAILS_ENV="production" rake -T redmine
# Affiche :
rake redmine:attachments:move_to_subdirectories # Moves attachments stored at the root of the file directory (ie
rake redmine:attachments:prune # Removes uploaded files left unattached after one day
rake redmine:attachments:update_digests # Updates attachment digests to SHA256
rake redmine:email:read # Read an email from standard input
rake redmine:email:receive_imap # Read emails from an IMAP server
rake redmine:email:receive_pop3 # Read emails from an POP3 server
rake redmine:email:test[login] # Send a test email to the user with the provided login name
rake redmine:fetch_changesets # Fetch changesets from the repositories
rake redmine:load_default_data # Load Redmine default configuration data
rake redmine:migrate_dbms # FOR EXPERIMENTAL USE ONLY, Moves Redmine data from production database to the development database
rake redmine:migrate_from_mantis # Mantis migration script
rake redmine:migrate_from_trac # Trac migration script
rake redmine:permissions # List all permissions and the actions registered with them
rake redmine:plugins # Migrates and copies plugins assets
rake redmine:plugins:assets # Copies plugins assets into the public directory
rake redmine:plugins:migrate # Migrates installed plugins
rake redmine:plugins:test # Runs the plugins tests
rake redmine:plugins:test:functionals # Runs the plugins functional tests
rake redmine:plugins:test:integration # Runs the plugins integration tests
rake redmine:plugins:test:ui # Runs the plugins ui tests
rake redmine:plugins:test:units # Runs the plugins unit tests
rake redmine:send_reminders # Send reminders about issues due in the next days
rake redmine:tokens:prune # Removes expired tokens
rake redmine:watchers:prune # Removes watchers from what they can no longer view
Le script "redmine:email:receive_imap" nous permet une connexion à un serveur IMAP distant afin de lire les messages et de les convertir en une nouvelle issue Redmine.

Envoyer un mail de test

Envoyer un mail à l'aide d'un compte mail de test vers l'adresse mail qui sera relevée par Redmine.

Connexion STARTTLS avec le serveur IMAP

Il est possible d'utiliser la propriété starttls avec la valeur STARTTLS.
# Se positionner dans le projet contenant les fichiers de Redmine :
cd /opt/redmine/projet-1
# Lancer la commande de lecture des mails :
rake -f /opt/redmine/projet-1/Rakefile redmine:email:receive_imap RAILS_ENV="production" host=HOTE_SERVEUR_IMAP port=993 starttls=STARTTLS username=MAIL@DOMAIN.EXT password=LE_MOT_DE_PASSE --trace
# Affiche :
** Invoke redmine:email:receive_imap (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute redmine:email:receive_imap
# La tâche est en échec car la connexion au serveur n'a pas aboutie :
rake aborted!
Net::IMAP::Error: connection closed
/opt/redmine/.rvm/rubies/ruby-2.4.5/lib/ruby/2.4.0/net/imap.rb:1100:in `initialize'
...
/opt/redmine/.rvm/gems/ruby-2.4.5@redmine-4.0-stable/bin/ruby_executable_hooks:24:in `<main>'
Tasks: TOP => redmine:email:receive_imap

Connexion SSL avec le serveur IMAP

# La commande suivante permet bien la connexion à la boîte mail en IMAP.
# On observe que les messages non lu sont marqués comme lu.
# Malgré tout, aucune issue n'est créée.
rake -f Rakefile redmine:email:receive_imap RAILS_ENV="production" host=HOTE_SERVEUR_IMAP port=993 ssl=true username=MAIL@DOMAIN.EXT password=LE_MOT_DE_PASSE --trace
# Ajout de propriétés pour spécifier le projet, le tracker, autoriser l'override, spécifier un dossier pour y déplacer les messages qui ont pu créer une issue ou non.
# Aucune issue n'est créée et tous les messages sont déplacés vers LUKO.
rake -f Rakefile redmine:email:receive_imap RAILS_ENV="production" host=HOTE_SERVEUR_IMAP port=993 ssl=true username=MAIL@DOMAIN.EXT password=LE_MOT_DE_PASSE project=Support tracker=Assistance allow_override=tracker,priority move_on_success=LUOK move_on_failure=LUKO --trace

Autoriser les utilisateurs anonymes a créer une issue suite à un mail envoyé

# Dans le contexte d'un Redmine qui n'est pas public, j'ai retiré tous les droits du rôle Anonyme depuis Administration / Rôles et permissions / Anonyme.
# Il sera tout de même possible de créer une issue avec un envoi de mail par un utilisateur anonymisé en utilisant les deux paramètres unknown_user=accept et no_permission_check=1.
# Autoriser les utilisateurs anonymes a créer une issue par envoi de mail en ajoutant les deux paramètres unknown_user=accept et no_permission_check=1 :
rake -f Rakefile redmine:email:receive_imap RAILS_ENV="production" host=HOTE_SERVEUR_IMAP port=993 ssl=true username=MAIL@DOMAIN.EXT password=LE_MOT_DE_PASSE unknown_user=accept no_permission_check=1 project=Support tracker=Assistance allow_override=tracker,priority move_on_success=LUOK move_on_failure=LUKO --trace
Override des droits d'un utilisateur anonyme
# Pour autoriser un utilisateur anonyme a modifier le statut d'une issue suite à l'envoi d'un mail, adapter les droits dans Redmine depuis Administration / Rôles et permissions / Anonyme.
# Il ne semble pas judicieux d'autoriser le changement de statut d'une issue par un utilisateur anonyme.
# Le droit de fermer une issue devrait être réservé aux administrateurs et aux développeurs.
# Ajout de l'option ",status" dans l'override pour permettre la modification par mail du statut de l'issue. ( Ne devrait PAS fonctionner avec un rôle Anonyme limité. )
rake -f Rakefile redmine:email:receive_imap RAILS_ENV="production" host=HOTE_SERVEUR_IMAP port=993 ssl=true username=MAIL@DOMAIN.EXT password=LE_MOT_DE_PASSE unknown_user=accept no_permission_check=1 project=Support tracker=Assistance allow_override=tracker,priority,status move_on_success=LUOK move_on_failure=LUKO --trace
Utilisateur anonymisé tente de override les éléments d'une issue avec un rôle Anonyme autorisant uniquement la modification d'une issue. ( Ne fonctionne pas ! )
Utilisateur anonymisé tente de résoudre une issue. ( Ne fonctionnera pas ! Les droits par défaut ne permettent pas à Anonyme de fermer une issue. )
Idem pour les utilisateurs rapporteurs.

Objet du mail : Re: [#136]
Message Coucou.

Tracker:Anomalie
Priority:Bas
Status:Résolu
Utilisateur administrateur tente de fermer une issue et de modifier les paramètres d'une issue. ( Fonctionnera ! Un administrateur peut fermer une issue. )

Objet du mail : Re: [#137]
Message Résolution.

Tracker:Assistance
Priority:Normal
Status:Résolu
Un rôle développeur peut également override les propriétés, réouvrir une issue ou fermer l'issue. J'ai ajouté au rôle l'option "Modifier la demande".
Le workflow des droits semble être légèrement contradictoire en comparaison de ce que l'on observe en utilisant les rôles depuis Redmine directement.
Testé sur Redmine 4.0.3.stable.

Bibliographie

Documentation officielle pour recevoir des mails avec Redmine : https://www.redmine.org/projects/redmine/wiki/FrRedmineReceivingEmails

Documentation Visionduweb

Envoyer un mail pour créer une issue : https://wiki.visionduweb.fr/index.php?title=Envoyer_un_mail_à_Redmine_pour_créer_une_issue
Plugin That email log pour afficher les journaux des mails sortants : https://wiki.visionduweb.fr/index.php?title=Installer_Redmine_sur_Debian#That_email_logs
Plugin Email Fetcher pour utiliser un plugin afin de configurer la réception des mails : https://wiki.visionduweb.fr/index.php?title=Installer_Redmine_sur_Debian#redmine_email_fetcher

Documentation complémentaire

Configurer les mails sortants : https://www.redmine.org/projects/redmine/wiki/emailconfiguration
Configurer les e-mails entrants : https://docs.openproject.org/installation-and-operations/configuration/incoming-emails/
Créer une issue dans un projet spécifique en fonction du filtrage appliqué : https://superuser.com/questions/1477948/redmine-create-issues-into-multiple-projects-from-multiple-email-addresses
Allow creating of issues in private projects by anonymous/non member via email : https://www.redmine.org/issues/3584

Problématiques pouvant être rencontrées

No e-mail notification for non-members who are watchers : https://www.redmine.org/issues/11888

NAVIGATION

PARTICIPER ET PARTAGER

Bienvenue sur le wiki de Vision du Web.
De nombreuses pages sont partagées sur ce wiki.
Créer un compte utilisateur pour participer sur le wiki.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Utiliser la recherche interne du wiki pour trouver votre contenu.
La page de discussion de Visionduweb vous permet de poser une question.
Utiliser la recherche interne du site pour chercher dans tout le contenu.
Améliorer le contenu des pages avec vos retours depuis l'onglet discussion.
Ce contenu ne doit pas servir à nuire à autrui ou à un système informatique.
Protéger votre système Linux ou Windows avec cette page dédiée à la sécurité.

SOUTENIR CE WIKI

Soutenir le wiki avec un don en monnaie numérique :
AEON - Bitcoins - Bitcoins Cash - Bitcoins Gold - Bitcore - Blackcoins - Basic Attention Token - Bytecoins - Clams - Dash - Monero - Dogecoins - Ğ1 - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Gagner des Altcoins - Miner des Altcoins.