diff options
Diffstat (limited to 'app/Core')
-rw-r--r-- | app/Core/Base.php | 6 | ||||
-rw-r--r-- | app/Core/EmailClient.php | 49 | ||||
-rw-r--r-- | app/Core/Mail/Client.php | 96 | ||||
-rw-r--r-- | app/Core/Mail/ClientInterface.php | 24 | ||||
-rw-r--r-- | app/Core/Mail/Transport/Mail.php | 57 | ||||
-rw-r--r-- | app/Core/Mail/Transport/Sendmail.php | 25 | ||||
-rw-r--r-- | app/Core/Mail/Transport/Smtp.php | 30 | ||||
-rw-r--r-- | app/Core/Plugin/Base.php | 2 |
8 files changed, 234 insertions, 55 deletions
diff --git a/app/Core/Base.php b/app/Core/Base.php index 331b67e3..76723e8f 100644 --- a/app/Core/Base.php +++ b/app/Core/Base.php @@ -11,7 +11,7 @@ use Pimple\Container; * @author Frederic Guillot * * @property \Kanboard\Core\Helper $helper - * @property \Kanboard\Core\EmailClient $emailClient + * @property \Kanboard\Core\Mail\Client $emailClient * @property \Kanboard\Core\HttpClient $httpClient * @property \Kanboard\Core\Paginator $paginator * @property \Kanboard\Core\Request $request @@ -29,11 +29,7 @@ use Pimple\Container; * @property \Kanboard\Integration\GitlabWebhook $gitlabWebhook * @property \Kanboard\Integration\HipchatWebhook $hipchatWebhook * @property \Kanboard\Integration\Jabber $jabber - * @property \Kanboard\Integration\Mailgun $mailgun - * @property \Kanboard\Integration\Postmark $postmark - * @property \Kanboard\Integration\Sendgrid $sendgrid * @property \Kanboard\Integration\SlackWebhook $slackWebhook - * @property \Kanboard\Integration\Smtp $smtp * @property \Kanboard\Formatter\ProjectGanttFormatter $projectGanttFormatter * @property \Kanboard\Formatter\TaskFilterGanttFormatter $taskFilterGanttFormatter * @property \Kanboard\Formatter\TaskFilterAutoCompleteFormatter $taskFilterAutoCompleteFormatter diff --git a/app/Core/EmailClient.php b/app/Core/EmailClient.php deleted file mode 100644 index 38d6b3f1..00000000 --- a/app/Core/EmailClient.php +++ /dev/null @@ -1,49 +0,0 @@ -<?php - -namespace Kanboard\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 'sendgrid': - $this->sendgrid->sendEmail($email, $name, $subject, $html, $author); - break; - case 'mailgun': - $this->mailgun->sendEmail($email, $name, $subject, $html, $author); - break; - 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'); - } -} diff --git a/app/Core/Mail/Client.php b/app/Core/Mail/Client.php new file mode 100644 index 00000000..c7cfaab9 --- /dev/null +++ b/app/Core/Mail/Client.php @@ -0,0 +1,96 @@ +<?php + +namespace Kanboard\Core\Mail; + +use Pimple\Container; +use Kanboard\Core\Base; + +/** + * Mail Client + * + * @package mail + * @author Frederic Guillot + */ +class Client extends Base +{ + /** + * Mail transport instances + * + * @access private + * @var \Pimple\Container + */ + private $transports; + + /** + * Constructor + * + * @access public + * @param \Pimple\Container $container + */ + public function __construct(Container $container) + { + parent::__construct($container); + $this->transports = new Container; + } + + /** + * Send a HTML email + * + * @access public + * @param string $email + * @param string $name + * @param string $subject + * @param string $html + * @return EmailClient + */ + public function send($email, $name, $subject, $html) + { + $this->container['logger']->debug('Sending email to '.$email.' ('.MAIL_TRANSPORT.')'); + + $start_time = microtime(true); + $author = 'Kanboard'; + + if ($this->userSession->isLogged()) { + $author = e('%s via Kanboard', $this->user->getFullname($this->session['user'])); + } + + $this->getTransport(MAIL_TRANSPORT)->sendEmail($email, $name, $subject, $html, $author); + + if (DEBUG) { + $this->logger->debug('Email sent in '.round(microtime(true) - $start_time, 6).' seconds'); + } + + return $this; + } + + /** + * Get mail transport instance + * + * @access public + * @param string $transport + * @return EmailClientInterface + */ + public function getTransport($transport) + { + return $this->transports[$transport]; + } + + /** + * Add a new mail transport + * + * @access public + * @param string $transport + * @param string $class + * @return EmailClient + */ + public function setTransport($transport, $class) + { + $container = $this->container; + + $this->transports[$transport] = function() use ($class, $container) { + return new $class($container); + }; + + return $this; + } +} diff --git a/app/Core/Mail/ClientInterface.php b/app/Core/Mail/ClientInterface.php new file mode 100644 index 00000000..66263a98 --- /dev/null +++ b/app/Core/Mail/ClientInterface.php @@ -0,0 +1,24 @@ +<?php + +namespace Kanboard\Core\Mail; + +/** + * Mail Client Interface + * + * @package mail + * @author Frederic Guillot + */ +interface ClientInterface +{ + /** + * Send a HTML email + * + * @access public + * @param string $email + * @param string $name + * @param string $subject + * @param string $html + * @param string $author + */ + public function sendEmail($email, $name, $subject, $html, $author); +} diff --git a/app/Core/Mail/Transport/Mail.php b/app/Core/Mail/Transport/Mail.php new file mode 100644 index 00000000..ca06e208 --- /dev/null +++ b/app/Core/Mail/Transport/Mail.php @@ -0,0 +1,57 @@ +<?php + +namespace Kanboard\Core\Mail\Transport; + +use Swift_Message; +use Swift_Mailer; +use Swift_MailTransport; +use Swift_TransportException; +use Kanboard\Core\Base; +use Kanboard\Core\Mail\ClientInterface; + +/** + * PHP Mail Handler + * + * @package transport + * @author Frederic Guillot + */ +class Mail extends Base implements ClientInterface +{ + /** + * Send a HTML email + * + * @access public + * @param string $email + * @param string $name + * @param string $subject + * @param string $html + * @param string $author + */ + public function sendEmail($email, $name, $subject, $html, $author) + { + try { + + $message = Swift_Message::newInstance() + ->setSubject($subject) + ->setFrom(array(MAIL_FROM => $author)) + ->setBody($html, 'text/html') + ->setTo(array($email => $name)); + + Swift_Mailer::newInstance($this->getTransport())->send($message); + } + catch (Swift_TransportException $e) { + $this->logger->error($e->getMessage()); + } + } + + /** + * Get SwiftMailer transport + * + * @access protected + * @return \Swift_Transport + */ + protected function getTransport() + { + return Swift_MailTransport::newInstance(); + } +} diff --git a/app/Core/Mail/Transport/Sendmail.php b/app/Core/Mail/Transport/Sendmail.php new file mode 100644 index 00000000..849e3385 --- /dev/null +++ b/app/Core/Mail/Transport/Sendmail.php @@ -0,0 +1,25 @@ +<?php + +namespace Kanboard\Core\Mail\Transport; + +use Swift_SendmailTransport; + +/** + * PHP Mail Handler + * + * @package transport + * @author Frederic Guillot + */ +class Sendmail extends Mail +{ + /** + * Get SwiftMailer transport + * + * @access protected + * @return \Swift_Transport + */ + protected function getTransport() + { + return Swift_SendmailTransport::newInstance(MAIL_SENDMAIL_COMMAND); + } +} diff --git a/app/Core/Mail/Transport/Smtp.php b/app/Core/Mail/Transport/Smtp.php new file mode 100644 index 00000000..757408ea --- /dev/null +++ b/app/Core/Mail/Transport/Smtp.php @@ -0,0 +1,30 @@ +<?php + +namespace Kanboard\Core\Mail\Transport; + +use Swift_SmtpTransport; + +/** + * PHP Mail Handler + * + * @package transport + * @author Frederic Guillot + */ +class Smtp extends Mail +{ + /** + * Get SwiftMailer transport + * + * @access protected + * @return \Swift_Transport + */ + protected function getTransport() + { + $transport = Swift_SmtpTransport::newInstance(MAIL_SMTP_HOSTNAME, MAIL_SMTP_PORT); + $transport->setUsername(MAIL_SMTP_USERNAME); + $transport->setPassword(MAIL_SMTP_PASSWORD); + $transport->setEncryption(MAIL_SMTP_ENCRYPTION); + + return $transport; + } +} diff --git a/app/Core/Plugin/Base.php b/app/Core/Plugin/Base.php index d8b196e1..e38ffee8 100644 --- a/app/Core/Plugin/Base.php +++ b/app/Core/Plugin/Base.php @@ -66,7 +66,7 @@ abstract class Base extends \Kanboard\Core\Base */ public function getPluginName() { - return ucfirst(substr(get_called_class(), 7, -7)); + return ucfirst(substr(get_called_class(), 16, -7)); } /** |