Browse Source

Prepare code to use different SMTP servers.

Laurent Destailleur 8 years ago
parent
commit
3da0aea168
3 changed files with 380 additions and 367 deletions
  1. 3 1
      htdocs/admin/mails_templates.php
  2. 2 2
      htdocs/comm/mailing/card.php
  3. 375 364
      htdocs/core/class/CMailFile.class.php

+ 3 - 1
htdocs/admin/mails_templates.php

@@ -27,7 +27,7 @@
  */
 
 /**
- *	    \file       htdocs/admin/dict.php
+ *	    \file       htdocs/admin/mails_templates.php
  *		\ingroup    setup
  *		\brief      Page to administer data tables
  */
@@ -119,12 +119,14 @@ $formmail=new FormMail($db);
 if (empty($conf->global->MAIN_EMAIL_TEMPLATES_FOR_OBJECT_LINES))
 {
     $tmp=$formmail->getAvailableSubstitKey('form');
+    $tmp['__(AnyTransKey)__']='__(AnyTransKey)__';
     $helpsubstit = $langs->trans("AvailableVariables").':<br>'.implode('<br>', $tmp);
     $helpsubstitforlines = $langs->trans("AvailableVariables").':<br>'.implode('<br>', $tmp);
 }
 else
 {
     $tmp=$formmail->getAvailableSubstitKey('formwithlines');
+    $tmp['__(AnyTransKey)__']='__(AnyTransKey)__';
     $helpsubstit = $langs->trans("AvailableVariables").':<br>'.implode('<br>', $tmp);
     $tmp=$formmail->getAvailableSubstitKey('formforlines');
     $helpsubstitforlines = $langs->trans("AvailableVariables").':<br>'.implode('<br>', $tmp);

+ 2 - 2
htdocs/comm/mailing/card.php

@@ -787,8 +787,8 @@ else
 			if ($action == 'sendall')
 			{
                 // Define message to recommand from command line
-
-				$sendingmode=$conf->global->MAIN_MAIL_SENDMODE;
+				$sendingmode=$conf->global->EMAILING_MAIL_SENDMODE;
+				if (empty($sendingmode)) $sendingmode=$conf->global->MAIN_MAIL_SENDMODE;
 				if (empty($sendingmode)) $sendingmode='mail';	// If not defined, we use php mail function
 
 				// MAILING_NO_USING_PHPMAIL may be defined or not.

+ 375 - 364
htdocs/core/class/CMailFile.class.php

@@ -31,16 +31,20 @@
 
 /**
  *	Class to send emails (with attachments or not)
- *  Usage: $mailfile = new CMailFile($subject,$sendto,$replyto,$message,$filepath,$mimetype,$filename,$cc,$ccc,$deliveryreceipt,$msgishtml,$errors_to,$css,$trackid);
+ *  Usage: $mailfile = new CMailFile($subject,$sendto,$replyto,$message,$filepath,$mimetype,$filename,$cc,$ccc,$deliveryreceipt,$msgishtml,$errors_to,$css,$trackid,$moreinheader,$sendcontext);
  *         $mailfile->sendfile();
  */
 class CMailFile
 {
+	public $sendcontext;
+	public $sendmode;
+	public $sendsetup;
+	
 	var $subject;      	// Topic:       Subject of email
 	var $addr_from;    	// From:		Label and EMail of sender (must include '<>'). For example '<myemail@example.com>' or 'John Doe <myemail@example.com>' or '<myemail+trackingid@example.com>'). Note that with gmail smtps, value here is forced by google to account (but not the reply-to).
-	                   	// Sender:      Who send the email ("Sender" has sent emails on behalf of "From").
-	                   	//              Use it when the "From" is an email of a domain that is a SPF protected domain, and sending smtp server is not this domain. In such case, add Sender field with an email of the protected domain.
-	                   	// Return-Path: Email where to send bounds.
+	// Sender:      Who send the email ("Sender" has sent emails on behalf of "From").
+	//              Use it when the "From" is an email of a domain that is a SPF protected domain, and sending smtp server is not this domain. In such case, add Sender field with an email of the protected domain.
+	// Return-Path: Email where to send bounds.
 	var $reply_to;		// Reply-To:	Email where to send replies from mailer software (mailer use From if reply-to not defined, Gmail use gmail account if reply-to not defined)
 	var $errors_to;		// Errors-To:	Email where to send errors.
 	var $addr_to;
@@ -77,13 +81,13 @@ class CMailFile
 	var $html_images=array();
 	var $images_encoded=array();
 	var $image_types = array('gif'  => 'image/gif',
-                           'jpg'  => 'image/jpeg',
-                           'jpeg' => 'image/jpeg',
-                           'jpe'  => 'image/jpeg',
-                           'bmp'  => 'image/bmp',
-                           'png'  => 'image/png',
-                           'tif'  => 'image/tiff',
-                           'tiff' => 'image/tiff');
+			'jpg'  => 'image/jpeg',
+			'jpeg' => 'image/jpeg',
+			'jpe'  => 'image/jpeg',
+			'bmp'  => 'image/bmp',
+			'png'  => 'image/png',
+			'tif'  => 'image/tiff',
+			'tiff' => 'image/tiff');
 
 
 	/**
@@ -104,14 +108,22 @@ class CMailFile
 	 *	@param	string	$css                 Css option
 	 *	@param	string	$trackid             Tracking string (contains type and id of related element)
 	 *  @param  string  $moreinheader        More in header. $moreinheader must contains the "\r\n" (TODO not supported for other MAIL_SEND_MODE different than 'phpmail' and 'smtps' for the moment)
-	 *  @param  string  $sendingcontext      'standard', 'emailing', ...
+	 *  @param  string  $sendcontext      	 'standard', 'emailing', ...
 	 */
-	function __construct($subject,$to,$from,$msg,$filename_list=array(),$mimetype_list=array(),$mimefilename_list=array(),$addr_cc="",$addr_bcc="",$deliveryreceipt=0,$msgishtml=0,$errors_to='',$css='',$trackid='',$moreinheader='',$sendingcontext='standard')
+	function __construct($subject,$to,$from,$msg,$filename_list=array(),$mimetype_list=array(),$mimefilename_list=array(),$addr_cc="",$addr_bcc="",$deliveryreceipt=0,$msgishtml=0,$errors_to='',$css='',$trackid='',$moreinheader='',$sendcontext='standard')
 	{
 		global $conf, $dolibarr_main_data_root;
 
-		$this->sendingcontext = $sendingcontext;
+		$this->sendcontext = $sendcontext;
 		
+		$this->sendmode = '';
+		if ($this->sendcontext == 'emailing') $this->sendmode = $conf->global->EMAILING_MAIL_SENDMODE;	
+		if (empty($this->sendmode)) $this->sendmode=$conf->global->MAIN_MAIL_SENDMODE;
+		if (empty($this->sendmode)) $this->sendmode='mail';
+		
+		$this->sendsetup = array();
+		
+
 		// We define end of line (RFC 821).
 		$this->eol="\r\n";
 		// We define end of line for header fields (RFC 822bis section 2.3 says header must contains \r\n).
@@ -132,17 +144,14 @@ class CMailFile
 		// On defini alternative_boundary
 		$this->alternative_boundary = 'mul_'.dol_hash(uniqid("dolibarr3"), 3);	// Force md5 hash (does not contains special chars)
 
-		// If ending method not defined
-		if (empty($conf->global->MAIN_MAIL_SENDMODE)) $conf->global->MAIN_MAIL_SENDMODE='mail';
-
-		dol_syslog("CMailFile::CMailfile: MAIN_MAIL_SENDMODE=".$conf->global->MAIN_MAIL_SENDMODE." charset=".$conf->file->character_set_client." from=$from, to=$to, addr_cc=$addr_cc, addr_bcc=$addr_bcc, errors_to=$errors_to, trackid=$trackid sendingcontext=$sendingcontext", LOG_DEBUG);
+		dol_syslog("CMailFile::CMailfile: sendmode=".$this->sendmode." charset=".$conf->file->character_set_client." from=$from, to=$to, addr_cc=$addr_cc, addr_bcc=$addr_bcc, errors_to=$errors_to, trackid=$trackid sendcontext=$sendcontext", LOG_DEBUG);
 		dol_syslog("CMailFile::CMailfile: subject=$subject, deliveryreceipt=$deliveryreceipt, msgishtml=$msgishtml", LOG_DEBUG);
 
 		if (empty($subject))
 		{
-            dol_syslog("CMailFile::CMailfile: Try to send an email with empty subject");
-            $this->error='ErrorSubjectIsRequired';
-            return;
+			dol_syslog("CMailFile::CMailfile: Try to send an email with empty subject");
+			$this->error='ErrorSubjectIsRequired';
+			return;
 		}
 
 		// Detect if message is HTML (use fast method)
@@ -163,11 +172,11 @@ class CMailFile
 		{
 			$this->html = $msg;
 
-            if (! empty($conf->global->MAIN_MAIL_ADD_INLINE_IMAGES_IF_IN_MEDIAS))
-            {
-                $findimg = $this->findHtmlImages($dolibarr_main_data_root.'/medias');
-            }
-            
+			if (! empty($conf->global->MAIN_MAIL_ADD_INLINE_IMAGES_IF_IN_MEDIAS))
+			{
+				$findimg = $this->findHtmlImages($dolibarr_main_data_root.'/medias');
+			}
+
 			// Define if there is at least one file
 			if ($findimg)
 			{
@@ -196,7 +205,7 @@ class CMailFile
 		if (! empty($conf->global->MAIN_MAIL_AUTOCOPY_TO)) $addr_bcc.=($addr_bcc?', ':'').$conf->global->MAIN_MAIL_AUTOCOPY_TO;
 
 		// Action according to choosed sending method
-		if ($conf->global->MAIN_MAIL_SENDMODE == 'mail')
+		if ($this->sendmode == 'mail')
 		{
 			// Use mail php function (default PHP method)
 			// ------------------------------------------
@@ -216,9 +225,9 @@ class CMailFile
 			$this->addr_bcc = $addr_bcc;
 			$this->deliveryreceipt = $deliveryreceipt;
 			$this->trackid = $trackid;
-			
+				
 			$smtp_headers = $this->write_smtpheaders();
-            if (! empty($moreinheader)) $smtp_headers.=$moreinheader;   // $moreinheader contains the \r\n
+			if (! empty($moreinheader)) $smtp_headers.=$moreinheader;   // $moreinheader contains the \r\n
 
 			// Define mime_headers
 			$mime_headers = $this->write_mimeheaders($filename_list, $mimefilename_list);
@@ -254,7 +263,7 @@ class CMailFile
 			$this->message.= $text_body . $files_encoded;
 			$this->message.= "--" . $this->mixed_boundary . "--" . $this->eol;
 		}
-		else if ($conf->global->MAIN_MAIL_SENDMODE == 'smtps')
+		else if ($this->sendmode == 'smtps')
 		{
 			// Use SMTPS library
 			// ------------------------------------------
@@ -310,7 +319,7 @@ class CMailFile
 			$this->smtps=$smtps;
 		}
 		// TODO not stable, in progress
-		else if ($conf->global->MAIN_MAIL_SENDMODE == 'phpmailer')
+		else if ($this->sendmode == 'phpmailer')
 		{
 			// Use PHPMailer library
 			// ------------------------------------------
@@ -325,7 +334,7 @@ class CMailFile
 			$this->phpmailer->SetReplyTo($this->getValidAddress($from,0,1));   // Set property with this->phpmailer->setReplyTo after constructor if you want to use another value than the From
 			// TODO Add trackid into smtp header
 			// TODO if (! empty($moreinheader)) ...
-					
+				
 			if (! empty($this->html))
 			{
 				if (!empty($css))
@@ -362,94 +371,94 @@ class CMailFile
 			$this->phpmailer->setErrorsTo($errors_to);
 			$this->phpmailer->setDeliveryReceipt($deliveryreceipt);
 		}
-        else if ($conf->global->MAIN_MAIL_SENDMODE == 'swiftmailer')
-        {
-            // Use Swift Mailer library
-            // ------------------------------------------
-            
-            $host = dol_getprefix('email');
-            
-            require_once DOL_DOCUMENT_ROOT.'/includes/swiftmailer/lib/swift_required.php';
-            // Create the message
-            $this->message = Swift_Message::newInstance();
-
-            // Adding a trackid header to a message
-            $headers = $this->message->getHeaders();
-            $headers->addTextHeader('X-Dolibarr-TRACKID', $trackid);
-            $headerID = time() . '.swiftmailer-dolibarr-' . $trackid . '@' . $host;
-            $msgid = $headers->get('Message-ID');
-            $msgid->setId($headerID);
-            $headers->addIdHeader('References', $headerID);
-            // TODO if (! empty($moreinheader)) ...
-            
-            // Give the message a subject
-            $this->message->setSubject($this->encodetorfc2822($subject));
-
-            // Set the From address with an associative array
-            //$this->message->setFrom(array('john@doe.com' => 'John Doe'));
-            if (! empty($from)) $this->message->setFrom($this->getArrayAddress($from));
-
-            // Set the To addresses with an associative array
-            if (! empty($to)) $this->message->setTo($this->getArrayAddress($to));
-
-            if (! empty($from)) $this->message->SetReplyTo($this->getArrayAddress($from));
-
-            $this->message->setCharSet($conf->file->character_set_client);
-
-            if (! empty($this->html))
-            {
-                if (!empty($css))
-                {
-                    $this->css = $css;
-                    $this->buildCSS();
-                }
-                $msg = $this->html;
-                $msg = $this->checkIfHTML($msg);
-            }
-
-            if ($this->atleastoneimage)
-            {
-                foreach ($this->images_encoded as $img)
-                {
-                    //$img['fullpath'],$img['image_encoded'],$img['name'],$img['content_type'],$img['cid']
-                    $attachment = Swift_Image::fromPath($img['fullpath'], $img['content_type']);
-                    // embed image
-                    $imgcid = $this->message->embed($attachment);
-                    // replace cid by the one created by swiftmail in html message
-                    $msg = str_replace("cid:".$img['cid'], $imgcid, $msg);
-                }
-            }
-
-            if ($this->msgishtml) {
-                $this->message->setBody($msg,'text/html');
-                // And optionally an alternative body
-                //$this->message->addPart('Here is the message itself', 'text/plain');
-            } else {
-                $this->message->setBody($msg,'text/plain');
-                // And optionally an alternative body
-                //$this->message->addPart('<q>Here is the message itself</q>', 'text/html');
-            }
-
-            if ($this->atleastonefile)
-            {
-                foreach ($filename_list as $i => $val)
-                {
-                    //$this->message->attach(Swift_Attachment::fromPath($filename_list[$i],$mimetype_list[$i]));
-                    $attachment = Swift_Attachment::fromPath($filename_list[$i],$mimetype_list[$i]);
-                    $this->message->attach($attachment);
-                }
-            }
-
-            if (! empty($addr_cc)) $this->message->setCc($this->getArrayAddress($addr_cc));
-            if (! empty($addr_bcc)) $this->message->setBcc($this->getArrayAddress($addr_bcc));
-            //if (! empty($errors_to)) $this->message->setErrorsTo($this->getArrayAddress($errors_to);
-            if (isset($this->deliveryreceipt) && $this->deliveryreceipt == 1) $this->message->setReadReceiptTo($this->getArrayAddress($from));
-        }
+		else if ($this->sendmode == 'swiftmailer')
+		{
+			// Use Swift Mailer library
+			// ------------------------------------------
+
+			$host = dol_getprefix('email');
+
+			require_once DOL_DOCUMENT_ROOT.'/includes/swiftmailer/lib/swift_required.php';
+			// Create the message
+			$this->message = Swift_Message::newInstance();
+
+			// Adding a trackid header to a message
+			$headers = $this->message->getHeaders();
+			$headers->addTextHeader('X-Dolibarr-TRACKID', $trackid);
+			$headerID = time() . '.swiftmailer-dolibarr-' . $trackid . '@' . $host;
+			$msgid = $headers->get('Message-ID');
+			$msgid->setId($headerID);
+			$headers->addIdHeader('References', $headerID);
+			// TODO if (! empty($moreinheader)) ...
+
+			// Give the message a subject
+			$this->message->setSubject($this->encodetorfc2822($subject));
+
+			// Set the From address with an associative array
+			//$this->message->setFrom(array('john@doe.com' => 'John Doe'));
+			if (! empty($from)) $this->message->setFrom($this->getArrayAddress($from));
+
+			// Set the To addresses with an associative array
+			if (! empty($to)) $this->message->setTo($this->getArrayAddress($to));
+
+			if (! empty($from)) $this->message->SetReplyTo($this->getArrayAddress($from));
+
+			$this->message->setCharSet($conf->file->character_set_client);
+
+			if (! empty($this->html))
+			{
+				if (!empty($css))
+				{
+					$this->css = $css;
+					$this->buildCSS();
+				}
+				$msg = $this->html;
+				$msg = $this->checkIfHTML($msg);
+			}
+
+			if ($this->atleastoneimage)
+			{
+				foreach ($this->images_encoded as $img)
+				{
+					//$img['fullpath'],$img['image_encoded'],$img['name'],$img['content_type'],$img['cid']
+					$attachment = Swift_Image::fromPath($img['fullpath'], $img['content_type']);
+					// embed image
+					$imgcid = $this->message->embed($attachment);
+					// replace cid by the one created by swiftmail in html message
+					$msg = str_replace("cid:".$img['cid'], $imgcid, $msg);
+				}
+			}
+
+			if ($this->msgishtml) {
+				$this->message->setBody($msg,'text/html');
+				// And optionally an alternative body
+				//$this->message->addPart('Here is the message itself', 'text/plain');
+			} else {
+				$this->message->setBody($msg,'text/plain');
+				// And optionally an alternative body
+				//$this->message->addPart('<q>Here is the message itself</q>', 'text/html');
+			}
+
+			if ($this->atleastonefile)
+			{
+				foreach ($filename_list as $i => $val)
+				{
+					//$this->message->attach(Swift_Attachment::fromPath($filename_list[$i],$mimetype_list[$i]));
+					$attachment = Swift_Attachment::fromPath($filename_list[$i],$mimetype_list[$i]);
+					$this->message->attach($attachment);
+				}
+			}
+
+			if (! empty($addr_cc)) $this->message->setCc($this->getArrayAddress($addr_cc));
+			if (! empty($addr_bcc)) $this->message->setBcc($this->getArrayAddress($addr_bcc));
+			//if (! empty($errors_to)) $this->message->setErrorsTo($this->getArrayAddress($errors_to);
+			if (isset($this->deliveryreceipt) && $this->deliveryreceipt == 1) $this->message->setReadReceiptTo($this->getArrayAddress($from));
+		}
 		else
 		{
 			// Send mail method not correctly defined
 			// --------------------------------------
-            $this->error = 'Bad value for MAIN_MAIL_SENDMODE constant';
+			$this->error = 'Bad value for sendmode';
 		}
 
 	}
@@ -471,55 +480,55 @@ class CMailFile
 
 		if (empty($conf->global->MAIN_DISABLE_ALL_MAILS))
 		{
-            require_once DOL_DOCUMENT_ROOT . '/core/class/hookmanager.class.php';
-            $hookmanager = new HookManager($db);
-            $hookmanager->initHooks(array(
-                'maildao'
-            ));
-            $reshook = $hookmanager->executeHooks('doactions', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
-            if (! empty($reshook))
-            {
-                $this->error = "Error in hook maildao doactions " . $reshook;
-                dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_ERR);
-
-                return $reshook;
-            }
-
-            // Check number of recipient is lower or equal than MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL
-            if (empty($conf->global->MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL)) $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL=10;
-            $tmparray1 = explode(',', $this->addr_to);
-            if (count($tmparray1) > $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL)
-            {
-                $this->error = 'Too much recipients in to:';
-                dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_WARNING);
-                return false;
-            }
-            if (empty($conf->global->MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL)) $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL=10;
-            $tmparray2 = explode(',', $this->addr_cc);
-            if (count($tmparray2) > $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL)
-            {
-                $this->error = 'Too much recipients in cc:';
-                dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_WARNING);
-                return false;
-            }
-            if (empty($conf->global->MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL)) $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL=10;
-            $tmparray3 = explode(',', $this->addr_bcc);
-            if (count($tmparray3) > $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL)
-            {
-                $this->error = 'Too much recipients in bcc:';
-                dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_WARNING);
-                return false;
-            }
-            if (empty($conf->global->MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL)) $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL=10;
-            if ((count($tmparray1)+count($tmparray2)+count($tmparray3)) > $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL)
-            {
-                $this->error = 'Too much recipients in to:, cc:, bcc:';
-                dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_WARNING);
-                return false;
-            }
+			require_once DOL_DOCUMENT_ROOT . '/core/class/hookmanager.class.php';
+			$hookmanager = new HookManager($db);
+			$hookmanager->initHooks(array(
+					'maildao'
+			));
+			$reshook = $hookmanager->executeHooks('doactions', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
+			if (! empty($reshook))
+			{
+				$this->error = "Error in hook maildao doactions " . $reshook;
+				dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_ERR);
+
+				return $reshook;
+			}
+
+			// Check number of recipient is lower or equal than MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL
+			if (empty($conf->global->MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL)) $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL=10;
+			$tmparray1 = explode(',', $this->addr_to);
+			if (count($tmparray1) > $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_TO_IN_SAME_EMAIL)
+			{
+				$this->error = 'Too much recipients in to:';
+				dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_WARNING);
+				return false;
+			}
+			if (empty($conf->global->MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL)) $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL=10;
+			$tmparray2 = explode(',', $this->addr_cc);
+			if (count($tmparray2) > $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_CC_IN_SAME_EMAIL)
+			{
+				$this->error = 'Too much recipients in cc:';
+				dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_WARNING);
+				return false;
+			}
+			if (empty($conf->global->MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL)) $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL=10;
+			$tmparray3 = explode(',', $this->addr_bcc);
+			if (count($tmparray3) > $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_BCC_IN_SAME_EMAIL)
+			{
+				$this->error = 'Too much recipients in bcc:';
+				dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_WARNING);
+				return false;
+			}
+			if (empty($conf->global->MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL)) $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL=10;
+			if ((count($tmparray1)+count($tmparray2)+count($tmparray3)) > $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL)
+			{
+				$this->error = 'Too much recipients in to:, cc:, bcc:';
+				dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_WARNING);
+				return false;
+			}
 
 			// Action according to choosed sending method
-			if ($conf->global->MAIN_MAIL_SENDMODE == 'mail')
+			if ($this->sendmode == 'mail')
 			{
 				// Use mail php function (default PHP method)
 				// ------------------------------------------
@@ -555,15 +564,15 @@ class CMailFile
 						// Having this variable not defined may create problems with some other sendmail (option -f required)
 						$additionnalparam .= ($additionnalparam?' ':'').(! empty($conf->global->MAIN_MAIL_ERRORS_TO) ? '-f' . $this->getValidAddress($conf->global->MAIN_MAIL_ERRORS_TO,2) : ($this->addr_from != '' ? '-f' . $this->getValidAddress($this->addr_from,2) : '') );
 					}
-                    if (! empty($conf->global->MAIN_MAIL_SENDMAIL_FORCE_BA))    // To force usage of -ba option. This option tells sendmail to read From: or Sender: to setup sender
-                    {
-                        $additionnalparam .= ($additionnalparam?' ':'').'-ba';
-                    }
-
-                    if (! empty($conf->global->MAIN_MAIL_SENDMAIL_FORCE_ADDPARAM)) $additionnalparam .= ($additionnalparam?' ':'').'-U '.$additionnalparam; // Use -U to add additionnal params
-                    
-                    dol_syslog("CMailFile::sendfile: mail start HOST=".ini_get('SMTP').", PORT=".ini_get('smtp_port').", additionnal_parameters=".$additionnalparam, LOG_DEBUG);
-                    
+					if (! empty($conf->global->MAIN_MAIL_SENDMAIL_FORCE_BA))    // To force usage of -ba option. This option tells sendmail to read From: or Sender: to setup sender
+					{
+						$additionnalparam .= ($additionnalparam?' ':'').'-ba';
+					}
+
+					if (! empty($conf->global->MAIN_MAIL_SENDMAIL_FORCE_ADDPARAM)) $additionnalparam .= ($additionnalparam?' ':'').'-U '.$additionnalparam; // Use -U to add additionnal params
+
+					dol_syslog("CMailFile::sendfile: mail start HOST=".ini_get('SMTP').", PORT=".ini_get('smtp_port').", additionnal_parameters=".$additionnalparam, LOG_DEBUG);
+
 					$this->message=stripslashes($this->message);
 
 					if (! empty($conf->global->MAIN_MAIL_DEBUG)) $this->dump_mail();
@@ -600,7 +609,7 @@ class CMailFile
 				if (! empty($conf->global->MAIN_MAIL_SMTP_SERVER))	ini_restore('SMTP');
 				if (! empty($conf->global->MAIN_MAIL_SMTP_PORT)) 	ini_restore('smtp_port');
 			}
-			else if ($conf->global->MAIN_MAIL_SENDMODE == 'smtps')
+			else if ($this->sendmode == 'smtps')
 			{
 
 				// Use SMTPS library
@@ -612,25 +621,25 @@ class CMailFile
 				if (empty($conf->global->MAIN_MAIL_SMTP_PORT))   $conf->global->MAIN_MAIL_SMTP_PORT=ini_get('smtp_port');
 
 				// TODO Manage alternative parameters
-				
+
 				// If we use SSL/TLS
 				$server=$conf->global->MAIN_MAIL_SMTP_SERVER;
 				if (! empty($conf->global->MAIN_MAIL_EMAIL_TLS) && function_exists('openssl_open')) $server='ssl://'.$server;
-                $port=$conf->global->MAIN_MAIL_SMTP_PORT;
-                
+				$port=$conf->global->MAIN_MAIL_SMTP_PORT;
+
 				$this->smtps->setHost($server);
 				$this->smtps->setPort($port); // 25, 465...;
 
 				$loginid=''; $loginpass='';
-				if (! empty($conf->global->MAIN_MAIL_SMTPS_ID)) 
+				if (! empty($conf->global->MAIN_MAIL_SMTPS_ID))
 				{
-				    $loginid = $conf->global->MAIN_MAIL_SMTPS_ID;
-				    $this->smtps->setID($loginid);
+					$loginid = $conf->global->MAIN_MAIL_SMTPS_ID;
+					$this->smtps->setID($loginid);
 				}
-				if (! empty($conf->global->MAIN_MAIL_SMTPS_PW)) 
+				if (! empty($conf->global->MAIN_MAIL_SMTPS_PW))
 				{
-				    $loginpass = $conf->global->MAIN_MAIL_SMTPS_PW;
-				    $this->smtps->setPW($loginpass);
+					$loginpass = $conf->global->MAIN_MAIL_SMTPS_PW;
+					$this->smtps->setPW($loginpass);
 				}
 
 				$res=true;
@@ -652,7 +661,7 @@ class CMailFile
 				if ($res)
 				{
 					if (! empty($conf->global->MAIN_MAIL_DEBUG)) $this->smtps->setDebug(true);
-					
+						
 					$result=$this->smtps->sendMsg();
 					//print $result;
 
@@ -668,63 +677,63 @@ class CMailFile
 					}
 				}
 			}
-            else if ($conf->global->MAIN_MAIL_SENDMODE == 'swiftmailer')
-            {
-
-                // Use Swift Mailer library
-                // ------------------------------------------
-                require_once DOL_DOCUMENT_ROOT.'/includes/swiftmailer/lib/swift_required.php';
-
-                // Forcage parametres
-                if (empty($conf->global->MAIN_MAIL_SMTP_SERVER)) $conf->global->MAIN_MAIL_SMTP_SERVER=ini_get('SMTP');
-                if (empty($conf->global->MAIN_MAIL_SMTP_PORT))   $conf->global->MAIN_MAIL_SMTP_PORT=ini_get('smtp_port');
-
-                // If we use SSL/TLS
-                $server=$conf->global->MAIN_MAIL_SMTP_SERVER;
-                $secure='';
-                //var_dump(stream_get_transports());
-                if (! empty($conf->global->MAIN_MAIL_EMAIL_TLS) && function_exists('openssl_open')) $secure='ssl';
-                if (! empty($conf->global->MAIN_MAIL_EMAIL_STARTTLS) && function_exists('openssl_open')) $secure='tls';
-
-                $this->transport = Swift_SmtpTransport::newInstance($server, $conf->global->MAIN_MAIL_SMTP_PORT, $secure);
-
-                if (! empty($conf->global->MAIN_MAIL_SMTPS_ID)) $this->transport->setUsername($conf->global->MAIN_MAIL_SMTPS_ID);
-                if (! empty($conf->global->MAIN_MAIL_SMTPS_PW)) $this->transport->setPassword($conf->global->MAIN_MAIL_SMTPS_PW);
-                //$smtps->_msgReplyTo  = 'reply@web.com';
-
-                // Create the Mailer using your created Transport
-                $this->mailer = Swift_Mailer::newInstance($this->transport);
-
-                if (! empty($conf->global->MAIN_MAIL_DEBUG)) {
-                    // To use the ArrayLogger
-                    $this->logger = new Swift_Plugins_Loggers_ArrayLogger();
-                    // Or to use the Echo Logger
-                    //$this->logger = new Swift_Plugins_Loggers_EchoLogger();
-                    $this->mailer->registerPlugin(new Swift_Plugins_LoggerPlugin($this->logger));
-                }
-                // send mail
-                try {
-                    $result = $this->mailer->send($this->message);
-                } catch (Exception $e) {
-                    $this->error =  $e->getMessage();
-                }
-                if (! empty($conf->global->MAIN_MAIL_DEBUG)) $this->dump_mail();
-
-                $res = true;
-                if (! empty($this->error) && ! $result) {
-                    dol_syslog("CMailFile::sendfile: mail end error=".$this->error, LOG_ERR);
-                    $res=false;
-                } else {
-                    $this->error = sprintf ("Sent %d messages\n", $result);
-                }
-            }
+			else if ($this->sendmode == 'swiftmailer')
+			{
+
+				// Use Swift Mailer library
+				// ------------------------------------------
+				require_once DOL_DOCUMENT_ROOT.'/includes/swiftmailer/lib/swift_required.php';
+
+				// Forcage parametres
+				if (empty($conf->global->MAIN_MAIL_SMTP_SERVER)) $conf->global->MAIN_MAIL_SMTP_SERVER=ini_get('SMTP');
+				if (empty($conf->global->MAIN_MAIL_SMTP_PORT))   $conf->global->MAIN_MAIL_SMTP_PORT=ini_get('smtp_port');
+
+				// If we use SSL/TLS
+				$server=$conf->global->MAIN_MAIL_SMTP_SERVER;
+				$secure='';
+				//var_dump(stream_get_transports());
+				if (! empty($conf->global->MAIN_MAIL_EMAIL_TLS) && function_exists('openssl_open')) $secure='ssl';
+				if (! empty($conf->global->MAIN_MAIL_EMAIL_STARTTLS) && function_exists('openssl_open')) $secure='tls';
+
+				$this->transport = Swift_SmtpTransport::newInstance($server, $conf->global->MAIN_MAIL_SMTP_PORT, $secure);
+
+				if (! empty($conf->global->MAIN_MAIL_SMTPS_ID)) $this->transport->setUsername($conf->global->MAIN_MAIL_SMTPS_ID);
+				if (! empty($conf->global->MAIN_MAIL_SMTPS_PW)) $this->transport->setPassword($conf->global->MAIN_MAIL_SMTPS_PW);
+				//$smtps->_msgReplyTo  = 'reply@web.com';
+
+				// Create the Mailer using your created Transport
+				$this->mailer = Swift_Mailer::newInstance($this->transport);
+
+				if (! empty($conf->global->MAIN_MAIL_DEBUG)) {
+					// To use the ArrayLogger
+					$this->logger = new Swift_Plugins_Loggers_ArrayLogger();
+					// Or to use the Echo Logger
+					//$this->logger = new Swift_Plugins_Loggers_EchoLogger();
+					$this->mailer->registerPlugin(new Swift_Plugins_LoggerPlugin($this->logger));
+				}
+				// send mail
+				try {
+					$result = $this->mailer->send($this->message);
+				} catch (Exception $e) {
+					$this->error =  $e->getMessage();
+				}
+				if (! empty($conf->global->MAIN_MAIL_DEBUG)) $this->dump_mail();
+
+				$res = true;
+				if (! empty($this->error) && ! $result) {
+					dol_syslog("CMailFile::sendfile: mail end error=".$this->error, LOG_ERR);
+					$res=false;
+				} else {
+					$this->error = sprintf ("Sent %d messages\n", $result);
+				}
+			}
 			else
 			{
 
 				// Send mail method not correctly defined
 				// --------------------------------------
 
-				return 'Bad value for MAIN_MAIL_SENDMODE constant';
+				return 'Bad value for sendmode';
 			}
 
 		}
@@ -792,81 +801,81 @@ class CMailFile
 			$outputfile=$dolibarr_main_data_root."/dolibarr_mail.log";
 			$fp = fopen($outputfile,"w");
 
-			if ($conf->global->MAIN_MAIL_SENDMODE == 'mail')
+			if ($this->sendmode == 'mail')
 			{
 				fputs($fp, $this->headers);
 				fputs($fp, $this->eol);			// This eol is added by the mail function, so we add it in log
 				fputs($fp, $this->message);
 			}
-			elseif ($conf->global->MAIN_MAIL_SENDMODE == 'smtps')
+			elseif ($this->sendmode == 'smtps')
 			{
 				fputs($fp, $this->smtps->log);	// this->smtps->log is filled only if MAIN_MAIL_DEBUG was set to on
 			}
-            elseif ($conf->global->MAIN_MAIL_SENDMODE == 'swiftmailer')
-            {
-                fputs($fp, $this->logger->dump());	// this->logger is filled only if MAIN_MAIL_DEBUG was set to on
-            }
+			elseif ($this->sendmode == 'swiftmailer')
+			{
+				fputs($fp, $this->logger->dump());	// this->logger is filled only if MAIN_MAIL_DEBUG was set to on
+			}
 
 			fclose($fp);
 			if (! empty($conf->global->MAIN_UMASK))
-			@chmod($outputfile, octdec($conf->global->MAIN_UMASK));
+				@chmod($outputfile, octdec($conf->global->MAIN_UMASK));
 		}
 	}
 
 
-    /**
-     * Correct an uncomplete html string
-     *
-     * @param	string	$msg	String
-     * @return	string			Completed string
-     */
-    function checkIfHTML($msg)
-    {
-        if (!preg_match('/^[\s\t]*<html/i',$msg))
-        {
-            $out = "<html><head><title></title>";
-            if (!empty($this->styleCSS)) $out.= $this->styleCSS;
-            $out.= "</head><body";
-            if (!empty($this->bodyCSS)) $out.= $this->bodyCSS;
-            $out.= ">";
-            $out.= $msg;
-            $out.= "</body></html>";
-        }
-        else
-        {
-            $out = $msg;
-        }
-
-        return $out;
-    }
-
-    /**
-     * Build a css style (mode = all) into this->styleCSS and this->bodyCSS
-     *
-     * @return css
-     */
-    function buildCSS()
-    {
-        if (! empty($this->css))
-        {
-            // Style CSS
-            $this->styleCSS = '<style type="text/css">';
-            $this->styleCSS.= 'body {';
-
-            if ($this->css['bgcolor'])
-            {
-                $this->styleCSS.= '  background-color: '.$this->css['bgcolor'].';';
-                $this->bodyCSS.= ' bgcolor="'.$this->css['bgcolor'].'"';
-            }
-            if ($this->css['bgimage'])
-            {
-                // TODO recuperer cid
-                $this->styleCSS.= ' background-image: url("cid:'.$this->css['bgimage_cid'].'");';
-            }
-            $this->styleCSS.= '}';
-            $this->styleCSS.= '</style>';
-        }
-    }
+	/**
+	 * Correct an uncomplete html string
+	 *
+	 * @param	string	$msg	String
+	 * @return	string			Completed string
+	 */
+	function checkIfHTML($msg)
+	{
+		if (!preg_match('/^[\s\t]*<html/i',$msg))
+		{
+			$out = "<html><head><title></title>";
+			if (!empty($this->styleCSS)) $out.= $this->styleCSS;
+			$out.= "</head><body";
+			if (!empty($this->bodyCSS)) $out.= $this->bodyCSS;
+			$out.= ">";
+			$out.= $msg;
+			$out.= "</body></html>";
+		}
+		else
+		{
+			$out = $msg;
+		}
+
+		return $out;
+	}
+
+	/**
+	 * Build a css style (mode = all) into this->styleCSS and this->bodyCSS
+	 *
+	 * @return css
+	 */
+	function buildCSS()
+	{
+		if (! empty($this->css))
+		{
+			// Style CSS
+			$this->styleCSS = '<style type="text/css">';
+			$this->styleCSS.= 'body {';
+
+			if ($this->css['bgcolor'])
+			{
+				$this->styleCSS.= '  background-color: '.$this->css['bgcolor'].';';
+				$this->bodyCSS.= ' bgcolor="'.$this->css['bgcolor'].'"';
+			}
+			if ($this->css['bgimage'])
+			{
+				// TODO recuperer cid
+				$this->styleCSS.= ' background-image: url("cid:'.$this->css['bgimage_cid'].'");';
+			}
+			$this->styleCSS.= '}';
+			$this->styleCSS.= '</style>';
+		}
+	}
 
 
 	/**
@@ -924,7 +933,7 @@ class CMailFile
 
 		$out.= "Content-Type: multipart/mixed; boundary=\"".$this->mixed_boundary."\"".$this->eol2;
 		$out.= "Content-Transfer-Encoding: 8bit".$this->eol2;
-		
+
 		dol_syslog("CMailFile::write_smtpheaders smtp_header=\n".$out);
 		return $out;
 	}
@@ -992,14 +1001,14 @@ class CMailFile
 		{
 			$strContentAltText = html_entity_decode(strip_tags($strContent));
 			$strContentAltText = rtrim(wordwrap($strContentAltText, 75, "\r\n"));
-		    
-		    // Check if html header already in message, if not complete the message
+
+			// Check if html header already in message, if not complete the message
 			$strContent = $this->checkIfHTML($strContent);
 		}
 
 		// Make RFC2045 Compliant, split lines
-        //$strContent = rtrim(chunk_split($strContent));    // Function chunck_split seems ko if not used on a base64 content
-        $strContent = rtrim(wordwrap($strContent));   // TODO Using this method creates unexpected line break on text/plain content.
+		//$strContent = rtrim(chunk_split($strContent));    // Function chunck_split seems ko if not used on a base64 content
+		$strContent = rtrim(wordwrap($strContent));   // TODO Using this method creates unexpected line break on text/plain content.
 
 		if ($this->msgishtml)
 		{
@@ -1012,23 +1021,23 @@ class CMailFile
 				$out.= $this->eol;
 				$out.= "--" . $this->related_boundary . $this->eol;
 			}
-			
+				
 			if (! $this->atleastoneimage && $strContentAltText && ! empty($conf->global->MAIN_MAIL_USE_MULTI_PART))    // Add plain text message part before html part
 			{
 				$out.= "Content-Type: multipart/alternative; boundary=\"".$this->alternative_boundary."\"".$this->eol;
 				$out.= $this->eol;
 				$out.= "--" . $this->alternative_boundary . $this->eol;
 				$out.= "Content-Type: text/plain; charset=".$conf->file->character_set_client.$this->eol;
-			    $out.= $this->eol.$strContentAltText.$this->eol;
-			    $out.= "--" . $this->alternative_boundary . $this->eol;
+				$out.= $this->eol.$strContentAltText.$this->eol;
+				$out.= "--" . $this->alternative_boundary . $this->eol;
 			}
-			
+				
 			$out.= "Content-Type: text/html; charset=".$conf->file->character_set_client.$this->eol;
 			$out.= $this->eol.$strContent.$this->eol;
-		
+
 			if (! $this->atleastoneimage && $strContentAltText && ! empty($conf->global->MAIN_MAIL_USE_MULTI_PART))    // Add plain text message part after html part
 			{
-			    $out.= "--" . $this->alternative_boundary . "--". $this->eol;
+				$out.= "--" . $this->alternative_boundary . "--". $this->eol;
 			}
 		}
 		else
@@ -1042,13 +1051,13 @@ class CMailFile
 		// Encode images
 		if ($this->atleastoneimage)
 		{
-		    $out .= $this->write_images($this->images_encoded);
-		    // always end related and end alternative after inline images
-		    $out .= "--" . $this->related_boundary . "--" . $this->eol;
-		    $out .= $this->eol . "--" . $this->alternative_boundary . "--" . $this->eol;
-		    $out .= $this->eol;
+			$out .= $this->write_images($this->images_encoded);
+			// always end related and end alternative after inline images
+			$out .= "--" . $this->related_boundary . "--" . $this->eol;
+			$out .= $this->eol . "--" . $this->alternative_boundary . "--" . $this->eol;
+			$out .= $this->eol;
 		}
-		
+
 		return $out;
 	}
 
@@ -1074,10 +1083,12 @@ class CMailFile
 				if ($encoded >= 0)
 				{
 					if ($mimefilename_list[$i]) $filename_list[$i] = $mimefilename_list[$i];
-					if (! $mimetype_list[$i]) { $mimetype_list[$i] = "application/octet-stream"; }
+					if (! $mimetype_list[$i]) {
+						$mimetype_list[$i] = "application/octet-stream";
+					}
 
 					$out.= "--" . $this->mixed_boundary . $this->eol;
-                    $out.= "Content-Disposition: attachment; filename=\"".$filename_list[$i]."\"".$this->eol;
+					$out.= "Content-Disposition: attachment; filename=\"".$filename_list[$i]."\"".$this->eol;
 					$out.= "Content-Type: " . $mimetype_list[$i] . "; name=\"".$filename_list[$i]."\"".$this->eol;
 					$out.= "Content-Transfer-Encoding: base64".$this->eol;
 					$out.= "Content-Description: File Attachment".$this->eol;
@@ -1137,25 +1148,25 @@ class CMailFile
 	 */
 	function check_server_port($host,$port)
 	{
-        global $conf;
+		global $conf;
 		$_retVal=0;
 		$timeout=5;	// Timeout in seconds
 
 		if (function_exists('fsockopen'))
 		{
-            // If we use SSL/TLS
-            if (! empty($conf->global->MAIN_MAIL_EMAIL_TLS) && function_exists('openssl_open')) $host='ssl://'.$host;
-            // tls smtp start with no encryption
-            //if (! empty($conf->global->MAIN_MAIL_EMAIL_STARTTLS) && function_exists('openssl_open')) $host='tls://'.$host;
+			// If we use SSL/TLS
+			if (! empty($conf->global->MAIN_MAIL_EMAIL_TLS) && function_exists('openssl_open')) $host='ssl://'.$host;
+			// tls smtp start with no encryption
+			//if (! empty($conf->global->MAIN_MAIL_EMAIL_STARTTLS) && function_exists('openssl_open')) $host='tls://'.$host;
 
 			dol_syslog("Try socket connection to host=".$host." port=".$port);
 			//See if we can connect to the SMTP server
 			if ($socket = @fsockopen(
-			    $host,       // Host to test, IP or domain. Add ssl:// for SSL/TLS.
-			    $port,       // which Port number to use
-			    $errno,      // actual system level error
-			    $errstr,     // and any text that goes with the error
-			    $timeout
+					$host,       // Host to test, IP or domain. Add ssl:// for SSL/TLS.
+					$port,       // which Port number to use
+					$errno,      // actual system level error
+					$errstr,     // and any text that goes with the error
+					$timeout
 			))  // timeout for reading/writing data over the socket
 			{
 				// Windows still does not have support for this timeout function
@@ -1225,7 +1236,7 @@ class CMailFile
 			foreach ($matches[1] as $full)
 			{
 
-                if (preg_match('/file=([A-Za-z0-9_\-\/]+[\.]?[A-Za-z0-9]+)?$/i',$full,$regs))   // If xxx is 'file=aaa'
+				if (preg_match('/file=([A-Za-z0-9_\-\/]+[\.]?[A-Za-z0-9]+)?$/i',$full,$regs))   // If xxx is 'file=aaa'
 				{
 					$img = $regs[1];
 
@@ -1306,7 +1317,7 @@ class CMailFile
 	 * @param	string		$address		     Example: 'John Doe <john@doe.com>, Alan Smith <alan@smith.com>' or 'john@doe.com, alan@smith.com'
 	 * @param	int			$format			     0=auto, 1=emails with <>, 2=emails without <>, 3=auto + label between "
 	 * @param	int			$encode			     0=No encode name, 1=Encode name to RFC2822
-	 * @param   int         $maxnumberofemail    0=No limit. Otherwise, maximum number of emails returned ($address may contains several email separated with ','). Add '...' if there is more. 
+	 * @param   int         $maxnumberofemail    0=No limit. Otherwise, maximum number of emails returned ($address may contains several email separated with ','). Add '...' if there is more.
 	 * @return	string						     If format 0: '<john@doe.com>' or 'John Doe <john@doe.com>' or '=?UTF-8?B?Sm9obiBEb2U=?= <john@doe.com>'
 	 * 										     If format 1: '<john@doe.com>'
 	 *										     If format 2: 'john@doe.com'
@@ -1338,12 +1349,12 @@ class CMailFile
 
 			if ($email)
 			{
-			    $i++;
-			    
+				$i++;
+				 
 				$newemail='';
 				if ($format == 4)
 				{
-				    $newemail = $name?$name:$email;
+					$newemail = $name?$name:$email;
 				}
 				if ($format == 2)
 				{
@@ -1361,12 +1372,12 @@ class CMailFile
 				}
 
 				$ret=($ret ? $ret.',' : '').$newemail;
-				
+
 				// Stop if we have too much records
 				if ($maxnumberofemail && $i >= $maxnumberofemail)
 				{
-				    if (count($arrayaddress) > $maxnumberofemail) $ret.='...';
-				    break;
+					if (count($arrayaddress) > $maxnumberofemail) $ret.='...';
+					break;
 				}
 			}
 		}
@@ -1374,38 +1385,38 @@ class CMailFile
 		return $ret;
 	}
 
-    /**
-     * Return a formatted array of address string for SMTP protocol
-     *
-     * @param   string      $address        Example: 'John Doe <john@doe.com>, Alan Smith <alan@smith.com>' or 'john@doe.com, alan@smith.com'
-     * @return  array                       array of email => name
-     */
-    function getArrayAddress($address)
-    {
-        global $conf;
-
-        $ret=array();
-
-        $arrayaddress=explode(',',$address);
-
-        // Boucle sur chaque composant de l'adresse
-        foreach($arrayaddress as $val)
-        {
-            if (preg_match('/^(.*)<(.*)>$/i',trim($val),$regs))
-            {
-                $name  = trim($regs[1]);
-                $email = trim($regs[2]);
-            }
-            else
-            {
-                $name  = null;
-                $email = trim($val);
-            }
-
-            $ret[$email]=empty($conf->global->MAIN_MAIL_NO_FULL_EMAIL)?$name:null;
-        }
-
-        return $ret;
-    }
+	/**
+	 * Return a formatted array of address string for SMTP protocol
+	 *
+	 * @param   string      $address        Example: 'John Doe <john@doe.com>, Alan Smith <alan@smith.com>' or 'john@doe.com, alan@smith.com'
+	 * @return  array                       array of email => name
+	 */
+	function getArrayAddress($address)
+	{
+		global $conf;
+
+		$ret=array();
+
+		$arrayaddress=explode(',',$address);
+
+		// Boucle sur chaque composant de l'adresse
+		foreach($arrayaddress as $val)
+		{
+			if (preg_match('/^(.*)<(.*)>$/i',trim($val),$regs))
+			{
+				$name  = trim($regs[1]);
+				$email = trim($regs[2]);
+			}
+			else
+			{
+				$name  = null;
+				$email = trim($val);
+			}
+
+			$ret[$email]=empty($conf->global->MAIN_MAIL_NO_FULL_EMAIL)?$name:null;
+		}
+
+		return $ret;
+	}
 }