dolibarr  20.0.0-beta
mails.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2007-2020 Laurent Destailleur <eldy@users.sourceforge.net>
3  * Copyright (C) 2009-2012 Regis Houssin <regis.houssin@inodbox.com>
4  * Copyright (C) 2013 Juanjo Menent <jmenent@2byte.es>
5  * Copyright (C) 2016 Jonathan TISSEAU <jonathan.tisseau@86dev.fr>
6  * Copyright (C) 2023 Anthony Berton <anthony.berton@bb2a.fr>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program. If not, see <https://www.gnu.org/licenses/>.
20  */
21 
27 // Load Dolibarr environment
28 require '../main.inc.php';
29 require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
30 require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
31 
32 // Load translation files required by the page
33 $langs->loadLangs(array("companies", "products", "admin", "mails", "other", "errors"));
34 
35 $action = GETPOST('action', 'aZ09');
36 $cancel = GETPOST('cancel', 'aZ09');
37 
38 $trackid = GETPOST('trackid');
39 
40 if (!$user->admin) {
42 }
43 
44 $usersignature = $user->signature;
45 // For action = test or send, we ensure that content is not html, even for signature, because for this we want a test with NO html.
46 if ($action == 'test' || ($action == 'send' && $trackid = 'test')) {
47  $usersignature = dol_string_nohtmltag($usersignature, 2);
48 }
49 
50 $substitutionarrayfortest = array(
51  '__USER_LOGIN__' => $user->login,
52  '__USER_EMAIL__' => $user->email,
53  '__USER_FIRSTNAME__' => $user->firstname,
54  '__USER_LASTNAME__' => $user->lastname,
55  '__USER_SIGNATURE__' => (($user->signature && !getDolGlobalString('MAIN_MAIL_DO_NOT_USE_SIGN')) ? $usersignature : ''), // Done into actions_sendmails
56  '__SENDEREMAIL_SIGNATURE__' => (($user->signature && !getDolGlobalString('MAIN_MAIL_DO_NOT_USE_SIGN')) ? $usersignature : ''), // Done into actions_sendmails
57  //'__ID__' => 'RecipientID',
58  //'__EMAIL__' => 'RecipientEMail', // Done into actions_sendmails
59  '__LASTNAME__' => $langs->trans("Lastname").' ('.$langs->trans("Recipient").')',
60  '__FIRSTNAME__' => $langs->trans("Firstname").' ('.$langs->trans("Recipient").')',
61  //'__ADDRESS__'=> $langs->trans("Address").' ('.$langs->trans("Recipient").')',
62  //'__ZIP__'=> $langs->trans("Zip").' ('.$langs->trans("Recipient").')',
63  //'__TOWN_'=> $langs->trans("Town").' ('.$langs->trans("Recipient").')',
64  //'__COUNTRY__'=> $langs->trans("Country").' ('.$langs->trans("Recipient").')',
65  '__DOL_MAIN_URL_ROOT__'=>DOL_MAIN_URL_ROOT,
66  '__CHECK_READ__' => '<img src="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-read.php?tag=undefinedtag&securitykey='.dol_hash(getDolGlobalString('MAILING_EMAIL_UNSUBSCRIBE_KEY')."-undefinedtag", 'md5').'" width="1" height="1" style="width:1px;height:1px" border="0" />',
67 );
68 complete_substitutions_array($substitutionarrayfortest, $langs);
69 
70 
71 
72 /*
73  * Actions
74  */
75 
76 if ($action == 'update' && !$cancel) {
77  if (!$error && !GETPOST("MAIN_MAIL_EMAIL_FROM", 'alphanohtml')) {
78  $error++;
79  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("MAIN_MAIL_EMAIL_FROM")), null, 'errors');
80  $action = 'edit';
81  }
82  if (!$error && !isValidEmail(GETPOST("MAIN_MAIL_EMAIL_FROM", 'alphanohtml'))) {
83  $error++;
84  setEventMessages($langs->trans("ErrorBadEMail", GETPOST("MAIN_MAIL_EMAIL_FROM", 'alphanohtml')), null, 'errors');
85  $action = 'edit';
86  }
87 
88  if (!$error) {
89  dolibarr_set_const($db, "MAIN_DISABLE_ALL_MAILS", GETPOSTINT("MAIN_DISABLE_ALL_MAILS"), 'chaine', 0, '', $conf->entity);
90  dolibarr_set_const($db, "MAIN_MAIL_FORCE_SENDTO", GETPOST("MAIN_MAIL_FORCE_SENDTO", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
91  dolibarr_set_const($db, "MAIN_MAIL_ENABLED_USER_DEST_SELECT", GETPOSTINT("MAIN_MAIL_ENABLED_USER_DEST_SELECT"), 'chaine', 0, '', $conf->entity);
92  dolibarr_set_const($db, 'MAIN_MAIL_NO_WITH_TO_SELECTED', GETPOSTINT('MAIN_MAIL_NO_WITH_TO_SELECTED'), 'chaine', 0, '', $conf->entity);
93  // Send mode parameters
94  dolibarr_set_const($db, "MAIN_MAIL_SENDMODE", GETPOST("MAIN_MAIL_SENDMODE", 'aZ09'), 'chaine', 0, '', $conf->entity);
95  dolibarr_set_const($db, "MAIN_MAIL_SMTP_PORT", GETPOSTINT("MAIN_MAIL_SMTP_PORT"), 'chaine', 0, '', $conf->entity);
96  dolibarr_set_const($db, "MAIN_MAIL_SMTP_SERVER", GETPOST("MAIN_MAIL_SMTP_SERVER", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
97  dolibarr_set_const($db, "MAIN_MAIL_SMTPS_ID", GETPOST("MAIN_MAIL_SMTPS_ID", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
98  if (GETPOSTISSET("MAIN_MAIL_SMTPS_PW")) {
99  dolibarr_set_const($db, "MAIN_MAIL_SMTPS_PW", GETPOST("MAIN_MAIL_SMTPS_PW", 'none'), 'chaine', 0, '', $conf->entity);
100  }
101  if (GETPOSTISSET("MAIN_MAIL_SMTPS_AUTH_TYPE")) {
102  dolibarr_set_const($db, "MAIN_MAIL_SMTPS_AUTH_TYPE", GETPOST("MAIN_MAIL_SMTPS_AUTH_TYPE", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
103  }
104  if (GETPOSTISSET("MAIN_MAIL_SMTPS_OAUTH_SERVICE")) {
105  dolibarr_set_const($db, "MAIN_MAIL_SMTPS_OAUTH_SERVICE", GETPOST("MAIN_MAIL_SMTPS_OAUTH_SERVICE", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
106  }
107  dolibarr_set_const($db, "MAIN_MAIL_EMAIL_TLS", GETPOSTINT("MAIN_MAIL_EMAIL_TLS"), 'chaine', 0, '', $conf->entity);
108  dolibarr_set_const($db, "MAIN_MAIL_EMAIL_STARTTLS", GETPOSTINT("MAIN_MAIL_EMAIL_STARTTLS"), 'chaine', 0, '', $conf->entity);
109  dolibarr_set_const($db, "MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED", GETPOSTINT("MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED"), 'chaine', 0, '', $conf->entity);
110 
111  dolibarr_set_const($db, "MAIN_MAIL_EMAIL_DKIM_ENABLED", GETPOSTINT("MAIN_MAIL_EMAIL_DKIM_ENABLED"), 'chaine', 0, '', $conf->entity);
112  dolibarr_set_const($db, "MAIN_MAIL_EMAIL_DKIM_DOMAIN", GETPOST("MAIN_MAIL_EMAIL_DKIM_DOMAIN", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
113  dolibarr_set_const($db, "MAIN_MAIL_EMAIL_DKIM_SELECTOR", GETPOST("MAIN_MAIL_EMAIL_DKIM_SELECTOR", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
114  dolibarr_set_const($db, "MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY", GETPOST("MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
115  // Content parameters
116  dolibarr_set_const($db, "MAIN_MAIL_EMAIL_FROM", GETPOST("MAIN_MAIL_EMAIL_FROM", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
117  dolibarr_set_const($db, "MAIN_MAIL_ERRORS_TO", GETPOST("MAIN_MAIL_ERRORS_TO", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
118  dolibarr_set_const($db, "MAIN_MAIL_AUTOCOPY_TO", GETPOST("MAIN_MAIL_AUTOCOPY_TO", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
119  dolibarr_set_const($db, 'MAIN_MAIL_DEFAULT_FROMTYPE', GETPOST('MAIN_MAIL_DEFAULT_FROMTYPE', 'alphanohtml'), 'chaine', 0, '', $conf->entity);
120 
121 
122  header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup");
123  exit;
124  }
125 }
126 
127 if ($action == 'disablephpmailwarning' && !$cancel) {
128  dolibarr_set_const($db, 'MAIN_HIDE_WARNING_TO_ENCOURAGE_SMTP_SETUP', 1, 'chaine', 1, 0, $conf->entity);
129 
130  setEventMessages($langs->trans("WarningDisabled"), null, 'mesgs');
131 }
132 
133 // Actions to send emails
134 $id = 0;
135 $actiontypecode = ''; // Not an event for agenda
136 $triggersendname = ''; // Disable triggers
137 $paramname = 'id';
138 $mode = 'emailfortest';
139 $trackid = ($action == 'send' ? GETPOST('trackid', 'aZ09') : $action);
140 $sendcontext = '';
141 include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php';
142 
143 if ($action == 'presend' && GETPOST('trackid', 'alphanohtml') == 'test') {
144  $action = 'test';
145 }
146 if ($action == 'presend' && GETPOST('trackid', 'alphanohtml') == 'testhtml') {
147  $action = 'testhtml';
148 }
149 
150 
151 
152 /*
153  * View
154  */
155 
156 $form = new Form($db);
157 
158 $linuxlike = 1;
159 if (preg_match('/^win/i', PHP_OS)) {
160  $linuxlike = 0;
161 }
162 if (preg_match('/^mac/i', PHP_OS)) {
163  $linuxlike = 0;
164 }
165 
166 if (!getDolGlobalString('MAIN_MAIL_SENDMODE')) {
167  $conf->global->MAIN_MAIL_SENDMODE = 'mail';
168 }
169 $port = getDolGlobalString('MAIN_MAIL_SMTP_PORT') ? $conf->global->MAIN_MAIL_SMTP_PORT : ini_get('smtp_port');
170 if (!$port) {
171  $port = 25;
172 }
173 $server = getDolGlobalString('MAIN_MAIL_SMTP_SERVER') ? $conf->global->MAIN_MAIL_SMTP_SERVER : ini_get('SMTP');
174 if (!$server) {
175  $server = '127.0.0.1';
176 }
177 
178 
179 $wikihelp = 'EN:Setup_EMails|FR:Paramétrage_EMails|ES:Configuración_EMails';
180 llxHeader('', $langs->trans("Setup"), $wikihelp);
181 
182 print load_fiche_titre($langs->trans("EMailsSetup"), '', 'title_setup');
183 
184 $head = email_admin_prepare_head();
185 
186 // List of sending methods
187 $listofmethods = array();
188 $listofmethods['mail'] = 'PHP mail function';
189 $listofmethods['smtps'] = 'SMTP/SMTPS socket library';
190 if (version_compare(phpversion(), '7.0', '>=')) {
191  $listofmethods['swiftmailer'] = 'Swift Mailer socket library';
192 }
193 
194 // List of oauth services
195 $oauthservices = array();
196 
197 foreach ($conf->global as $key => $val) {
198  if (!empty($val) && preg_match('/^OAUTH_.*_ID$/', $key)) {
199  $key = preg_replace('/^OAUTH_/', '', $key);
200  $key = preg_replace('/_ID$/', '', $key);
201  if (preg_match('/^.*-/', $key)) {
202  $name = preg_replace('/^.*-/', '', $key);
203  } else {
204  $name = $langs->trans("NoName");
205  }
206  $provider = preg_replace('/-.*$/', '', $key);
207  $provider = ucfirst(strtolower($provider));
208 
209  $oauthservices[$key] = $name." (".$provider.")";
210  }
211 }
212 
213 if ($action == 'edit') {
214  if ($conf->use_javascript_ajax) {
215  print "\n".'<script type="text/javascript">';
216  print 'jQuery(document).ready(function () {
217  function initfields()
218  {
219  if (jQuery("#MAIN_MAIL_SENDMODE").val()==\'mail\')
220  {
221  console.log("I choose php mail mode");
222  jQuery(".drag").hide();
223  jQuery("#MAIN_MAIL_EMAIL_TLS").val(0);
224  jQuery("#MAIN_MAIL_EMAIL_TLS").prop("disabled", true);
225  jQuery("#MAIN_MAIL_EMAIL_STARTTLS").val(0);
226  jQuery("#MAIN_MAIL_EMAIL_STARTTLS").prop("disabled", true);
227  jQuery("#MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED").val(0);
228  jQuery("#MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED").prop("disabled", true);
229  jQuery("#MAIN_MAIL_EMAIL_DKIM_ENABLED").val(0);
230  jQuery("#MAIN_MAIL_EMAIL_DKIM_ENABLED").prop("disabled", true);
231  jQuery("#MAIN_MAIL_EMAIL_DKIM_DOMAIN").prop("disabled", true);
232  jQuery("#MAIN_MAIL_EMAIL_DKIM_SELECTOR").prop("disabled", true);
233  jQuery("#MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY").prop("disabled", true);
234  jQuery(".smtp_method").hide();
235  jQuery(".dkim").hide();
236  jQuery(".smtp_auth_method").hide();
237  ';
238  if ($linuxlike) {
239  print '
240  jQuery("#MAIN_MAIL_SMTP_SERVER").hide();
241  jQuery("#MAIN_MAIL_SMTP_PORT").hide();
242  jQuery("#smtp_server_mess").show();
243  jQuery("#smtp_port_mess").show();';
244  } else {
245  print '
246  jQuery("#MAIN_MAIL_SMTP_SERVER").prop("disabled", true);
247  jQuery("#MAIN_MAIL_SMTP_PORT").prop("disabled", true);
248  jQuery("#smtp_server_mess").hide();
249  jQuery("#smtp_port_mess").hide();';
250  }
251  print '
252  }
253  if (jQuery("#MAIN_MAIL_SENDMODE").val()==\'smtps\')
254  {
255  console.log("I choose smtps mode");
256  jQuery(".drag").show();
257  jQuery("#MAIN_MAIL_EMAIL_TLS").val(' . getDolGlobalString('MAIN_MAIL_EMAIL_TLS').');
258  jQuery("#MAIN_MAIL_EMAIL_TLS").removeAttr("disabled");
259  jQuery("#MAIN_MAIL_EMAIL_STARTTLS").val(' . getDolGlobalString('MAIN_MAIL_EMAIL_STARTTLS').');
260  jQuery("#MAIN_MAIL_EMAIL_STARTTLS").removeAttr("disabled");
261  jQuery("#MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED").val(' . getDolGlobalString('MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED').');
262  jQuery("#MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED").removeAttr("disabled");
263  jQuery("#MAIN_MAIL_EMAIL_DKIM_ENABLED").val(0);
264  jQuery("#MAIN_MAIL_EMAIL_DKIM_ENABLED").prop("disabled", true);
265  jQuery("#MAIN_MAIL_EMAIL_DKIM_DOMAIN").prop("disabled", true);
266  jQuery("#MAIN_MAIL_EMAIL_DKIM_SELECTOR").prop("disabled", true);
267  jQuery("#MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY").prop("disabled", true);
268  jQuery("#MAIN_MAIL_EMAIL_DKIM_DOMAIN").hide();
269  jQuery("#MAIN_MAIL_EMAIL_DKIM_SELECTOR").hide();
270  jQuery("#MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY").hide();
271  jQuery("#MAIN_MAIL_SMTP_SERVER").removeAttr("disabled");
272  jQuery("#MAIN_MAIL_SMTP_PORT").removeAttr("disabled");
273  jQuery("#MAIN_MAIL_SMTP_SERVER").show();
274  jQuery("#MAIN_MAIL_SMTP_PORT").show();
275  jQuery("#smtp_server_mess").hide();
276  jQuery("#smtp_port_mess").hide();
277  jQuery(".smtp_method").show();
278  jQuery(".dkim").hide();
279  jQuery(".smtp_auth_method").show();
280  }
281  if (jQuery("#MAIN_MAIL_SENDMODE").val()==\'swiftmailer\')
282  {
283  console.log("I choose swiftmailer mode");
284  jQuery(".drag").show();
285  jQuery("#MAIN_MAIL_EMAIL_TLS").val(' . getDolGlobalString('MAIN_MAIL_EMAIL_TLS').');
286  jQuery("#MAIN_MAIL_EMAIL_TLS").removeAttr("disabled");
287  jQuery("#MAIN_MAIL_EMAIL_STARTTLS").val(' . getDolGlobalString('MAIN_MAIL_EMAIL_STARTTLS').');
288  jQuery("#MAIN_MAIL_EMAIL_STARTTLS").removeAttr("disabled");
289  jQuery("#MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED").val(' . getDolGlobalString('MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED').');
290  jQuery("#MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED").removeAttr("disabled");
291  jQuery("#MAIN_MAIL_EMAIL_DKIM_ENABLED").val(' . getDolGlobalString('MAIN_MAIL_EMAIL_DKIM_ENABLED').');
292  jQuery("#MAIN_MAIL_EMAIL_DKIM_ENABLED").removeAttr("disabled");
293  jQuery("#MAIN_MAIL_EMAIL_DKIM_DOMAIN").removeAttr("disabled");
294  jQuery("#MAIN_MAIL_EMAIL_DKIM_SELECTOR").removeAttr("disabled");
295  jQuery("#MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY").removeAttr("disabled");
296  jQuery("#MAIN_MAIL_EMAIL_DKIM_DOMAIN").show();
297  jQuery("#MAIN_MAIL_EMAIL_DKIM_SELECTOR").show();
298  jQuery("#MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY").show();
299  jQuery("#MAIN_MAIL_SMTP_SERVER").removeAttr("disabled");
300  jQuery("#MAIN_MAIL_SMTP_PORT").removeAttr("disabled");
301  jQuery("#MAIN_MAIL_SMTP_SERVER").show();
302  jQuery("#MAIN_MAIL_SMTP_PORT").show();
303  jQuery("#smtp_server_mess").hide();
304  jQuery("#smtp_port_mess").hide();
305  jQuery(".smtp_method").show();
306  jQuery(".dkim").show();
307  jQuery(".smtp_auth_method").show();
308  }
309  }
310  function change_smtp_auth_method() {
311  console.log("Call smtp auth method");
312  if (jQuery("#MAIN_MAIL_SENDMODE").val()==\'smtps\' && jQuery("#radio_oauth").prop("checked")) {
313  jQuery(".smtp_pw").hide();
314  jQuery(".smtp_oauth_service").show();
315  } else if (jQuery("#MAIN_MAIL_SENDMODE").val()==\'swiftmailer\' && jQuery("#radio_oauth").prop("checked")) {
316  jQuery(".smtp_pw").hide();
317  jQuery(".smtp_oauth_service").show();
318  } else if(jQuery("#MAIN_MAIL_SENDMODE").val()==\'mail\'){
319  jQuery(".smtp_pw").hide();
320  jQuery(".smtp_oauth_service").hide();
321  } else {
322  jQuery(".smtp_pw").show();
323  jQuery(".smtp_oauth_service").hide();
324  }
325  }
326  initfields();
327  change_smtp_auth_method();
328  jQuery("#MAIN_MAIL_SENDMODE").change(function() {
329  initfields();
330  change_smtp_auth_method();
331  });
332  jQuery("#radio_pw, #radio_plain, #radio_oauth").change(function() {
333  change_smtp_auth_method();
334  });
335  jQuery("#MAIN_MAIL_EMAIL_TLS").change(function() {
336  if (jQuery("#MAIN_MAIL_EMAIL_TLS").val() == 1)
337  jQuery("#MAIN_MAIL_EMAIL_STARTTLS").val(0);
338  else
339  jQuery("#MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED").val(0);
340  });
341  jQuery("#MAIN_MAIL_EMAIL_STARTTLS").change(function() {
342  if (jQuery("#MAIN_MAIL_EMAIL_STARTTLS").val() == 1)
343  jQuery("#MAIN_MAIL_EMAIL_TLS").val(0);
344  else
345  jQuery("#MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED").val(0);
346  });
347  })';
348  print '</script>'."\n";
349  }
350 
351  print '<form method="post" action="'.$_SERVER["PHP_SELF"].'">';
352  print '<input type="hidden" name="token" value="'.newToken().'">';
353  print '<input type="hidden" name="action" value="update">';
354 
355  print dol_get_fiche_head($head, 'common', '', -1);
356 
357  print '<span class="opacitymedium">'.$langs->trans("EMailsDesc")."</span><br>\n";
358  print "<br><br>\n";
359 
360 
361  clearstatcache();
362 
363 
364  print '<table class="noborder centpercent">';
365  print '<tr class="liste_titre"><td class="titlefieldmiddle">'.$langs->trans("Parameters").'</td><td></td></tr>';
366 
367  // Method
368  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SENDMODE").'</td><td>';
369 
370  // SuperAdministrator access only
371  if (!isModEnabled('multicompany') || ($user->admin && !$user->entity)) {
372  print $form->selectarray('MAIN_MAIL_SENDMODE', $listofmethods, getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'));
373  } else {
374  $text = $listofmethods[getDolGlobalString('MAIN_MAIL_SENDMODE')];
375  if (empty($text)) {
376  $text = $langs->trans("Undefined");
377  }
378  $htmltext = $langs->trans("ContactSuperAdminForChange");
379  print $form->textwithpicto($text, $htmltext, 1, 'superadmin');
380  print '<input type="hidden" name="MAIN_MAIL_SENDMODE" value="'.getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail').'">';
381  }
382  print '</td></tr>';
383 
384  // Host server
385  print '<tr class="oddeven hideonmodemail">';
386  if (!$conf->use_javascript_ajax && $linuxlike && getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail') {
387  print '<td>';
388  print $langs->trans("MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike");
389  print '</td><td>';
390  print '<span class="opacitymedium">'.$langs->trans("SeeLocalSendMailSetup").'</span>';
391  print '</td>';
392  } else {
393  print '<td>';
394  $mainserver = (getDolGlobalString('MAIN_MAIL_SMTP_SERVER') ? $conf->global->MAIN_MAIL_SMTP_SERVER : '');
395  $smtpserver = ini_get('SMTP') ? ini_get('SMTP') : $langs->transnoentities("Undefined");
396  if ($linuxlike) {
397  print $langs->trans("MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike");
398  } else {
399  print $langs->trans("MAIN_MAIL_SMTP_SERVER", $smtpserver);
400  }
401  print '</td><td>';
402  // SuperAdministrator access only
403  if (!isModEnabled('multicompany') || ($user->admin && !$user->entity)) {
404  print '<input class="flat minwidth300" id="MAIN_MAIL_SMTP_SERVER" name="MAIN_MAIL_SMTP_SERVER" value="'.$mainserver.'" autocomplete="off">';
405  print '<input type="hidden" id="MAIN_MAIL_SMTP_SERVER_sav" name="MAIN_MAIL_SMTP_SERVER_sav" value="'.$mainserver.'">';
406  print '<span id="smtp_server_mess" class="opacitymedium">'.$langs->trans("SeeLocalSendMailSetup").'</span>';
407  print ' <span class="opacitymedium smtp_method">'.$langs->trans("SeeLinkToOnlineDocumentation").'</span>';
408  } else {
409  $text = !empty($mainserver) ? $mainserver : $smtpserver;
410  $htmltext = $langs->trans("ContactSuperAdminForChange");
411  print $form->textwithpicto($text, $htmltext, 1, 'superadmin');
412  print '<input type="hidden" id="MAIN_MAIL_SMTP_SERVER" name="MAIN_MAIL_SMTP_SERVER" value="'.$mainserver.'">';
413  }
414  print '</td>';
415  }
416  print '</tr>';
417 
418  // Port
419  print '<tr class="oddeven hideonmodemail"><td>';
420  if (!$conf->use_javascript_ajax && $linuxlike && getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail') {
421  print $langs->trans("MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike");
422  print '</td><td>';
423  print '<span class="opacitymedium">'.$langs->trans("SeeLocalSendMailSetup").'</span>';
424  } else {
425  $mainport = (getDolGlobalString('MAIN_MAIL_SMTP_PORT') ? $conf->global->MAIN_MAIL_SMTP_PORT : '');
426  $smtpport = ini_get('smtp_port') ? ini_get('smtp_port') : $langs->transnoentities("Undefined");
427  if ($linuxlike) {
428  print $langs->trans("MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike");
429  } else {
430  print $langs->trans("MAIN_MAIL_SMTP_PORT", $smtpport);
431  }
432  print '</td><td>';
433  // SuperAdministrator access only
434  if (!isModEnabled('multicompany') || ($user->admin && !$user->entity)) {
435  print '<input class="flat" id="MAIN_MAIL_SMTP_PORT" name="MAIN_MAIL_SMTP_PORT" size="3" value="'.$mainport.'">';
436  print '<input type="hidden" id="MAIN_MAIL_SMTP_PORT_sav" name="MAIN_MAIL_SMTP_PORT_sav" value="'.$mainport.'">';
437  print '<span id="smtp_port_mess" class="opacitymedium">'.$langs->trans("SeeLocalSendMailSetup").'</span>';
438  } else {
439  $text = (!empty($mainport) ? $mainport : $smtpport);
440  $htmltext = $langs->trans("ContactSuperAdminForChange");
441  print $form->textwithpicto($text, $htmltext, 1, 'superadmin');
442  print '<input type="hidden" id="MAIN_MAIL_SMTP_PORT" name="MAIN_MAIL_SMTP_PORT" value="'.$mainport.'">';
443  }
444  }
445  print '</td></tr>';
446 
447  // Auth mode
448  if (!empty($conf->use_javascript_ajax) || (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer')))) {
449  print '<tr class="oddeven smtp_auth_method"><td>'.$langs->trans("MAIN_MAIL_SMTPS_AUTH_TYPE").'</td><td>';
450  if (!isModEnabled('multicompany') || ($user->admin && !$user->entity)) {
451  // Note: Default value for MAIN_MAIL_SMTPS_AUTH_TYPE if not defined is 'LOGIN' (but login/pass may be empty and they won't be provided in such a case)
452  print '<input type="radio" id="radio_pw" name="MAIN_MAIL_SMTPS_AUTH_TYPE" value="LOGIN"'.(getDolGlobalString('MAIN_MAIL_SMTPS_AUTH_TYPE', 'LOGIN') == 'LOGIN' ? ' checked' : '').'> ';
453  print '<label for="radio_pw" >'.$langs->trans("UseAUTHLOGIN").'</label>';
454  print '&nbsp; &nbsp; &nbsp;';
455  print '<input type="radio" id="radio_plain" name="MAIN_MAIL_SMTPS_AUTH_TYPE" value="PLAIN"'.(getDolGlobalString('MAIN_MAIL_SMTPS_AUTH_TYPE', 'PLAIN') == 'PLAIN' ? ' checked' : '').'> ';
456  print '<label for="radio_plain" >'.$langs->trans("UseAUTHPLAIN").'</label>';
457  print '&nbsp; &nbsp; &nbsp;';
458  print '<input type="radio" id="radio_oauth" name="MAIN_MAIL_SMTPS_AUTH_TYPE" value="XOAUTH2"'.(getDolGlobalString('MAIN_MAIL_SMTPS_AUTH_TYPE') == 'XOAUTH2' ? ' checked' : '').'> ';
459  print '<label for="radio_oauth" >'.$form->textwithpicto($langs->trans("UseOauth"), $langs->trans("OauthNotAvailableForAllAndHadToBeCreatedBefore")).'</label>';
460  } else {
461  $value = getDolGlobalString('MAIN_MAIL_SMTPS_AUTH_TYPE', 'LOGIN');
462  $htmltext = $langs->trans("ContactSuperAdminForChange");
463  print $form->textwithpicto($langs->trans("MAIN_MAIL_SMTPS_AUTH_TYPE"), $htmltext, 1, 'superadmin');
464  print '<input type="hidden" id="MAIN_MAIL_SMTPS_AUTH_TYPE" name="MAIN_MAIL_SMTPS_AUTH_TYPE" value="'.$value.'">';
465  }
466  print '</td></tr>';
467  }
468 
469  // ID
470  if (!empty($conf->use_javascript_ajax) || (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer')))) {
471  $mainstmpid = (getDolGlobalString('MAIN_MAIL_SMTPS_ID') ? $conf->global->MAIN_MAIL_SMTPS_ID : '');
472  print '<tr class="drag drop oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTPS_ID").'</td><td>';
473  // SuperAdministrator access only
474  if (!isModEnabled('multicompany') || ($user->admin && !$user->entity)) {
475  print '<input class="flat" name="MAIN_MAIL_SMTPS_ID" size="32" value="'.$mainstmpid.'">';
476  } else {
477  $htmltext = $langs->trans("ContactSuperAdminForChange");
478  print $form->textwithpicto($conf->global->MAIN_MAIL_SMTPS_ID, $htmltext, 1, 'superadmin');
479  print '<input type="hidden" name="MAIN_MAIL_SMTPS_ID" value="'.$mainstmpid.'">';
480  }
481  print '</td></tr>';
482  }
483 
484 
485  // PW
486  if (!empty($conf->use_javascript_ajax) || (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer')))) {
487  $mainsmtppw = (getDolGlobalString('MAIN_MAIL_SMTPS_PW') ? $conf->global->MAIN_MAIL_SMTPS_PW : '');
488  print '<tr class="drag drop oddeven smtp_pw"><td>';
489  print $form->textwithpicto($langs->trans("MAIN_MAIL_SMTPS_PW"), $langs->trans("WithGMailYouCanCreateADedicatedPassword"));
490  print '</td><td>';
491  // SuperAdministrator access only
492  if (!isModEnabled('multicompany') || ($user->admin && !$user->entity)) {
493  print '<input class="flat" type="password" name="MAIN_MAIL_SMTPS_PW" size="32" value="' . htmlspecialchars($mainsmtppw, ENT_COMPAT, 'UTF-8') . '" autocomplete="off">';
494  } else {
495  $htmltext = $langs->trans("ContactSuperAdminForChange");
496  print $form->textwithpicto($conf->global->MAIN_MAIL_SMTPS_PW, $htmltext, 1, 'superadmin');
497  print '<input type="hidden" name="MAIN_MAIL_SMTPS_PW" value="' . htmlspecialchars($mainsmtppw, ENT_COMPAT, 'UTF-8') . '">';
498  }
499  print '</td></tr>';
500  }
501 
502  // OAUTH service provider
503  if (!empty($conf->use_javascript_ajax) || (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer')))) {
504  print '<tr class="oddeven smtp_oauth_service"><td>'.$langs->trans("MAIN_MAIL_SMTPS_OAUTH_SERVICE").'</td><td>';
505 
506  // SuperAdministrator access only
507  if (!isModEnabled('multicompany') || ($user->admin && !$user->entity)) {
508  print $form->selectarray('MAIN_MAIL_SMTPS_OAUTH_SERVICE', $oauthservices, $conf->global->MAIN_MAIL_SMTPS_OAUTH_SERVICE);
509  } else {
510  $text = $oauthservices[getDolGlobalString('MAIN_MAIL_SMTPS_OAUTH_SERVICE')];
511  if (empty($text)) {
512  $text = $langs->trans("Undefined");
513  }
514  $htmltext = $langs->trans("ContactSuperAdminForChange");
515  print $form->textwithpicto($text, $htmltext, 1, 'superadmin');
516  print '<input type="hidden" name="MAIN_MAIL_SMTPS_OAUTH_SERVICE" value="' . getDolGlobalString('MAIN_MAIL_SMTPS_OAUTH_SERVICE').'">';
517  }
518  print '</td></tr>';
519  }
520 
521  // TLS
522  print '<tr class="oddeven hideonmodemail"><td>'.$langs->trans("MAIN_MAIL_EMAIL_TLS").'</td><td>';
523  if (!empty($conf->use_javascript_ajax) || (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer')))) {
524  if (function_exists('openssl_open')) {
525  print $form->selectyesno('MAIN_MAIL_EMAIL_TLS', (getDolGlobalString('MAIN_MAIL_EMAIL_TLS') ? $conf->global->MAIN_MAIL_EMAIL_TLS : 0), 1);
526  } else {
527  print yn(0).' ('.$langs->trans("YourPHPDoesNotHaveSSLSupport").')';
528  }
529  } else {
530  print yn(0).' ('.$langs->trans("NotSupported").')';
531  }
532  print '</td></tr>';
533 
534  // STARTTLS
535  print '<tr class="oddeven hideonmodemail"><td>'.$langs->trans("MAIN_MAIL_EMAIL_STARTTLS").'</td><td>';
536  if (!empty($conf->use_javascript_ajax) || (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer')))) {
537  if (function_exists('openssl_open')) {
538  print $form->selectyesno('MAIN_MAIL_EMAIL_STARTTLS', (getDolGlobalString('MAIN_MAIL_EMAIL_STARTTLS') ? $conf->global->MAIN_MAIL_EMAIL_STARTTLS : 0), 1);
539  } else {
540  print yn(0).' ('.$langs->trans("YourPHPDoesNotHaveSSLSupport").')';
541  }
542  } else {
543  print yn(0).' ('.$langs->trans("NotSupported").')';
544  }
545  print '</td></tr>';
546 
547  // SMTP_ALLOW_SELF_SIGNED
548  print '<tr class="oddeven hideonmodemail"><td>'.$langs->trans("MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED").'</td><td>';
549  if (!empty($conf->use_javascript_ajax) || (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer')))) {
550  if (function_exists('openssl_open')) {
551  print $form->selectyesno('MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED', (getDolGlobalString('MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED') ? $conf->global->MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED : 0), 1);
552  } else {
553  print yn(0).' ('.$langs->trans("YourPHPDoesNotHaveSSLSupport").')';
554  }
555  } else {
556  print yn(0).' ('.$langs->trans("NotSupported").')';
557  }
558  print '</td></tr>';
559 
560  // DKIM
561  print '<tr class="oddeven dkim"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_ENABLED").'</td><td>';
562  if (!empty($conf->use_javascript_ajax) || (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('swiftmailer')))) {
563  if (function_exists('openssl_open')) {
564  print $form->selectyesno('MAIN_MAIL_EMAIL_DKIM_ENABLED', (getDolGlobalString('MAIN_MAIL_EMAIL_DKIM_ENABLED') ? $conf->global->MAIN_MAIL_EMAIL_DKIM_ENABLED : 0), 1);
565  } else {
566  print yn(0).' ('.$langs->trans("YourPHPDoesNotHaveSSLSupport").')';
567  }
568  } else {
569  print yn(0).' ('.$langs->trans("NotSupported").')';
570  }
571  print '</td></tr>';
572 
573  // DKIM Domain
574  print '<tr class="oddeven dkim"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_DOMAIN").'</td>';
575  print '<td><input class="flat" id="MAIN_MAIL_EMAIL_DKIM_DOMAIN" name="MAIN_MAIL_EMAIL_DKIM_DOMAIN" size="32" value="'.(getDolGlobalString('MAIN_MAIL_EMAIL_DKIM_DOMAIN') ? $conf->global->MAIN_MAIL_EMAIL_DKIM_DOMAIN : '');
576  print '"></td></tr>';
577 
578  // DKIM Selector
579  print '<tr class="oddeven dkim"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_SELECTOR").'</td>';
580  print '<td><input class="flat" id="MAIN_MAIL_EMAIL_DKIM_SELECTOR" name="MAIN_MAIL_EMAIL_DKIM_SELECTOR" size="32" value="'.(getDolGlobalString('MAIN_MAIL_EMAIL_DKIM_SELECTOR') ? $conf->global->MAIN_MAIL_EMAIL_DKIM_SELECTOR : '');
581  print '"></td></tr>';
582 
583  // DKIM PRIVATE KEY
584  print '<tr class="oddeven dkim"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY").'</td>';
585  print '<td><textarea id="MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY" name="MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY" rows="15" cols="100">'.(getDolGlobalString('MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY') ? $conf->global->MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY : '').'</textarea>';
586  print '</td></tr>';
587 
588  print '</table>';
589 
590 
591  print '<br>';
592 
593 
594  print '<table class="noborder centpercent">';
595  print '<tr class="liste_titre"><td class="titlefieldmiddle">'.$langs->trans("ParametersForTestEnvironment").'</td><td>'.$langs->trans("Value").'</td></tr>';
596 
597  // Disable
598  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_DISABLE_ALL_MAILS").'</td><td>';
599  print $form->selectyesno('MAIN_DISABLE_ALL_MAILS', getDolGlobalString('MAIN_DISABLE_ALL_MAILS'), 1);
600  print '</td></tr>';
601 
602  // Force e-mail recipient
603  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_FORCE_SENDTO").'</td><td>';
604  print '<input class="flat" name="MAIN_MAIL_FORCE_SENDTO" size="32" value="'.(getDolGlobalString('MAIN_MAIL_FORCE_SENDTO') ? $conf->global->MAIN_MAIL_FORCE_SENDTO : '').'" />';
605  print '</td></tr>';
606 
607  print '</table>';
608 
609 
610  print '<br>';
611 
612 
613  print '<table class="noborder centpercent">';
614  print '<tr class="liste_titre"><td class="titlefieldmiddle">'.$langs->trans("OtherOptions").'</td><td></td></tr>';
615 
616  // From
617  $help = $form->textwithpicto('', $langs->trans("EMailHelpMsgSPFDKIM"));
618  print '<tr class="oddeven"><td class="fieldrequired">';
619  print $langs->trans("MAIN_MAIL_EMAIL_FROM", ini_get('sendmail_from') ? ini_get('sendmail_from') : $langs->transnoentities("Undefined"));
620  print ' '.$help;
621  print '</td>';
622  print '<td><input class="flat minwidth200" name="MAIN_MAIL_EMAIL_FROM" value="'.(getDolGlobalString('MAIN_MAIL_EMAIL_FROM') ? $conf->global->MAIN_MAIL_EMAIL_FROM : '');
623  print '"></td></tr>';
624 
625  // Default from type
626  $liste = array();
627  $liste['user'] = $langs->trans('UserEmail');
628  $liste['company'] = $langs->trans('CompanyEmail').' ('.(!getDolGlobalString('MAIN_INFO_SOCIETE_MAIL') ? $langs->trans("NotDefined") : $conf->global->MAIN_INFO_SOCIETE_MAIL).')';
629 
630  print '<tr class="oddeven"><td>'.$langs->trans('MAIN_MAIL_DEFAULT_FROMTYPE').'</td><td>';
631  print $form->selectarray('MAIN_MAIL_DEFAULT_FROMTYPE', $liste, getDolGlobalString('MAIN_MAIL_DEFAULT_FROMTYPE'), 0);
632  print '</td></tr>';
633 
634  // From
635  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_ERRORS_TO").'</td>';
636  print '<td><input class="flat width300" name="MAIN_MAIL_ERRORS_TO" value="'.getDolGlobalString('MAIN_MAIL_ERRORS_TO').'">';
637  print '</td></tr>';
638 
639  // Autocopy to
640  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_AUTOCOPY_TO").'</td>';
641  print '<td><input class="flat width300" name="MAIN_MAIL_AUTOCOPY_TO" value="'.getDolGlobalString('MAIN_MAIL_AUTOCOPY_TO').'">';
642  print '</td></tr>';
643 
644  // Add user to select destinaries list
645  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_ENABLED_USER_DEST_SELECT").'</td><td>';
646  print $form->selectyesno('MAIN_MAIL_ENABLED_USER_DEST_SELECT', getDolGlobalString('MAIN_MAIL_ENABLED_USER_DEST_SELECT'), 1);
647  print '</td></tr>';
648  // Disable autoselect to
649  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_NO_WITH_TO_SELECTED").'</td><td>';
650  print $form->selectyesno('MAIN_MAIL_NO_WITH_TO_SELECTED', getDolGlobalString('MAIN_MAIL_NO_WITH_TO_SELECTED'), 1);
651  print '</td></tr>';
652 
653  print '</table>';
654 
655  print dol_get_fiche_end();
656 
657  print $form->buttonsSaveCancel();
658 
659  print '</form>';
660 } else {
661  print dol_get_fiche_head($head, 'common', '', -1);
662 
663  print '<span class="opacitymedium">'.$langs->trans("EMailsDesc")."</span><br>\n";
664  print "<br><br>\n";
665 
666  if (!getDolGlobalString('MAIN_DISABLE_ALL_MAILS')) {
667  print '<div class="div-table-responsive-no-min">'; // You can use div-table-responsive-no-min if you don't need reserved height for your table
668  print '<table class="noborder centpercent">';
669  print '<tr class="liste_titre"><td class="titlefieldmiddle">'.$langs->trans("Parameters").'</td><td></td></tr>';
670 
671  // Method
672  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SENDMODE").'</td><td>';
673  $text = $listofmethods[getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail')];
674  if (empty($text)) {
675  $text = $langs->trans("Undefined").img_warning();
676  }
677  print $text;
678 
679  if (getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail' && !getDolGlobalString('MAIN_HIDE_WARNING_TO_ENCOURAGE_SMTP_SETUP')) {
680  $textwarning = $langs->trans("WarningPHPMail").'<br>'.$langs->trans("WarningPHPMailA").'<br>'.$langs->trans("WarningPHPMailB").'<br>'.$langs->trans("WarningPHPMailC").'<br><br>'.$langs->trans("WarningPHPMailD");
681  print $form->textwithpicto('', '<span class="small">'.$textwarning.'</span>', 1, 'warning', 'nomargintop');
682  }
683 
684  print '</td></tr>';
685 
686  // Host server
687  if ($linuxlike && (getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail')) {
688  //print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike").'</td><td><span class="opacitymedium">'.$langs->trans("SeeLocalSendMailSetup").'</span></td></tr>';
689  } else {
690  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTP_SERVER", ini_get('SMTP') ? ini_get('SMTP') : $langs->transnoentities("Undefined")).'</td><td>'.(getDolGlobalString('MAIN_MAIL_SMTP_SERVER') ? $conf->global->MAIN_MAIL_SMTP_SERVER : '').'</td></tr>';
691  }
692 
693 
694  // Port
695  if ($linuxlike && (getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail')) {
696  //print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike").'</td><td><span class="opacitymedium">'.$langs->trans("SeeLocalSendMailSetup").'</span></td></tr>';
697  } else {
698  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTP_PORT", ini_get('smtp_port') ? ini_get('smtp_port') : $langs->transnoentities("Undefined")).'</td><td>'.(getDolGlobalString('MAIN_MAIL_SMTP_PORT') ? $conf->global->MAIN_MAIL_SMTP_PORT : '').'</td></tr>';
699  }
700 
701  // AUTH method
702  if (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer'))) {
703  $authtype = getDolGlobalString('MAIN_MAIL_SMTPS_AUTH_TYPE', 'LOGIN');
704  $text = '';
705  if ($authtype === "LOGIN") {
706  $text = $langs->trans("UseAUTHLOGIN");
707  } elseif ($authtype === "PLAIN") {
708  $text = $langs->trans("UseAUTHPLAIN");
709  } elseif ($authtype === "XOAUTH2") {
710  $text = $langs->trans("UseOauth");
711  }
712  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTPS_AUTH_TYPE").'</td><td>'.$text.'</td></tr>';
713  }
714 
715  // SMTPS ID
716  if (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer'))) {
717  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTPS_ID").'</td><td>' . getDolGlobalString('MAIN_MAIL_SMTPS_ID').'</td></tr>';
718  }
719 
720  // SMTPS PW
721  if (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer')) && getDolGlobalString('MAIN_MAIL_SMTPS_AUTH_TYPE') != "XOAUTH2") {
722  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTPS_PW").'</td><td>'.preg_replace('/./', '*', getDolGlobalString('MAIN_MAIL_SMTPS_PW')).'</td></tr>';
723  }
724 
725  // SMTPS oauth service
726  if (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer')) && getDolGlobalString('MAIN_MAIL_SMTPS_AUTH_TYPE') === "XOAUTH2") {
727  $text = $oauthservices[getDolGlobalString('MAIN_MAIL_SMTPS_OAUTH_SERVICE')];
728  if (empty($text)) {
729  $text = $langs->trans("Undefined").img_warning();
730  }
731  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTPS_OAUTH_SERVICE").'</td><td>'.$text.'</td></tr>';
732  }
733 
734  // TLS
735  if ($linuxlike && (getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail')) {
736  // Nothing
737  } else {
738  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_TLS").'</td><td>';
739  if (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer'))) {
740  if (function_exists('openssl_open')) {
741  print yn(getDolGlobalString('MAIN_MAIL_EMAIL_TLS'));
742  } else {
743  print yn(0).' ('.$langs->trans("YourPHPDoesNotHaveSSLSupport").')';
744  }
745  } else {
746  print '<span class="opacitymedium">'.yn(0).' ('.$langs->trans("NotSupported").')</span>';
747  }
748  print '</td></tr>';
749  }
750 
751  // STARTTLS
752  if ($linuxlike && (getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail')) {
753  // Nothing
754  } else {
755  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_STARTTLS").'</td><td>';
756  if (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer'))) {
757  if (function_exists('openssl_open')) {
758  print yn(getDolGlobalString('MAIN_MAIL_EMAIL_STARTTLS'));
759  } else {
760  print yn(0).' ('.$langs->trans("YourPHPDoesNotHaveSSLSupport").')';
761  }
762  } else {
763  //print '<span class="opacitymedium">'.yn(0).' ('.$langs->trans("NotSupported").')</span>';
764  }
765  print '</td></tr>';
766  }
767 
768  // SMTP_ALLOW_SELF_SIGNED
769  if ($linuxlike && (getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail')) {
770  // Nothing
771  } else {
772  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED").'</td><td>';
773  if (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('smtps', 'swiftmailer'))) {
774  if (function_exists('openssl_open')) {
775  print yn(getDolGlobalString('MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED'));
776  } else {
777  print yn(0).' ('.$langs->trans("YourPHPDoesNotHaveSSLSupport").')';
778  }
779  } else {
780  print '<span class="opacitymedium">'.yn(0).' ('.$langs->trans("NotSupported").')</span>';
781  }
782  print '</td></tr>';
783  }
784 
785  if (getDolGlobalString('MAIN_MAIL_SENDMODE') == 'swiftmailer') {
786  // DKIM
787  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_ENABLED").'</td><td>';
788  if (in_array(getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail'), array('swiftmailer'))) {
789  if (function_exists('openssl_open')) {
790  print yn(getDolGlobalInt('MAIN_MAIL_EMAIL_DKIM_ENABLED'));
791  } else {
792  print yn(0).' ('.$langs->trans("YourPHPDoesNotHaveSSLSupport").')';
793  }
794  } else {
795  print yn(0).' ('.$langs->trans("NotSupported").')';
796  }
797  print '</td></tr>';
798 
799  // Domain
800  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_DOMAIN").'</td>';
801  print '<td>'.getDolGlobalString('MAIN_MAIL_EMAIL_DKIM_DOMAIN');
802  print '</td></tr>';
803 
804  // Selector
805  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_SELECTOR").'</td>';
806  print '<td>'.getDolGlobalString('MAIN_MAIL_EMAIL_DKIM_SELECTOR');
807  print '</td></tr>';
808 
809  // PRIVATE KEY
810  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY").'</td>';
811  print '<td>'.getDolGlobalString('MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY');
812  print '</td></tr>';
813  }
814 
815  print '</table>';
816  print '</div>';
817 
818  if (getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail' && !getDolGlobalString('MAIN_HIDE_WARNING_TO_ENCOURAGE_SMTP_SETUP')) {
819  $messagetoshow = $langs->trans("WarningPHPMail").'<br>'.$langs->trans("WarningPHPMailA").'<br>'.$langs->trans("WarningPHPMailB").'<br>'.$langs->trans("WarningPHPMailC").'<br><br>'.$langs->trans("WarningPHPMailD");
820  $messagetoshow .= ' '.$langs->trans("WarningPHPMailDbis", '{s1}', '{s2}');
821  $linktosetvar1 = '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=disablephpmailwarning&token='.newToken().'">';
822  $linktosetvar2 = '</a>';
823  $messagetoshow = str_replace('{s1}', $linktosetvar1, $messagetoshow);
824  $messagetoshow = str_replace('{s2}', $linktosetvar2, $messagetoshow);
825  //print $messagetoshow;
826  print info_admin($messagetoshow, 0, 0, 'warning nomargintop');
827  }
828 
829  print '<br>';
830 
831 
832  print '<div class="div-table-responsive-no-min">'; // You can use div-table-responsive-no-min if you don't need reserved height for your table
833  print '<table class="noborder centpercent">';
834  print '<tr class="liste_titre"><td class="titlefieldmiddle">'.$langs->trans("ParametersForTestEnvironment").'</td><td>'.$langs->trans("Value").'</td></tr>';
835 
836  // Disable
837  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_DISABLE_ALL_MAILS").'</td><td>'.yn(getDolGlobalString('MAIN_DISABLE_ALL_MAILS'));
838  if (getDolGlobalString('MAIN_DISABLE_ALL_MAILS')) {
839  print img_warning($langs->trans("Disabled"));
840  }
841  print '</td></tr>';
842 
843  if (!getDolGlobalString('MAIN_DISABLE_ALL_MAILS')) {
844  // Force e-mail recipient
845  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_FORCE_SENDTO").'</td><td>'.getDolGlobalString('MAIN_MAIL_FORCE_SENDTO');
846  if (getDolGlobalString('MAIN_MAIL_FORCE_SENDTO')) {
847  if (!isValidEmail(getDolGlobalString('MAIN_MAIL_FORCE_SENDTO'))) {
848  print img_warning($langs->trans("ErrorBadEMail"));
849  } else {
850  print img_warning($langs->trans("RecipientEmailsWillBeReplacedWithThisValue"));
851  }
852  }
853  print '</td></tr>';
854  }
855 
856  print '</table>';
857  print '</div>';
858 
859 
860  print '<br>';
861 
862 
863  print '<div class="div-table-responsive-no-min">'; // You can use div-table-responsive-no-min if you don't need reserved height for your table
864  print '<table class="noborder centpercent">';
865  print '<tr class="liste_titre"><td class="titlefieldmiddle">'.$langs->trans("OtherOptions").'</td><td></td></tr>';
866 
867  // From
868  $help = $form->textwithpicto('', $langs->trans("EMailHelpMsgSPFDKIM"));
869  print '<tr class="oddeven"><td>';
870  print $langs->trans("MAIN_MAIL_EMAIL_FROM", ini_get('sendmail_from') ? ini_get('sendmail_from') : $langs->transnoentities("Undefined"));
871  print ' '.$help;
872  print '</td>';
873  print '<td>' . getDolGlobalString('MAIN_MAIL_EMAIL_FROM');
874  if (!getDolGlobalString('MAIN_MAIL_EMAIL_FROM')) {
875  print img_warning($langs->trans("Mandatory"));
876  } elseif (!isValidEmail($conf->global->MAIN_MAIL_EMAIL_FROM)) {
877  print img_warning($langs->trans("ErrorBadEMail"));
878  }
879  print '</td></tr>';
880 
881  // Default from type
882  $liste = array();
883  $liste['user'] = $langs->trans('UserEmail');
884  $liste['company'] = $langs->trans('CompanyEmail').' ('.(!getDolGlobalString('MAIN_INFO_SOCIETE_MAIL') ? $langs->trans("NotDefined") : $conf->global->MAIN_INFO_SOCIETE_MAIL).')';
885  $sql = 'SELECT rowid, label, email FROM '.MAIN_DB_PREFIX.'c_email_senderprofile';
886  $sql .= ' WHERE active = 1 AND (private = 0 OR private = '.((int) $user->id).')';
887  $resql = $db->query($sql);
888  if ($resql) {
889  $num = $db->num_rows($resql);
890  $i = 0;
891  while ($i < $num) {
892  $obj = $db->fetch_object($resql);
893  if ($obj) {
894  $liste['senderprofile_'.$obj->rowid] = $obj->label.' <'.$obj->email.'>';
895  }
896  $i++;
897  }
898  } else {
899  dol_print_error($db);
900  }
901 
902  print '<tr class="oddeven"><td>'.$langs->trans('MAIN_MAIL_DEFAULT_FROMTYPE').'</td>';
903  print '<td>';
904  if (getDolGlobalString('MAIN_MAIL_DEFAULT_FROMTYPE') === 'robot') {
905  print $langs->trans('RobotEmail');
906  } elseif (getDolGlobalString('MAIN_MAIL_DEFAULT_FROMTYPE') === 'user') {
907  print $langs->trans('UserEmail');
908  } elseif (getDolGlobalString('MAIN_MAIL_DEFAULT_FROMTYPE') === 'company') {
909  print $langs->trans('CompanyEmail').' '.dol_escape_htmltag('<'.$mysoc->email.'>');
910  } else {
911  $id = preg_replace('/senderprofile_/', '', getDolGlobalString('MAIN_MAIL_DEFAULT_FROMTYPE'));
912  if ($id > 0) {
913  include_once DOL_DOCUMENT_ROOT.'/core/class/emailsenderprofile.class.php';
914  $emailsenderprofile = new EmailSenderProfile($db);
915  $emailsenderprofile->fetch($id);
916  print $emailsenderprofile->label.' '.dol_escape_htmltag('<'.$emailsenderprofile->email.'>');
917  }
918  }
919  print '</td></tr>';
920 
921  // Errors To
922  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_ERRORS_TO").'</td>';
923  print '<td>'.(getDolGlobalString('MAIN_MAIL_ERRORS_TO'));
924  if (getDolGlobalString('MAIN_MAIL_ERRORS_TO') && !isValidEmail($conf->global->MAIN_MAIL_ERRORS_TO)) {
925  print img_warning($langs->trans("ErrorBadEMail"));
926  }
927  print '</td></tr>';
928 
929  // Autocopy to
930  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_AUTOCOPY_TO").'</td>';
931  print '<td>';
932  if (getDolGlobalString('MAIN_MAIL_AUTOCOPY_TO')) {
933  $listofemail = explode(',', getDolGlobalString('MAIN_MAIL_AUTOCOPY_TO'));
934  $i = 0;
935  foreach ($listofemail as $key => $val) {
936  if ($i) {
937  print ', ';
938  }
939  $val = trim($val);
940  print $val;
941  if (!isValidEmail($val, 0, 1)) {
942  print img_warning($langs->trans("ErrorBadEMail", $val));
943  }
944  $i++;
945  }
946  } else {
947  print '&nbsp;';
948  }
949  print '</td></tr>';
950 
951  //Add user to select destinaries list
952  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_ENABLED_USER_DEST_SELECT").'</td><td>'.yn(getDolGlobalString('MAIN_MAIL_ENABLED_USER_DEST_SELECT')).'</td></tr>';
953  //Disable autoselect to
954  print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_NO_WITH_TO_SELECTED").'</td><td>'.yn(getDolGlobalString('MAIN_MAIL_NO_WITH_TO_SELECTED')).'</td></tr>';
955 
956  print '</table>';
957  print '</div>';
958  }
959 
960  print dol_get_fiche_end();
961 
962 
963  // Actions button
964  print '<div class="tabsAction">';
965 
966  print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit&token='.newToken().'">'.$langs->trans("Modify").'</a>';
967 
968  if (!getDolGlobalString('MAIN_DISABLE_ALL_MAILS')) {
969  if (getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') != 'mail' || !$linuxlike) {
970  if (function_exists('fsockopen') && $port && $server) {
971  print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=testconnect&date='.dol_now().'#formmailaftertstconnect">'.$langs->trans("DoTestServerAvailability").'</a>';
972  }
973  } else {
974  //print '<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("FeatureNotAvailableOnLinux").'">'.$langs->trans("DoTestServerAvailability").'</a>';
975  }
976 
977  print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=test&mode=init#formmailbeforetitle">'.$langs->trans("DoTestSend").'</a>';
978 
979  if (isModEnabled('fckeditor')) {
980  print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=testhtml&mode=init#formmailbeforetitle">'.$langs->trans("DoTestSendHTML").'</a>';
981  }
982  }
983 
984  print '</div>';
985 
986 
987  if (getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail' && !getDolGlobalString('MAIN_FIX_FOR_BUGGED_MTA')) {
988  /*
989  // Warning 1
990  if ($linuxlike)
991  {
992  $sendmailoption=ini_get('mail.force_extra_parameters');
993  if (empty($sendmailoption) || ! preg_match('/ba/',$sendmailoption))
994  {
995  print info_admin($langs->trans("SendmailOptionNotComplete"));
996  }
997  }*/
998  // Warning 2
999  print info_admin($langs->trans("SendmailOptionMayHurtBuggedMTA"));
1000  }
1001 
1002  if (!in_array($action, array('testconnect', 'test', 'testhtml'))) {
1003  $text = '';
1004  if (getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail') {
1005  //$text .= $langs->trans("WarningPHPMail"); // To encourage to use SMTPS
1006  }
1007 
1008  if (getDolGlobalString('MAIN_MAIL_SENDMODE', 'mail') == 'mail') {
1009  if (getDolGlobalString('MAIN_EXTERNAL_MAIL_SPF_STRING_TO_ADD')) {
1010  // List of string to add in SPF if the setup use the mail method. Example 'include:sendgrid.net include:spf.mydomain.com'
1011  $text .= ($text ? '<br><br>' : '').$langs->trans("WarningPHPMailSPF", getDolGlobalString('MAIN_EXTERNAL_MAIL_SPF_STRING_TO_ADD'));
1012  } else {
1013  // MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS is list of IPs where email is sent from. Example: '1.2.3.4, [aaaa:bbbb:cccc:dddd]'.
1014  if (getDolGlobalString('MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS')) {
1015  // List of IP show as record to add in SPF if we use the mail method
1016  $text .= ($text ? '<br><br>' : '').$langs->trans("WarningPHPMailSPF", getDolGlobalString('MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS'));
1017  }
1018  }
1019  } else {
1020  if (getDolGlobalString('MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS')) {
1021  // List of IP show as record to add as allowed IP if we use the smtp method. Value is '1.2.3.4, [aaaa:bbbb:cccc:dddd]'
1022  // TODO Add a key to allow to show the IP/name of server detected dynamically
1023  $text .= ($text ? '<br><br>' : '').$langs->trans("WarningPHPMail2", getDolGlobalString('MAIN_EXTERNAL_SMTP_CLIENT_IP_ADDRESS'));
1024  }
1025  if (getDolGlobalString('MAIN_EXTERNAL_SMTP_SPF_STRING_TO_ADD')) { // Should be required only if you have preset the Dolibarr to use your own SMTP and you want to warn users to update their domain name to match your SMTP server.
1026  // List of string to add in SPF if we use the smtp method. Example 'include:spf.mydomain.com'
1027  $text .= ($text ? '<br><br>' : '').$langs->trans("WarningPHPMailSPF", getDolGlobalString('MAIN_EXTERNAL_SMTP_SPF_STRING_TO_ADD'));
1028  }
1029  }
1030  // Test SPF email company
1031  $companyemail = getDolGlobalString('MAIN_INFO_SOCIETE_MAIL');
1032  $dnsinfo = false;
1033  if (!empty($companyemail) && function_exists('dns_get_record') && !getDolGlobalString('MAIN_DISABLE_DNS_GET_RECORD')) {
1034  $arrayofemailparts = explode('@', $companyemail);
1035  if (count($arrayofemailparts) == 2) {
1036  $domain = $arrayofemailparts[1];
1037  $dnsinfo = dns_get_record($domain, DNS_TXT);
1038  }
1039  }
1040  if (!empty($dnsinfo) && is_array($dnsinfo)) {
1041  foreach ($dnsinfo as $info) {
1042  if (strpos($info['txt'], 'v=spf') !== false) {
1043  $text .= ($text ? '<br><br>' : '').$langs->trans("ActualMailSPFRecordFound", $companyemail, $info['txt']);
1044  }
1045  }
1046  }
1047  // Test SPF default automatic email from
1048  $defaultnoreplyemail = getDolGlobalString('MAIN_MAIL_EMAIL_FROM');
1049  if ($defaultnoreplyemail != $companyemail) { // We show if email differs
1050  $dnsinfo = false;
1051  if (!empty($defaultnoreplyemail) && function_exists('dns_get_record') && !getDolGlobalString('MAIN_DISABLE_DNS_GET_RECORD')) {
1052  $arrayofemailparts = explode('@', $defaultnoreplyemail);
1053  if (count($arrayofemailparts) == 2) {
1054  $domain = $arrayofemailparts[1];
1055  $dnsinfo = dns_get_record($domain, DNS_TXT);
1056  }
1057  }
1058  if (!empty($dnsinfo) && is_array($dnsinfo)) {
1059  foreach ($dnsinfo as $info) {
1060  if (strpos($info['txt'], 'v=spf') !== false) {
1061  $text .= ($text ? '<br><br>' : '').$langs->trans("ActualMailSPFRecordFound", $defaultnoreplyemail, $info['txt']);
1062  }
1063  }
1064  }
1065  }
1066 
1067 
1068  if ($text) {
1069  print info_admin($text);
1070  }
1071  }
1072 
1073  // Run the test to connect
1074  if ($action == 'testconnect') {
1075  print '<div id="formmailaftertstconnect" name="formmailaftertstconnect"></div>';
1076  print load_fiche_titre($langs->trans("DoTestServerAvailability"));
1077 
1078  include_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
1079  $mail = new CMailFile('', '', '', '', array(), array(), array(), '', '', 0, '', '', '', '', $trackid, $sendcontext);
1080  $result = $mail->check_server_port($server, $port);
1081  if ($result) {
1082  print '<div class="ok">'.$langs->trans("ServerAvailableOnIPOrPort", $server, $port).'</div>';
1083  } else {
1084  $errormsg = $langs->trans("ServerNotAvailableOnIPOrPort", $server, $port);
1085 
1086  if ($mail->error) {
1087  $errormsg .= ' - '.$mail->error;
1088  }
1089 
1090  setEventMessages($errormsg, null, 'errors');
1091  }
1092  print '<br>';
1093  }
1094 
1095  // Show email send test form
1096  if ($action == 'test' || $action == 'testhtml') {
1097  print '<div id="formmailbeforetitle" name="formmailbeforetitle"></div>';
1098  print load_fiche_titre($action == 'testhtml' ? $langs->trans("DoTestSendHTML") : $langs->trans("DoTestSend"));
1099 
1100  print dol_get_fiche_head(array(), '', '', -1);
1101 
1102  // Cree l'objet formulaire mail
1103  include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
1104  $formmail = new FormMail($db);
1105  $formmail->trackid = (($action == 'testhtml') ? "testhtml" : "test");
1106  $formmail->fromname = (GETPOSTISSET('fromname') ? GETPOST('fromname') : getDolGlobalString('MAIN_MAIL_EMAIL_FROM'));
1107  $formmail->frommail = (GETPOSTISSET('frommail') ? GETPOST('frommail') : getDolGlobalString('MAIN_MAIL_EMAIL_FROM'));
1108  $formmail->fromid = $user->id;
1109  $formmail->fromalsorobot = 1;
1110  $formmail->fromtype = (GETPOSTISSET('fromtype') ? GETPOST('fromtype', 'aZ09') : getDolGlobalString('MAIN_MAIL_DEFAULT_FROMTYPE', 'user'));
1111  $formmail->withfromreadonly = 1;
1112  $formmail->withsubstit = 1;
1113  $formmail->withfrom = 1;
1114  $formmail->witherrorsto = 1;
1115  $formmail->withto = (GETPOSTISSET('sendto') ? GETPOST('sendto', 'restricthtml') : ($user->email ? $user->email : 1));
1116  $formmail->withtocc = (GETPOSTISSET('sendtocc') ? GETPOST('sendtocc', 'restricthtml') : 1); // ! empty to keep field if empty
1117  $formmail->withtoccc = (GETPOSTISSET('sendtoccc') ? GETPOST('sendtoccc', 'restricthtml') : 1); // ! empty to keep field if empty
1118  $formmail->withtopic = (GETPOSTISSET('subject') ? GETPOST('subject') : $langs->trans("Test"));
1119  $formmail->withtopicreadonly = 0;
1120  $formmail->withfile = 2;
1121  $formmail->withlayout = 1;
1122  $formmail->withaiprompt = ($action == 'testhtml' ? 'html' : 'text');
1123  $formmail->withbody = (GETPOSTISSET('message') ? GETPOST('message', 'restricthtml') : ($action == 'testhtml' ? $langs->transnoentities("PredefinedMailTestHtml") : $langs->transnoentities("PredefinedMailTest")));
1124  $formmail->withbodyreadonly = 0;
1125  $formmail->withcancel = 1;
1126  $formmail->withdeliveryreceipt = 1;
1127  $formmail->withfckeditor = ($action == 'testhtml' ? 1 : 0);
1128  $formmail->ckeditortoolbar = 'dolibarr_mailings';
1129  // Array of substitutions
1130  $formmail->substit = $substitutionarrayfortest;
1131  // Array of complementary POST parameters
1132  $formmail->param["action"] = "send";
1133  $formmail->param["models"] = "body";
1134  $formmail->param["mailid"] = 0;
1135  $formmail->param["returnurl"] = $_SERVER["PHP_SELF"];
1136 
1137  // Init list of files
1138  if (GETPOST("mode", "aZ09") == 'init') {
1139  $formmail->clear_attached_files();
1140  }
1141 
1142  print $formmail->get_form('addfile', 'removefile');
1143 
1144  print dol_get_fiche_end();
1145 
1146  // References
1147  if (!empty($user->admin)) {
1148  print '<br><br>';
1149  print '<span class="opacitymedium">'.$langs->trans("EMailsWillHaveMessageID").': ';
1150  print dol_escape_htmltag('<timestamp.*@'.dol_getprefix('email').'>');
1151  print '</span>';
1152  }
1153  }
1154 }
1155 
1156 // End of page
1157 llxFooter();
1158 $db->close();
dolibarr_set_const($db, $name, $value, $type='chaine', $visible=0, $note='', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
Definition: admin.lib.php:656
email_admin_prepare_head()
Return array head with list of tabs to view object information.
Definition: admin.lib.php:2068
if(GETPOSTISSET('MAIN_AGENDA_XCAL_EXPORTKEY')) if(GETPOSTISSET('MAIN_AGENDA_EXPORT_PAST_DELAY')) if(GETPOSTISSET('MAIN_AGENDA_EXPORT_CACHE')) if(GETPOSTISSET('AGENDA_EXPORT_FIX_TZ')) if($actionsave) if(!isset($conf->global->MAIN_AGENDA_EXPORT_PAST_DELAY)) $wikihelp
View.
Definition: agenda_xcal.php:90
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Definition: wrapper.php:55
llxFooter()
Empty footer.
Definition: wrapper.php:69
Class to send emails (with attachments or not) Usage: $mailfile = new CMailFile($subject,...
Class for EmailSenderProfile.
Class to manage generation of HTML components Only common components must be here.
Class permettant la generation du formulaire html d'envoi de mail unitaire Usage: $formail = new Form...
if(isModEnabled('invoice') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&!getDolGlobalString('MAIN_USE_NEW_SUPPLIERMOD') && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') && $user->hasRight('don', 'lire')) if(isModEnabled('tax') && $user->hasRight('tax', 'charges', 'lire')) if(isModEnabled('invoice') &&isModEnabled('order') && $user->hasRight("commande", "lire") &&!getDolGlobalString('WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER')) $sql
Social contributions to pay.
Definition: index.php:745
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
yn($yesno, $case=1, $color=0)
Return yes or no in current language.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dol_string_nohtmltag($stringtoclean, $removelinefeed=1, $pagecodeto='UTF-8', $strip_tags=0, $removedoublespaces=1)
Clean a string from all HTML tags and entities.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
complete_substitutions_array(&$substitutionarray, $outputlangs, $object=null, $parameters=null, $callfunc="completesubstitutionarray")
Complete the $substitutionarray with more entries coming from external module that had set the "subst...
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='')
Show information in HTML for admin users or standard users.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
isValidEmail($address, $acceptsupervisorkey=0, $acceptuserkey=0)
Return true if email syntax is ok.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
dol_hash($chain, $type='0', $nosalt=0)
Returns a hash (non reversible encryption) of a string.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.