2017-09-14 11:40:13 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Classe per gestire le email (framework open source PHPMailer) in base alle impostazioni.
|
|
|
|
*
|
|
|
|
* @since 2.3
|
|
|
|
*/
|
2018-01-02 17:01:47 +01:00
|
|
|
class Mail extends PHPMailer\PHPMailer\PHPMailer
|
2017-09-14 11:40:13 +02:00
|
|
|
{
|
2017-09-22 15:16:56 +02:00
|
|
|
/** @var array Elenco degli account email disponibili */
|
|
|
|
protected static $accounts = [];
|
|
|
|
|
2017-09-14 11:40:13 +02:00
|
|
|
protected $infos = [];
|
|
|
|
|
2017-09-22 15:16:56 +02:00
|
|
|
/**
|
|
|
|
* Restituisce tutte le informazioni di tutti i plugin installati.
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
public static function getAccounts()
|
|
|
|
{
|
|
|
|
if (empty(self::$accounts)) {
|
|
|
|
$database = Database::getConnection();
|
|
|
|
|
|
|
|
$results = $database->fetchArray('SELECT * FROM zz_smtp WHERE deleted = 0');
|
|
|
|
|
|
|
|
$accounts = [];
|
|
|
|
|
|
|
|
foreach ($results as $result) {
|
|
|
|
$accounts[$result['id']] = $result;
|
|
|
|
$accounts[$result['name']] = $result['id'];
|
|
|
|
|
|
|
|
if (!empty($result['main'])) {
|
|
|
|
$accounts['default'] = $result['id'];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
self::$accounts = $accounts;
|
|
|
|
}
|
|
|
|
|
|
|
|
return self::$accounts;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Restituisce le informazioni relative a un singolo modulo specificato.
|
|
|
|
*
|
|
|
|
* @param string|int $plugin
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
public static function get($account = null)
|
|
|
|
{
|
|
|
|
if (!is_numeric($account) && !empty(self::getAccounts()[$account])) {
|
|
|
|
$account = self::getAccounts()[$account];
|
|
|
|
}
|
|
|
|
|
|
|
|
if (empty($account)) {
|
|
|
|
$account = self::getAccounts()['default'];
|
|
|
|
}
|
|
|
|
|
|
|
|
return self::getAccounts()[$account];
|
|
|
|
}
|
|
|
|
|
|
|
|
public function __construct($account = null, $exceptions = null)
|
2017-09-14 11:40:13 +02:00
|
|
|
{
|
|
|
|
parent::__construct($exceptions);
|
|
|
|
|
|
|
|
// Configurazione di base
|
2017-09-22 15:16:56 +02:00
|
|
|
$config = self::get($account);
|
2017-09-14 11:40:13 +02:00
|
|
|
|
|
|
|
// Preparazione email
|
|
|
|
$this->IsHTML(true);
|
|
|
|
|
|
|
|
if (!empty($config['host'])) {
|
|
|
|
$this->IsSMTP(true);
|
|
|
|
|
|
|
|
// Impostazioni di debug
|
|
|
|
$this->SMTPDebug = 3;
|
|
|
|
$this->Debugoutput = function ($str, $level) {
|
|
|
|
$this->infos[] = $str;
|
|
|
|
};
|
|
|
|
|
|
|
|
// Impostazioni dell'host
|
|
|
|
$this->Host = $config['host'];
|
|
|
|
$this->Port = $config['port'];
|
|
|
|
|
|
|
|
// Impostazioni di autenticazione
|
|
|
|
if (!empty($config['username'])) {
|
|
|
|
$this->SMTPAuth = true;
|
|
|
|
$this->Username = $config['username'];
|
|
|
|
$this->Password = $config['password'];
|
|
|
|
}
|
|
|
|
|
|
|
|
// Impostazioni di sicurezza
|
2017-09-22 15:16:56 +02:00
|
|
|
if (in_array(strtolower($config['encryption']), ['ssl', 'tls'])) {
|
|
|
|
$this->SMTPSecure = strtolower($config['encryption']);
|
2017-09-14 11:40:13 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->WordWrap = 78;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function send()
|
|
|
|
{
|
|
|
|
global $logger;
|
|
|
|
|
|
|
|
if (empty($this->AltBody)) {
|
|
|
|
$this->AltBody = strip_tags($this->Body);
|
|
|
|
}
|
|
|
|
|
|
|
|
$result = parent::send();
|
|
|
|
|
|
|
|
$this->SmtpClose();
|
|
|
|
|
|
|
|
// Segnalazione degli errori
|
|
|
|
foreach ($this->infos as $info) {
|
|
|
|
$logger->addRecord(\Monolog\Logger::ERROR, $info);
|
|
|
|
}
|
|
|
|
|
|
|
|
return $result;
|
|
|
|
}
|
|
|
|
}
|