forked from FreshRSS/FreshRSS
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tec: Provide a Minz_Mailer class (FreshRSS#2476)
* Add Minz_View::_path method (replace change_view) The `_path` method is more powerful since it allows to choose the file extension. It is also Minz_Request-agnostic, which is useful to reuse the Minz_View class in other places. `change_view` is now deprecated and a warning is logged if we use it. * Provide a Minz_Mailer to send emails It uses PHPMailer under the hood and only supports PHP >= 5.5
- Loading branch information
1 parent
a411af4
commit 034967e
Showing
12 changed files
with
6,023 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
<?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; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
<?php | ||
/** | ||
* PHPMailer Exception class. | ||
* PHP Version 5.5. | ||
* | ||
* @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project | ||
* | ||
* @author Marcus Bointon (Synchro/coolbru) <[email protected]> | ||
* @author Jim Jagielski (jimjag) <[email protected]> | ||
* @author Andy Prevost (codeworxtech) <[email protected]> | ||
* @author Brent R. Matzelle (original founder) | ||
* @copyright 2012 - 2017 Marcus Bointon | ||
* @copyright 2010 - 2012 Jim Jagielski | ||
* @copyright 2004 - 2009 Andy Prevost | ||
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License | ||
* @note This program is distributed in the hope that it will be useful - WITHOUT | ||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
* FITNESS FOR A PARTICULAR PURPOSE. | ||
*/ | ||
|
||
namespace PHPMailer\PHPMailer; | ||
|
||
/** | ||
* PHPMailer exception handler. | ||
* | ||
* @author Marcus Bointon <[email protected]> | ||
*/ | ||
class Exception extends \Exception | ||
{ | ||
/** | ||
* Prettify error message output. | ||
* | ||
* @return string | ||
*/ | ||
public function errorMessage() | ||
{ | ||
return '<strong>' . htmlspecialchars($this->getMessage()) . "</strong><br />\n"; | ||
} | ||
} |
Oops, something went wrong.