| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- <?php
- use PHPMailer\PHPMailer\PHPMailer;
- use PHPMailer\PHPMailer\Exception;
- /**
- * 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.php')
- * ```
- *
- * 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;
- private $mailer;
- private $smtp_config;
- private $debug_level;
- /**
- * Constructor.
- */
- public function __construct () {
- $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();
- PHPMailer::$validator = 'html5';
- $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;
- }
- }
- }
|