Improve email sending system and add Postmark as mail transport
This commit is contained in:
@@ -11,6 +11,7 @@ use Pimple\Container;
|
||||
* @author Frederic Guillot
|
||||
*
|
||||
* @property \Core\Helper $helper
|
||||
* @property \Core\EmailClient $emailClient
|
||||
* @property \Core\HttpClient $httpClient
|
||||
* @property \Core\Paginator $paginator
|
||||
* @property \Core\Request $request
|
||||
@@ -22,9 +23,10 @@ use Pimple\Container;
|
||||
* @property \Integration\HipchatWebhook $hipchatWebhook
|
||||
* @property \Integration\Jabber $jabber
|
||||
* @property \Integration\MailgunWebhook $mailgunWebhook
|
||||
* @property \Integration\PostmarkWebhook $postmarkWebhook
|
||||
* @property \Integration\Postmark $postmark
|
||||
* @property \Integration\SendgridWebhook $sendgridWebhook
|
||||
* @property \Integration\SlackWebhook $slackWebhook
|
||||
* @property \Integration\Smtp $smtp
|
||||
* @property \Model\Acl $acl
|
||||
* @property \Model\Action $action
|
||||
* @property \Model\Authentication $authentication
|
||||
|
||||
43
app/Core/EmailClient.php
Normal file
43
app/Core/EmailClient.php
Normal file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
namespace Core;
|
||||
|
||||
/**
|
||||
* Mail client
|
||||
*
|
||||
* @package core
|
||||
* @author Frederic Guillot
|
||||
*/
|
||||
class EmailClient extends Base
|
||||
{
|
||||
/**
|
||||
* Send a HTML email
|
||||
*
|
||||
* @access public
|
||||
* @param string $email
|
||||
* @param string $name
|
||||
* @param string $subject
|
||||
* @param string $html
|
||||
*/
|
||||
public function send($email, $name, $subject, $html)
|
||||
{
|
||||
$this->container['logger']->debug('Sending email to '.$email.' ('.MAIL_TRANSPORT.')');
|
||||
|
||||
$start_time = microtime(true);
|
||||
$author = 'Kanboard';
|
||||
|
||||
if (Session::isOpen() && $this->userSession->isLogged()) {
|
||||
$author = e('%s via Kanboard', $this->user->getFullname($this->session['user']));
|
||||
}
|
||||
|
||||
switch (MAIL_TRANSPORT) {
|
||||
case 'postmark':
|
||||
$this->postmark->sendEmail($email, $name, $subject, $html, $author);
|
||||
break;
|
||||
default:
|
||||
$this->smtp->sendEmail($email, $name, $subject, $html, $author);
|
||||
}
|
||||
|
||||
$this->container['logger']->debug('Email sent in '.round(microtime(true) - $start_time, 6).' seconds');
|
||||
}
|
||||
}
|
||||
@@ -2,22 +2,20 @@
|
||||
|
||||
namespace Core;
|
||||
|
||||
use Pimple\Container;
|
||||
|
||||
/**
|
||||
* HTTP client
|
||||
*
|
||||
* @package core
|
||||
* @author Frederic Guillot
|
||||
*/
|
||||
class HttpClient
|
||||
class HttpClient extends Base
|
||||
{
|
||||
/**
|
||||
* HTTP connection timeout in seconds
|
||||
*
|
||||
* @var integer
|
||||
*/
|
||||
const HTTP_TIMEOUT = 2;
|
||||
const HTTP_TIMEOUT = 5;
|
||||
|
||||
/**
|
||||
* Number of maximum redirections for the HTTP client
|
||||
@@ -31,26 +29,7 @@ class HttpClient
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const HTTP_USER_AGENT = 'Kanboard Webhook';
|
||||
|
||||
/**
|
||||
* Container instance
|
||||
*
|
||||
* @access protected
|
||||
* @var \Pimple\Container
|
||||
*/
|
||||
protected $container;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @access public
|
||||
* @param \Pimple\Container $container
|
||||
*/
|
||||
public function __construct(Container $container)
|
||||
{
|
||||
$this->container = $container;
|
||||
}
|
||||
const HTTP_USER_AGENT = 'Kanboard';
|
||||
|
||||
/**
|
||||
* Send a POST HTTP request
|
||||
@@ -58,19 +37,20 @@ class HttpClient
|
||||
* @access public
|
||||
* @param string $url
|
||||
* @param array $data
|
||||
* @param array $headers
|
||||
* @return string
|
||||
*/
|
||||
public function post($url, array $data)
|
||||
public function post($url, array $data, array $headers = array())
|
||||
{
|
||||
if (empty($url)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$headers = array(
|
||||
$headers = array_merge(array(
|
||||
'User-Agent: '.self::HTTP_USER_AGENT,
|
||||
'Content-Type: application/json',
|
||||
'Connection: close',
|
||||
);
|
||||
), $headers);
|
||||
|
||||
$context = stream_context_create(array(
|
||||
'http' => array(
|
||||
@@ -83,12 +63,21 @@ class HttpClient
|
||||
)
|
||||
));
|
||||
|
||||
$response = @file_get_contents(trim($url), false, $context);
|
||||
$stream = @fopen(trim($url), 'r', false, $context);
|
||||
$response = '';
|
||||
|
||||
if (is_resource($stream)) {
|
||||
$response = stream_get_contents($stream);
|
||||
}
|
||||
else {
|
||||
$this->container['logger']->error('HttpClient: request failed');
|
||||
}
|
||||
|
||||
if (DEBUG) {
|
||||
$this->container['logger']->debug($url);
|
||||
$this->container['logger']->debug(var_export($data, true));
|
||||
$this->container['logger']->debug($response);
|
||||
$this->container['logger']->debug('HttpClient: url='.$url);
|
||||
$this->container['logger']->debug('HttpClient: payload='.var_export($data, true));
|
||||
$this->container['logger']->debug('HttpClient: metadata='.var_export(@stream_get_meta_data($stream), true));
|
||||
$this->container['logger']->debug('HttpClient: response='.$response);
|
||||
}
|
||||
|
||||
return $response;
|
||||
|
||||
Reference in New Issue
Block a user