diff --git a/htdocs/admin/mails_templates.php b/htdocs/admin/mails_templates.php
index 90949c7980d..f0bf5609adf 100644
--- a/htdocs/admin/mails_templates.php
+++ b/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").':
'.implode('
', $tmp);
$helpsubstitforlines = $langs->trans("AvailableVariables").':
'.implode('
', $tmp);
}
else
{
$tmp=$formmail->getAvailableSubstitKey('formwithlines');
+ $tmp['__(AnyTransKey)__']='__(AnyTransKey)__';
$helpsubstit = $langs->trans("AvailableVariables").':
'.implode('
', $tmp);
$tmp=$formmail->getAvailableSubstitKey('formforlines');
$helpsubstitforlines = $langs->trans("AvailableVariables").':
'.implode('
', $tmp);
diff --git a/htdocs/comm/mailing/card.php b/htdocs/comm/mailing/card.php
index 7f22898a458..fe582d56656 100644
--- a/htdocs/comm/mailing/card.php
+++ b/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.
diff --git a/htdocs/core/class/CMailFile.class.php b/htdocs/core/class/CMailFile.class.php
index 3acdc342284..3da7f3abcf3 100644
--- a/htdocs/core/class/CMailFile.class.php
+++ b/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 '' or 'John Doe ' or ''). 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();
+ else if ($this->sendmode == 'swiftmailer')
+ {
+ // Use Swift Mailer library
+ // ------------------------------------------
- // 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));
+ $host = dol_getprefix('email');
- // 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));
+ require_once DOL_DOCUMENT_ROOT.'/includes/swiftmailer/lib/swift_required.php';
+ // Create the message
+ $this->message = Swift_Message::newInstance();
- // Set the To addresses with an associative array
- if (! empty($to)) $this->message->setTo($this->getArrayAddress($to));
+ // 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)) ...
- if (! empty($from)) $this->message->SetReplyTo($this->getArrayAddress($from));
+ // Give the message a subject
+ $this->message->setSubject($this->encodetorfc2822($subject));
- $this->message->setCharSet($conf->file->character_set_client);
+ // 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));
- if (! empty($this->html))
- {
- if (!empty($css))
- {
- $this->css = $css;
- $this->buildCSS();
- }
- $msg = $this->html;
- $msg = $this->checkIfHTML($msg);
- }
+ // Set the To addresses with an associative array
+ if (! empty($to)) $this->message->setTo($this->getArrayAddress($to));
- 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 (! empty($from)) $this->message->SetReplyTo($this->getArrayAddress($from));
- 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('Here is the message itself
', 'text/html');
- }
+ $this->message->setCharSet($conf->file->character_set_client);
- 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($this->html))
+ {
+ if (!empty($css))
+ {
+ $this->css = $css;
+ $this->buildCSS();
+ }
+ $msg = $this->html;
+ $msg = $this->checkIfHTML($msg);
+ }
- 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));
- }
+ 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('Here is the message itself
', '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);
+ 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;
- }
+ 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;
- }
+ // 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_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_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')
- {
+ else if ($this->sendmode == 'swiftmailer')
+ {
- // Use Swift Mailer library
- // ------------------------------------------
- require_once DOL_DOCUMENT_ROOT.'/includes/swiftmailer/lib/swift_required.php';
+ // 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');
+ // 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';
+ // 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);
+ $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';
+ 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);
+ // 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();
+ 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);
- }
- }
+ $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]*";
- if (!empty($this->styleCSS)) $out.= $this->styleCSS;
- $out.= "bodyCSS)) $out.= $this->bodyCSS;
- $out.= ">";
- $out.= $msg;
- $out.= "";
- }
- else
- {
- $out = $msg;
- }
+ /**
+ * Correct an uncomplete html string
+ *
+ * @param string $msg String
+ * @return string Completed string
+ */
+ function checkIfHTML($msg)
+ {
+ if (!preg_match('/^[\s\t]*";
+ if (!empty($this->styleCSS)) $out.= $this->styleCSS;
+ $out.= "bodyCSS)) $out.= $this->bodyCSS;
+ $out.= ">";
+ $out.= $msg;
+ $out.= "";
+ }
+ else
+ {
+ $out = $msg;
+ }
- return $out;
- }
+ 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 = '';
- }
- }
+ 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.= '';
+ }
+ }
/**
@@ -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 , Alan Smith ' 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: '' or 'John Doe ' or '=?UTF-8?B?Sm9obiBEb2U=?= '
* If format 1: ''
* 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 , Alan Smith ' or 'john@doe.com, alan@smith.com'
- * @return array array of email => name
- */
- function getArrayAddress($address)
- {
- global $conf;
+ /**
+ * Return a formatted array of address string for SMTP protocol
+ *
+ * @param string $address Example: 'John Doe , Alan Smith ' or 'john@doe.com, alan@smith.com'
+ * @return array array of email => name
+ */
+ function getArrayAddress($address)
+ {
+ global $conf;
- $ret=array();
+ $ret=array();
- $arrayaddress=explode(',',$address);
+ $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);
- }
+ // 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;
- }
+ $ret[$email]=empty($conf->global->MAIN_MAIL_NO_FULL_EMAIL)?$name:null;
+ }
- return $ret;
- }
+ return $ret;
+ }
}