You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.0 KiB
118 lines
3.0 KiB
5 years ago
|
<?php
|
||
|
|
||
|
use PHPMailer\PHPMailer\PHPMailer;
|
||
|
use PHPMailer\PHPMailer\Exception;
|
||
|
|
||
|
require LIB_PATH . '/PHPMailer/PHPMailer.php';
|
||
|
require LIB_PATH . '/PHPMailer/Exception.php';
|
||
|
require LIB_PATH . '/PHPMailer/SMTP.php';
|
||
|
|
||
|
/**
|
||
|
* Allow to send emails.
|
||
|
*
|
||
|
* The Minz_Mailer class must be inherited by classes under app/Mailers.
|
||
|
* They work similarly to the ActionControllers in the way they have a view to
|
||
|
* which you can pass params (eg. $this->view->foo = 'bar').
|
||
|
*
|
||
|
* The view file is not determined automatically, so you have to select one
|
||
|
* with, for instance:
|
||
|
*
|
||
|
* ```
|
||
|
* $this->view->_path('user_mailer/email_need_validation.txt')
|
||
|
* ```
|
||
|
*
|
||
|
* Minz_Mailer uses the PHPMailer library under the hood. The latter requires
|
||
|
* PHP >= 5.5 to work. If you instantiate a Minz_Mailer with PHP < 5.5, a
|
||
|
* warning will be logged.
|
||
|
*
|
||
|
* The email is sent by calling the `mail` method.
|
||
|
*/
|
||
|
class Minz_Mailer {
|
||
|
/**
|
||
|
* The view attached to the mailer.
|
||
|
* You should set its file with `$this->view->_path($path)`
|
||
|
*
|
||
|
* @var Minz_View
|
||
|
*/
|
||
|
protected $view;
|
||
|
|
||
|
/**
|
||
|
* Constructor.
|
||
|
*
|
||
|
* If PHP version is < 5.5, a warning is logged.
|
||
|
*/
|
||
|
public function __construct () {
|
||
|
if (version_compare(PHP_VERSION, '5.5') < 0) {
|
||
|
Minz_Log::warning('Minz_Mailer cannot be used with a version of PHP < 5.5.');
|
||
|
}
|
||
|
|
||
|
$this->view = new Minz_View();
|
||
|
$this->view->_layout(false);
|
||
|
$this->view->attributeParams();
|
||
|
|
||
|
$conf = Minz_Configuration::get('system');
|
||
|
$this->mailer = $conf->mailer;
|
||
|
$this->smtp_config = $conf->smtp;
|
||
|
|
||
|
// According to https://github.com/PHPMailer/PHPMailer/wiki/SMTP-Debugging#debug-levels
|
||
|
// we should not use debug level above 2 unless if we have big trouble
|
||
|
// to connect.
|
||
|
if ($conf->environment === 'development') {
|
||
|
$this->debug_level = 2;
|
||
|
} else {
|
||
|
$this->debug_level = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Send an email.
|
||
|
*
|
||
|
* @param string $to The recipient of the email
|
||
|
* @param string $subject The subject of the email
|
||
|
*
|
||
|
* @return bool true on success, false if a SMTP error happens
|
||
|
*/
|
||
|
public function mail($to, $subject) {
|
||
|
ob_start();
|
||
|
$this->view->render();
|
||
|
$body = ob_get_contents();
|
||
|
ob_end_clean();
|
||
|
|
||
|
$mail = new PHPMailer(true);
|
||
|
try {
|
||
|
// Server settings
|
||
|
$mail->SMTPDebug = $this->debug_level;
|
||
|
$mail->Debugoutput = 'error_log';
|
||
|
|
||
|
if ($this->mailer === 'smtp') {
|
||
|
$mail->isSMTP();
|
||
|
$mail->Hostname = $this->smtp_config['hostname'];
|
||
|
$mail->Host = $this->smtp_config['host'];
|
||
|
$mail->SMTPAuth = $this->smtp_config['auth'];
|
||
|
$mail->Username = $this->smtp_config['username'];
|
||
|
$mail->Password = $this->smtp_config['password'];
|
||
|
$mail->SMTPSecure = $this->smtp_config['secure'];
|
||
|
$mail->Port = $this->smtp_config['port'];
|
||
|
} else {
|
||
|
$mail->isMail();
|
||
|
}
|
||
|
|
||
|
// Recipients
|
||
|
$mail->setFrom($this->smtp_config['from']);
|
||
|
$mail->addAddress($to);
|
||
|
|
||
|
// Content
|
||
|
$mail->isHTML(false);
|
||
|
$mail->CharSet = 'utf-8';
|
||
|
$mail->Subject = $subject;
|
||
|
$mail->Body = $body;
|
||
|
|
||
|
$mail->send();
|
||
|
return true;
|
||
|
} catch (Exception $e) {
|
||
|
Minz_Log::error('Minz_Mailer cannot send a message: ' . $mail->ErrorInfo);
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
}
|