|
|
|
|
@@ -35,10 +35,16 @@
|
|
|
|
|
// Fixed #45 handling of international characters - Dima-online
|
|
|
|
|
// Tested with latest PHPMailer (6.9.3) and TWIG (3.11.3), PHP 7.4
|
|
|
|
|
// Tested with PHP 8.3, TWIG (3.18.0)
|
|
|
|
|
// 2.18 2025/01/10 - Mark Oudsen - SCREEN tag information is only processed for Zabbix versions <= 5
|
|
|
|
|
// 2025/01/14 - Mark Oudsen - Fixed #51 SMTPS (implicit) or STARTTLS (explicit)
|
|
|
|
|
// 2.20 2025/01/25 - Mark Oudsen - Fixed #49 to support Zabbix API bearer token (Zabbix 7.x+)
|
|
|
|
|
// Added detection of php curl module (must have)
|
|
|
|
|
// Fixed bug on array size determination
|
|
|
|
|
// CURLOPT_BINARYTRANSFER deprecated (removed)
|
|
|
|
|
// ------------------------------------------------------------------------------------------------------
|
|
|
|
|
// Release 3 placeholder for Zabbix 7.0 LTS and 7.2
|
|
|
|
|
// Release 3 placeholder for Zabbix 7.0 LTS and 7.2+
|
|
|
|
|
// ------------------------------------------------------------------------------------------------------
|
|
|
|
|
// v2.17 Testing on Zabbix 7.0 LTS (in progress), Zabbix 7.2 (in progress)
|
|
|
|
|
// 2.20 Tested in Zabbix 7.0.7 LTS and Zabbix 7.2.2
|
|
|
|
|
// ------------------------------------------------------------------------------------------------------
|
|
|
|
|
//
|
|
|
|
|
// (C) M.J.Oudsen, mark.oudsen@puzzl.nl
|
|
|
|
|
@@ -52,16 +58,27 @@
|
|
|
|
|
//
|
|
|
|
|
// Notes
|
|
|
|
|
// -----
|
|
|
|
|
// 1) mailGraph is following the environmental requirements from Zabbix, supporting PHP 7.4-8.3 ad per
|
|
|
|
|
// 1) mailGraph is following the environmental requirements from Zabbix, supporting PHP 7 and 8 as per
|
|
|
|
|
// - https://www.zabbix.com/documentation/6.0/en/manual/installation/requirements
|
|
|
|
|
// - https://www.zabbix.com/documentation/6.4/en/manual/installation/requirements
|
|
|
|
|
// - https://www.zabbix.com/documentation/7.0/en/manual/installation/requirements
|
|
|
|
|
// - https://www.zabbix.com/documentation/7.2/en/manual/installation/requirements
|
|
|
|
|
//
|
|
|
|
|
// 2) TWIG 3.18.0 is available on PHP 8 only (seemless upgrade when using composer update)
|
|
|
|
|
// 2) TWIG 3.18.0 is available on PHP 8 only
|
|
|
|
|
// - Seemless in-place upgrade when using composer update after upgrading PHP 7.x to PHP 8.x
|
|
|
|
|
//
|
|
|
|
|
// 3) Testing of composer libraries updates is limited to every 6 to 12 months
|
|
|
|
|
// 3) Full testing of composer libraries updates/versions is limited to every 6 to 12 months
|
|
|
|
|
// - In case you encounter an issue, please raise an issue on GitHub
|
|
|
|
|
// https://github.com/moudsen/mailGraph/issues
|
|
|
|
|
//
|
|
|
|
|
// - Refer to the wiki for exact versions tested
|
|
|
|
|
//
|
|
|
|
|
// 4) PHP related notes
|
|
|
|
|
// - PHP 5.4 - Limited to mailGraph v1.xx only - unsupported (end of life) - Tested - No more updates
|
|
|
|
|
// - PHP 7.x - Limited to mailGraph v2.xx only - unsupported (end of life) - Tested - Freezing
|
|
|
|
|
// - PHP 8.x - Supported - Tested
|
|
|
|
|
//
|
|
|
|
|
// 5) Zabbix related
|
|
|
|
|
// - As from Zabbix 7.2 onwards the only authentication method accepted is API bearer token
|
|
|
|
|
//
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
@@ -73,7 +90,7 @@
|
|
|
|
|
// -------
|
|
|
|
|
// - Automatic setup and configuration of mailGraph
|
|
|
|
|
// - Automatic code updates (CLI triggered)
|
|
|
|
|
// - Add DASHBOARD facility (SCREEN was abandoned in Zabbix 5.4
|
|
|
|
|
// - Add DASHBOARD processing facility (SCREEN was abandoned after Zabbix 5.4) [idea only]
|
|
|
|
|
// - Extract Graph API functionality to seperate code unit/object
|
|
|
|
|
//
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
@@ -92,7 +109,7 @@
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
// CONSTANTS
|
|
|
|
|
$cVersion = 'v2.17';
|
|
|
|
|
$cVersion = 'v2.20';
|
|
|
|
|
$cCRLF = chr(10).chr(13);
|
|
|
|
|
$maskDateTime = 'Y-m-d H:i:s';
|
|
|
|
|
$maxGraphs = 8;
|
|
|
|
|
@@ -122,7 +139,7 @@
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// Fetch the HTML source of the given URL
|
|
|
|
|
// Fetch the response of the given URL
|
|
|
|
|
// --- Redirects will be honored
|
|
|
|
|
// --- Enforces use of IPv4
|
|
|
|
|
// --- Caller must verify if the return string is JSON or ERROR
|
|
|
|
|
@@ -133,6 +150,7 @@
|
|
|
|
|
global $cVersion;
|
|
|
|
|
global $cDebug;
|
|
|
|
|
global $HTTPProxy;
|
|
|
|
|
global $z_api_token;
|
|
|
|
|
|
|
|
|
|
// Initialize Curl instance
|
|
|
|
|
_log('% postJSON: '.$url);
|
|
|
|
|
@@ -141,7 +159,6 @@
|
|
|
|
|
$ch = curl_init();
|
|
|
|
|
|
|
|
|
|
// Set options
|
|
|
|
|
|
|
|
|
|
if ((isset($HTTPProxy)) && ($HTTPProxy!=''))
|
|
|
|
|
{
|
|
|
|
|
if ($cDebug) { _log('% Using proxy: '.$HTTPProxy); }
|
|
|
|
|
@@ -151,18 +168,41 @@
|
|
|
|
|
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
|
|
|
|
|
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
|
|
|
|
|
|
|
|
|
|
// Set headers
|
|
|
|
|
$headers = ['Content-Type:application/json'];
|
|
|
|
|
|
|
|
|
|
// Bypass token authentication method if we are using API token method
|
|
|
|
|
if ($z_api_token != '') {
|
|
|
|
|
if ($data['method']!='apiinfo.version') {
|
|
|
|
|
$headers[] = 'Authorization: Bearer '.$z_api_token;
|
|
|
|
|
|
|
|
|
|
if ($cDebug) { _log('> Adding API bearer token'); }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isset($data['auth'])) {
|
|
|
|
|
unset($data['auth']);
|
|
|
|
|
|
|
|
|
|
if ($cDebug) { _log('> Cleared AUTH information'); }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
|
|
|
|
|
|
|
|
|
// Set POST
|
|
|
|
|
curl_setopt($ch, CURLOPT_POST, TRUE);
|
|
|
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
|
|
|
|
|
|
|
|
|
// Set URL and output-to-variable option
|
|
|
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
|
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
|
|
|
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
|
|
|
|
|
|
|
|
|
|
// Set Agent name
|
|
|
|
|
curl_setopt($ch, CURLOPT_USERAGENT, 'Zabbix-mailGraph - '.$cVersion);
|
|
|
|
|
|
|
|
|
|
// Execute Curl
|
|
|
|
|
$data = curl_exec($ch);
|
|
|
|
|
|
|
|
|
|
// Check if we have valid data
|
|
|
|
|
if ($data===FALSE)
|
|
|
|
|
{
|
|
|
|
|
_log('! Failed: '.curl_error($ch));
|
|
|
|
|
@@ -199,6 +239,7 @@
|
|
|
|
|
global $z_tmp_cookies;
|
|
|
|
|
global $z_images_path;
|
|
|
|
|
global $z_url_api;
|
|
|
|
|
global $z_api_token;
|
|
|
|
|
global $cVersion;
|
|
|
|
|
global $cCRLF;
|
|
|
|
|
global $HTTPProxy;
|
|
|
|
|
@@ -235,9 +276,6 @@
|
|
|
|
|
"&graphtype=".$graphType."&legend=".$showLegend."&profileIdx=web.graphs.filter".
|
|
|
|
|
"&from=now-".$period."&to=now";
|
|
|
|
|
|
|
|
|
|
// Prepare POST login
|
|
|
|
|
$z_login_data = array('name' => $z_user, 'password' => $z_pass, 'enter' => "Sign in");
|
|
|
|
|
|
|
|
|
|
// Cookie and image names
|
|
|
|
|
$filename_cookie = $z_tmp_cookies ."zabbix_cookie_" .$graphid . "." .$thisTime. ".txt";
|
|
|
|
|
$filename = "zabbix_graph_" .$graphid . "." . $thisTime . "-" . $period . ".png";
|
|
|
|
|
@@ -258,9 +296,9 @@
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
|
|
|
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
|
|
|
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
|
|
|
|
|
|
|
|
|
$z_login_data = array('name' => $z_user, 'password' => $z_pass, 'enter' => "Sign in");
|
|
|
|
|
curl_setopt($ch, CURLOPT_POST, true);
|
|
|
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $z_login_data);
|
|
|
|
|
|
|
|
|
|
@@ -272,8 +310,9 @@
|
|
|
|
|
|
|
|
|
|
if ($login!='')
|
|
|
|
|
{
|
|
|
|
|
//TODO: Pick up the specific error from CURL?
|
|
|
|
|
echo 'Error logging in to Zabbix!'.$cCRLF;
|
|
|
|
|
die;
|
|
|
|
|
return('');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Get the graph
|
|
|
|
|
@@ -390,6 +429,7 @@
|
|
|
|
|
case 'zabbix_user_pwd':
|
|
|
|
|
case 'zabbix_api_user':
|
|
|
|
|
case 'zabbix_api_pwd':
|
|
|
|
|
case 'zabbix_api_token':
|
|
|
|
|
$info[$aKey] = '<masked>';
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
@@ -416,6 +456,7 @@
|
|
|
|
|
case 'zabbix_user_pwd':
|
|
|
|
|
case 'zabbix_api_user':
|
|
|
|
|
case 'zabbix_api_pwd':
|
|
|
|
|
case 'zabbix_api_token':
|
|
|
|
|
if ($aValue==$infoValue) { $info[$infoKey] = '<masked>'; };
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
@@ -501,6 +542,12 @@
|
|
|
|
|
// Initialize ///////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
// --- CHECK CURL
|
|
|
|
|
if (!extension_loaded('curl')) {
|
|
|
|
|
_log('! mailGraph requires the php-curl module to function properly. Please install this module and retry.');
|
|
|
|
|
die;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// --- CONFIG DATA ---
|
|
|
|
|
|
|
|
|
|
// [CONFIGURE] Change only when you want to place your config file somewhere else ...
|
|
|
|
|
@@ -640,6 +687,10 @@
|
|
|
|
|
$p_smtp_strict = 'yes';
|
|
|
|
|
if ((isset($config['smtp_strict'])) && ($config['smtp_strict']=='no')) { $p_smtp_strict = 'no'; }
|
|
|
|
|
|
|
|
|
|
$p_smtp_security = 'none';
|
|
|
|
|
if ((isset($config['smtp_security'])) && ($config['smtp_security']=='smtps')) { $p_smtp_security = 'smtps'; }
|
|
|
|
|
if ((isset($config['smtp_security'])) && ($config['smtp_security']=='starttls')) { $p_smtp_security = 'starttls'; }
|
|
|
|
|
|
|
|
|
|
$p_smtp_username = '';
|
|
|
|
|
if (isset($config['smtp_username'])) { $p_smtp_username = $config['smtp_username']; }
|
|
|
|
|
|
|
|
|
|
@@ -702,6 +753,13 @@
|
|
|
|
|
_log('+ created IMAGES directory "'.$z_images_path.'"');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Zabbix token - if a token is defined this will be the selected login method automatically (username/password neglected)
|
|
|
|
|
$z_api_token = '';
|
|
|
|
|
|
|
|
|
|
if (isset($config['zabbix_api_token'])) {
|
|
|
|
|
$z_api_token = $config['zabbix_api_token'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Zabbix user (requires Super Admin access rights to access image generator script)
|
|
|
|
|
$z_user = $config['zabbix_user'];
|
|
|
|
|
$z_pass = $config['zabbix_user_pwd'];
|
|
|
|
|
@@ -747,30 +805,39 @@
|
|
|
|
|
// --- LOGIN ---
|
|
|
|
|
// -------------
|
|
|
|
|
|
|
|
|
|
_log('# LOGIN to Zabbix');
|
|
|
|
|
// We only use the USER.LOGIN method if not using the API bearer token method
|
|
|
|
|
if ($z_api_token=='') {
|
|
|
|
|
_log('# LOGIN to Zabbix');
|
|
|
|
|
|
|
|
|
|
$request = array('jsonrpc'=>'2.0',
|
|
|
|
|
'method'=>'user.login',
|
|
|
|
|
'params'=>array('username'=>$z_api_user,
|
|
|
|
|
'password'=>$z_api_pass),
|
|
|
|
|
'id'=>nextRequestID(),
|
|
|
|
|
'auth'=>null);
|
|
|
|
|
$request = array('jsonrpc'=>'2.0',
|
|
|
|
|
'method'=>'user.login',
|
|
|
|
|
'params'=>array('username'=>$z_api_user,
|
|
|
|
|
'password'=>$z_api_pass),
|
|
|
|
|
'id'=>nextRequestID(),
|
|
|
|
|
'auth'=>null);
|
|
|
|
|
|
|
|
|
|
$result = postJSON($z_url_api,$request);
|
|
|
|
|
$result = postJSON($z_url_api,$request);
|
|
|
|
|
|
|
|
|
|
$token = '';
|
|
|
|
|
if (isset($result['result'])) { $token = $result['result']; }
|
|
|
|
|
$token = '';
|
|
|
|
|
if (isset($result['result'])) { $token = $result['result']; }
|
|
|
|
|
|
|
|
|
|
if ($token=='')
|
|
|
|
|
{
|
|
|
|
|
echo 'Error logging in to Zabbix? ('.$z_url_api.'): '.$cCRLF;
|
|
|
|
|
echo var_dump($request).$cCRLF;
|
|
|
|
|
echo var_dump($result).$cCRLF;
|
|
|
|
|
die;
|
|
|
|
|
if ($token=='')
|
|
|
|
|
{
|
|
|
|
|
echo 'Error logging in to Zabbix? ('.$z_url_api.'): '.$cCRLF;
|
|
|
|
|
echo var_dump($request).$cCRLF;
|
|
|
|
|
echo var_dump($result).$cCRLF;
|
|
|
|
|
die;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_log('> Token = '.$token);
|
|
|
|
|
} else {
|
|
|
|
|
if ($cDebug) {
|
|
|
|
|
_log('# Using API bearer token authentication to access Zabbix');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$token = '';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_log('> Token = '.$token);
|
|
|
|
|
|
|
|
|
|
// -----------------------
|
|
|
|
|
// --- LOG API VERSION ---
|
|
|
|
|
// -----------------------
|
|
|
|
|
@@ -785,6 +852,7 @@
|
|
|
|
|
$result = postJSON($z_url_api, $request);
|
|
|
|
|
|
|
|
|
|
$apiVersion = $result['result'];
|
|
|
|
|
$apiVersionMajor = substr($apiVersion,0,01);
|
|
|
|
|
|
|
|
|
|
_log('> API version '.$apiVersion);
|
|
|
|
|
|
|
|
|
|
@@ -804,6 +872,10 @@
|
|
|
|
|
'auth'=>$token,
|
|
|
|
|
'id'=>nextRequestID());
|
|
|
|
|
|
|
|
|
|
if ($z_api_token=='') {
|
|
|
|
|
$request['auth'] = $token;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$thisProblems = postJSON($z_url_api, $request);
|
|
|
|
|
_log('> Problem data (recent)'.$cCRLF.json_encode($thisProblems,JSON_PRETTY_PRINT|JSON_NUMERIC_CHECK));
|
|
|
|
|
|
|
|
|
|
@@ -839,15 +911,27 @@
|
|
|
|
|
|
|
|
|
|
_log('# Retreiving EVENT information');
|
|
|
|
|
|
|
|
|
|
$request = array('jsonrpc'=>'2.0',
|
|
|
|
|
'method'=>'event.get',
|
|
|
|
|
'params'=>array('eventids'=>$p_eventId,
|
|
|
|
|
'output'=>'extend',
|
|
|
|
|
'selectRelatedObject'=>'extend',
|
|
|
|
|
'selectSuppressionData'=>'extend',
|
|
|
|
|
'select_acknowledges'=>'extend'),
|
|
|
|
|
'auth'=>$token,
|
|
|
|
|
'id'=>nextRequestID());
|
|
|
|
|
if ($apiVersionMajor<"7") {
|
|
|
|
|
$request = array('jsonrpc'=>'2.0',
|
|
|
|
|
'method'=>'event.get',
|
|
|
|
|
'params'=>array('eventids'=>$p_eventId,
|
|
|
|
|
'output'=>'extend',
|
|
|
|
|
'selectRelatedObject'=>'extend',
|
|
|
|
|
'selectSuppressionData'=>'extend',
|
|
|
|
|
'select_acknowledges'=>'extend'),
|
|
|
|
|
'auth'=>$token,
|
|
|
|
|
'id'=>nextRequestID());
|
|
|
|
|
} else {
|
|
|
|
|
$request = array('jsonrpc'=>'2.0',
|
|
|
|
|
'method'=>'event.get',
|
|
|
|
|
'params'=>array('eventids'=>$p_eventId,
|
|
|
|
|
'output'=>'extend',
|
|
|
|
|
'selectRelatedObject'=>'extend',
|
|
|
|
|
'selectSuppressionData'=>'extend',
|
|
|
|
|
'selectAcknowledges'=>'extend'),
|
|
|
|
|
'auth'=>$token,
|
|
|
|
|
'id'=>nextRequestID());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$thisEvent = postJSON($z_url_api,$request);
|
|
|
|
|
_log('> Event data'.$cCRLF.json_encode($thisEvent,JSON_PRETTY_PRINT|JSON_NUMERIC_CHECK));
|
|
|
|
|
@@ -875,7 +959,7 @@
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// --- Collect and attach acknowledge messages for this event
|
|
|
|
|
if (sizeof($thisEvent['result'][0]['acknowledges']>0)) {
|
|
|
|
|
if (count($thisEvent['result'][0]['acknowledges'])>0) {
|
|
|
|
|
foreach($thisEvent['result'][0]['acknowledges'] as $aCount=>$anAck) {
|
|
|
|
|
$mailData['ACKNOWLEDGES'][$aCount] = $anAck;
|
|
|
|
|
$mailData['ACKNOWLEDGES'][$aCount]['_clock'] = zabbixTStoString($anAck['clock']);
|
|
|
|
|
@@ -971,18 +1055,26 @@
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 'mailGraph.screen':
|
|
|
|
|
$triggerScreen = intval($aTag['value']);
|
|
|
|
|
_log('+ Trigger screen = '.$triggerScreen);
|
|
|
|
|
if ($apiVersionMajor<="5") {
|
|
|
|
|
$triggerScreen = intval($aTag['value']);
|
|
|
|
|
_log('+ Trigger screen = '.$triggerScreen);
|
|
|
|
|
} else {
|
|
|
|
|
_log('- Trigger screen value ignored');
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 'mailGraph.screenPeriod':
|
|
|
|
|
$triggerScreenPeriod = $aTag['value'];
|
|
|
|
|
_log('+ Trigger screen period = '.$triggerScreenPeriod);
|
|
|
|
|
if ($apiVersionMajor<="5") {
|
|
|
|
|
$triggerScreenPeriod = $aTag['value'];
|
|
|
|
|
_log('+ Trigger screen period = '.$triggerScreenPeriod);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 'mailGraph.screenPeriodHeader':
|
|
|
|
|
$triggerScreenPeriodHeader = $aTag['value'];
|
|
|
|
|
_log('+ Trigger screen header = '.$triggerScreenPeriodHeader);
|
|
|
|
|
if ($apiVersionMajor<="5") {
|
|
|
|
|
$triggerScreenPeriodHeader = $aTag['value'];
|
|
|
|
|
_log('+ Trigger screen header = '.$triggerScreenPeriodHeader);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@@ -1523,11 +1615,34 @@
|
|
|
|
|
$mail->CharSet = "UTF-8";
|
|
|
|
|
$mail->Encoding = "base64";
|
|
|
|
|
|
|
|
|
|
// Inialize SMTP parameters
|
|
|
|
|
// --- Inialize SMTP parameters
|
|
|
|
|
$mail->isSMTP();
|
|
|
|
|
$mail->Host = $p_smtp_server;
|
|
|
|
|
$mail->Port = $p_smtp_port;
|
|
|
|
|
|
|
|
|
|
// --- Initialize transport security
|
|
|
|
|
switch($p_smtp_security) {
|
|
|
|
|
case 'smtps':
|
|
|
|
|
_log('> Using SMTPS transport encryption method');
|
|
|
|
|
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
|
|
|
|
|
break;
|
|
|
|
|
case 'starttls':
|
|
|
|
|
_log('> Using STARTTLS transport encryption method');
|
|
|
|
|
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
_log('> Plain transport (no encryption)');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// --- Disable strict certificate checking?
|
|
|
|
|
if ($p_smtp_strict=='no')
|
|
|
|
|
{
|
|
|
|
|
_log('> No strict TLS checking');
|
|
|
|
|
$mail->SMTPOptions = [
|
|
|
|
|
'ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ]
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// --- Authentication required?
|
|
|
|
|
if ($p_smtp_username!="")
|
|
|
|
|
{
|
|
|
|
|
@@ -1536,14 +1651,6 @@
|
|
|
|
|
$mail->Password = $p_smtp_password;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// --- Disable strict certificate checking?
|
|
|
|
|
if ($p_smtp_strict=='no')
|
|
|
|
|
{
|
|
|
|
|
$mail->SMTPOptions = [
|
|
|
|
|
'ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ]
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// --- Define from
|
|
|
|
|
$mail->Sender = $p_smtp_from_address;
|
|
|
|
|
$mail->SetFrom($p_smtp_from_address, $p_smtp_from_name, FALSE);
|
|
|
|
|
@@ -1633,6 +1740,7 @@
|
|
|
|
|
{
|
|
|
|
|
echo "! Failed to send message".$cCRLF;
|
|
|
|
|
echo "! Error message: ".$e->getMessage().$cCRLF;
|
|
|
|
|
echo "! Check your mail server and/or transport settings!".$cCRLF;
|
|
|
|
|
_log("! Failed: ".$e->getMessage());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|