diff --git a/htdocs/includes/modules/mailings/banane.modules.php b/htdocs/includes/modules/mailings/banane.modules.php
new file mode 100644
index 00000000000..8725a4a0484
--- /dev/null
+++ b/htdocs/includes/modules/mailings/banane.modules.php
@@ -0,0 +1,196 @@
+
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * or see http://www.gnu.org/
+ */
+
+/**
+ * \file htdocs/includes/modules/mailings/banane.modules.php
+ * \ingroup mailing
+ * \brief Provides a list of recipients for mailing module
+ * \version $Revision$
+ */
+
+include_once DOL_DOCUMENT_ROOT.'/includes/modules/mailings/modules_mailings.php';
+
+
+/**
+ * \class mailing_banane
+ * \brief Class to manage a list of personalised recipients for mailing feature
+ */
+class mailing_banane extends MailingTargets
+{
+ var $name='ContactsByCompanyCategory';
+ // This label is used if no translation is found for key MailingModuleDescXXX where XXX=name is found
+ var $desc='Add contacts by company category';
+ var $require_admin=0;
+
+ var $require_module=array();
+ var $picto='contact';
+ var $db;
+
+
+ function mailing_banane($DB)
+ {
+ $this->db=$DB;
+ }
+
+
+ /**
+ * This is the main function that returns the array of emails
+ * @param mailing_id Id of mailing. No need to use it.
+ * @param filterarray Category
+ * @return int <0 if error, number of emails added if ok
+ */
+ function add_to_target($mailing_id,$filtersarray=array())
+ {
+ global $conf;
+
+ $target = array();
+
+ $sql = "SELECT sp.rowid, sp.email, sp.name, sp.firstname";
+ $sql.= " FROM ".MAIN_DB_PREFIX."socpeople as sp";
+ $sql.= ", ".MAIN_DB_PREFIX."categorie as c";
+ $sql.= ", ".MAIN_DB_PREFIX."categorie_societe as cs";
+ $sql.= " WHERE (sp.email IS NOT NULL AND sp.email != '')";
+ $sql.= " AND sp.entity = ".$conf->entity;
+ $sql.= " AND cs.fk_categorie = c.rowid";
+ $sql.= " AND cs.fk_societe = sp.fk_soc";
+
+ if ($filtersarray[0] <> 'all') $sql.= " AND c.label = '".$filtersarray[0]."'";
+ $sql.= " ORDER BY sp.name, sp.firstname";
+
+ $resql = $this->db->query($sql);
+ if ($resql)
+ {
+ $num = $this->db->num_rows($resql);
+ $i = 0;
+
+ while ($i < $num)
+ {
+ $obj= $this->db->fetch_object($resql);
+ $target[] = array(
+ 'email' => $obj->email,
+ 'name' => $obj->name,
+ 'firstname' => $obj->firstname,
+ 'other' => $other,
+ 'url' => ''.img_object('',"contact").''
+ );
+ $i++;
+ }
+ }
+
+ return parent::add_to_target($mailing_id, $target);
+ }
+
+
+ /**
+ * On the main mailing area, there is a box with statistics.
+ * If you want to add a line in this report you must provide an
+ * array of SQL request that returns two field:
+ * One called "label", One called "nb".
+ * @return array
+ */
+ function getSqlArrayForStats()
+ {
+ global $conf, $langs;
+
+ $statssql=array();
+ for ($i=0; $i<5; $i++) {
+ $statssql[$i] = "SELECT c.label, count(sp.rowid) AS nb";
+ $statssql[$i].= " FROM ".MAIN_DB_PREFIX."categorie as c";
+ $statssql[$i].= ", ".MAIN_DB_PREFIX."categorie_societe as cs";
+ $statssql[$i].= ", ".MAIN_DB_PREFIX."socpeople as sp";
+ $statssql[$i].= " WHERE (sp.email IS NOT NULL AND sp.email != '')";
+ $statssql[$i].= " AND sp.entity = ".$conf->entity;
+ $statssql[$i].= " AND cs.fk_categorie = c.rowid";
+ $statssql[$i].= " AND cs.fk_societe = sp.fk_soc";
+ $statssql[$i].= " GROUP BY c.label";
+ $statssql[$i].= " ORDER BY nb DESC";
+ $statssql[$i].= " LIMIT $i,1";
+ }
+
+ return $statssql;
+ }
+
+
+ /**
+ * Return here number of distinct emails returned by your selector.
+ * @return int
+ */
+ function getNbOfRecipients()
+ {
+ global $conf;
+
+ $sql = "SELECT count(distinct(sp.email)) AS nb";
+ $sql.= " FROM ".MAIN_DB_PREFIX."categorie as c";
+ $sql.= ", ".MAIN_DB_PREFIX."categorie_societe as cs";
+ $sql.= ", ".MAIN_DB_PREFIX."socpeople as sp";
+ $sql.= " WHERE (sp.email IS NOT NULL AND sp.email != '')";
+ $sql.= " AND sp.entity = ".$conf->entity;
+ $sql.= " AND cs.fk_categorie = c.rowid";
+ $sql.= " AND cs.fk_societe = sp.fk_soc";
+ // La requete doit retourner un champ "nb" pour etre comprise
+ // par parent::getNbOfRecipients
+ return parent::getNbOfRecipients($sql);
+ }
+
+ /**
+ * This is to add a form filter to provide variant of selector
+ * If used, the HTML select must be called "filter"
+ * @return string A html select zone
+ */
+ function formFilter()
+ {
+ global $conf, $langs;
+
+ $langs->load("companies");
+
+ $sql = "SELECT c.label, count(distinct(sp.email)) AS nb";
+ $sql.= " FROM ".MAIN_DB_PREFIX."categorie as c";
+ $sql.= ", ".MAIN_DB_PREFIX."categorie_societe as cs";
+ $sql.= ", ".MAIN_DB_PREFIX."socpeople as sp";
+ $sql.= " WHERE (sp.email IS NOT NULL AND sp.email != '')";
+ $sql.= " AND sp.entity = ".$conf->entity;
+ $sql.= " AND cs.fk_categorie = c.rowid";
+ $sql.= " AND cs.fk_societe = sp.fk_soc";
+ $sql.= " GROUP BY c.label";
+ $sql.= " ORDER BY c.label";
+
+ $resql = $this->db->query($sql);
+
+ $s='';
+ $s.='';
+
+ return $s;
+ }
+
+}
+
+?>
\ No newline at end of file
diff --git a/htdocs/langs/en_US/mails.lang b/htdocs/langs/en_US/mails.lang
index fa8fb114495..c831a5a129b 100644
--- a/htdocs/langs/en_US/mails.lang
+++ b/htdocs/langs/en_US/mails.lang
@@ -77,6 +77,8 @@ MailingModuleDescFundationMembers=Foundation members with emails
MailingModuleDescEmailsFromFile=EMails from a text file (email;lastname;firstname;other)
MailingModuleDescContactsCategories=Third parties with emails (by category)
MailingModuleDescDolibarrContractsLinesExpired=Third parties with expired contract's lines
+MailingModuleDescContactsByCompanyCategory=Contacts with emails by third parties category
+MailingModuleDescMembersCategories=Foundation members with emails (by categories)
LineInFile=Line %s in file
RecipientSelectionModules=Defined requests for recipient's selection
diff --git a/htdocs/langs/fr_FR/mails.lang b/htdocs/langs/fr_FR/mails.lang
index f195ae63033..27c6182271d 100644
--- a/htdocs/langs/fr_FR/mails.lang
+++ b/htdocs/langs/fr_FR/mails.lang
@@ -77,6 +77,8 @@ MailingModuleDescFundationMembers=Adhérents avec e-mail
MailingModuleDescEmailsFromFile=EMails issus d'un fichier texte (email;nom;prenom;autre)
MailingModuleDescContactsCategories=Tiers avec e-mail (par catégorie)
MailingModuleDescDolibarrContractsLinesExpired=Tiers avec lignes de contrats de services expirées
+MailingModuleDescContactsByCompanyCategory=Contacts avec e-mail par catégorie de tiers
+MailingModuleDescMembersCategories=Adhérents avec e-mail (par catégorie)
LineInFile=Ligne %s du fichier
RecipientSelectionModules=Modules de sélection des destinataires