diff --git a/lib/classes/module/console/systemMailCheck.class.php b/lib/classes/module/console/systemMailCheck.class.php
new file mode 100644
index 0000000000..60449227d4
--- /dev/null
+++ b/lib/classes/module/console/systemMailCheck.class.php
@@ -0,0 +1,151 @@
+setDescription('Check if email addresses are unique (mandatory since 3.5)');
+ $this->addOption('list'
+ , 'l'
+ , null
+ , 'List all bad accounts instead of the interactive mode'
+ );
+
+ return $this;
+ }
+
+ public function execute(InputInterface $input, OutputInterface $output)
+ {
+
+ $appbox = appbox::get_instance();
+
+ $output->writeln("Processing...");
+
+ $bad_users = User_Adapter::get_wrong_email_users($appbox);
+
+ foreach ($bad_users as $email => $users)
+ {
+ if ($input->getOption('list'))
+ {
+ $this->write_infos($email, $users, $output, $appbox);
+ }
+ elseif ($this->manage_group($email, $users, $output, $appbox) === false)
+ {
+ break;
+ }
+
+ $output->writeln("");
+ }
+
+ $output->write('Finished !', true);
+
+ return;
+ }
+
+ protected function manage_group($email, $users, $output, $appbox)
+ {
+ $is_stopped = false;
+
+ while (!$is_stopped)
+ {
+ $this->write_infos($email, $users, $output, $appbox);
+
+ $dialog = $this->getHelperSet()->get('dialog');
+
+ do
+ {
+ $question = 'What should I do ? '
+ . 'continue (C), detach from mail (d), or stop (s)';
+
+ $continue = mb_strtolower($dialog->ask($output, $question, 'C'));
+ }
+ while (!in_array($continue, array('c', 'd', 's')));
+
+
+ if ($continue == 's')
+ {
+ return false;
+ }
+ elseif ($continue == 'c')
+ {
+ return true;
+ }
+ elseif ($continue == 'd')
+ {
+ $dialog = $this->getHelperSet()->get('dialog');
+
+ $id = $dialog->ask($output, 'Which id ?', '');
+
+ try
+ {
+ $tmp_user = User_Adapter::getInstance($id, $appbox);
+
+ if ($tmp_user->get_email() != $email)
+ {
+ throw new Exception('Invalid user');
+ }
+
+ $tmp_user->set_email(null);
+
+ unset($users[$id]);
+ }
+ catch (Exception $e)
+ {
+ $output->writeln('Wrong id');
+ }
+ }
+
+ if (count($users) <= 1)
+ {
+ $output->writeln(sprintf("\n%s fixed !", $email));
+ $is_stopped = true;
+ }
+ }
+
+ return true;
+ }
+
+ protected function write_infos($email, $users, $output, $appbox)
+ {
+ $output->writeln($email);
+
+ foreach ($users as $user)
+ {
+ $output->writeln(
+ sprintf(
+ "\t %5d %40s %s"
+ , $user->get_id()
+ , $user->get_display_name()
+ , $user->get_last_connection()->format('Y m d')
+ )
+ );
+ }
+ }
+
+}