diff --git a/htdocs/core/modules/mailings/thirdparties_clients.modules.php b/htdocs/core/modules/mailings/thirdparties_clients.modules.php
new file mode 100644
index 00000000000..060c993460f
--- /dev/null
+++ b/htdocs/core/modules/mailings/thirdparties_clients.modules.php
@@ -0,0 +1,218 @@
+
+ *
+* This file is an example to follow to add your own email selector inside
+* the Dolibarr email tool.
+* Follow instructions given in README file to know what to change to build
+* your own emailing list selector.
+* Code that need to be changed in this file are marked by "CHANGE THIS" tag.
+*/
+
+/**
+ * \file htdocs/core/modules/mailings/thirdparties_clients.modules.php
+ * \ingroup mailing
+ * \brief File of class to offer a selector of emailing targets with Rule 'services expired'.
+ */
+include_once DOL_DOCUMENT_ROOT.'/core/modules/mailings/modules_mailings.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
+
+
+/**
+ * Class to offer a selector of emailing targets with Rule 'services expired'.
+ */
+class mailing_thirdparties_clients extends MailingTargets
+{
+ var $name='DolibarrClients';
+ // This label is used if no translation is found for key XXX neither MailingModuleDescXXX where XXX=name is found
+ var $desc='Third parties by client';
+ var $require_admin=0;
+
+ var $require_module=array('contrat');
+ var $picto='company';
+ var $db;
+ var $arrayofclient=array();
+
+
+ /**
+ * Constructor
+ *
+ * @param DoliDB $db Database handler
+ */
+ function __construct($db)
+ {
+ global $conf, $langs;
+
+ $this->db=$db;
+ $langs->load("companies");
+
+ $this->arrayofclient=array();
+
+ $this->arrayofclient= array(2 => $langs->trans('Prospect'), 1 => $langs->trans('Customer'), 0 => $langs->trans('NorProspectNorCustomer'));
+ }
+
+
+ /**
+ * This is the main function that returns the array of emails
+ *
+ * @param int $mailing_id Id of mailing. No need to use it.
+ * @param array $filtersarray If you used the formFilter function. Empty otherwise.
+ * @return int <0 if error, number of emails added if ok
+ */
+ function add_to_target($mailing_id,$filtersarray=array())
+ {
+ $target = array();
+
+ // ----- Your code start here -----
+
+ $cibles = array();
+ $j = 0;
+
+ foreach($filtersarray as $key)
+ {
+ $clientstatus=$key;
+ }
+
+ $now=dol_now();
+
+ // La requete doit retourner: id, email, name
+ $sql = "SELECT s.rowid as id, s.email, s.nom as name";
+ $sql.= " FROM ".MAIN_DB_PREFIX."societe as s";
+ $sql.= " WHERE s.entity IN (".getEntity('societe', 1).")";
+ $sql.= " AND s.email NOT IN (SELECT email FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE fk_mailing=".$mailing_id.")";
+ if ($clientstatus != -1)
+ {
+ $sql.= " AND s.client= '".$clientstatus."'";
+ }
+ if (isset($_POST["filter_status"]) && $_POST["filter_status"] == '1') $sql.= " AND s.status=1";
+ if (isset($_POST["filter_status"]) && $_POST["filter_status"] == '0') $sql.= " AND s.status=0";
+ $sql.= " ORDER BY s.email";
+
+ // Stocke destinataires dans cibles
+ $result=$this->db->query($sql);
+ if ($result)
+ {
+ $num = $this->db->num_rows($result);
+ $i = 0;
+
+ dol_syslog(get_class($this)."::add_to_target ".$num." targets found");
+
+ $old = '';
+ while ($i < $num)
+ {
+ $obj = $this->db->fetch_object($result);
+ if ($old <> $obj->email)
+ {
+ $cibles[$j] = array(
+ 'email' => $obj->email,
+ 'lastname' => $obj->name, // For thirdparties, lastname must be name
+ 'firstname' => '', // For thirdparties, firstname is ''
+ 'other' =>
+ ('ContactLine='.$obj->cdid),
+ 'source_url' => $this->url($obj->id),
+ 'source_id' => $obj->id,
+ 'source_type' => 'thirdparty'
+ );
+ $old = $obj->email;
+ $j++;
+ }
+
+ $i++;
+ }
+ }
+ else
+ {
+ dol_syslog($this->db->lasterror());
+ $this->error=$this->db->lasterror();
+ return -1;
+ }
+
+ // ----- Your code end here -----
+
+ return parent::add_to_target($mailing_id, $cibles);
+ }
+
+
+ /**
+ * 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 Array with SQL requests
+ */
+ function getSqlArrayForStats()
+ {
+
+ //var $statssql=array();
+ //$this->statssql[0]="SELECT field1 as label, count(distinct(email)) as nb FROM mytable WHERE email IS NOT NULL";
+
+ return array();
+ }
+
+
+ /**
+ * Return here number of distinct emails returned by your selector.
+ * For example if this selector is used to extract 500 different
+ * emails from a text file, this function must return 500.
+ *
+ * @param string $sql SQL request to use to count
+ * @return int Number of recipients
+ */
+ function getNbOfRecipients($sql='')
+ {
+ $now=dol_now();
+
+ // Example: return parent::getNbOfRecipients("SELECT count(*) as nb from dolibarr_table");
+ // Example: return 500;
+ $sql = "SELECT count(*) as nb";
+ $sql.= " FROM ".MAIN_DB_PREFIX."societe as s";
+ $sql.= " WHERE s.entity IN (".getEntity('societe', 1).")";
+ $sql.= " AND s.email != ''";
+
+ $a=parent::getNbOfRecipients($sql);
+
+ return $a;
+ }
+
+ /**
+ * 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 $langs;
+
+ $s='';
+ $s.=' ';
+ $s.=$langs->trans("Status");
+ $s.=': ';
+ return $s;
+ }
+
+
+ /**
+ * Can include an URL link on each record provided by selector shown on target page.
+ *
+ * @param int $id ID
+ * @return string Url link
+ */
+ function url($id)
+ {
+ return ''.img_object('',"company").'';
+ }
+
+}
+