From bd0ed331797717ff9db63216df550d95674ba248 Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Sat, 18 Feb 2017 19:13:08 -0500 Subject: Add Reply-To header to emails sent from Kanboard --- ChangeLog | 2 ++ app/Core/Mail/Client.php | 41 +++++++++++++++++++++++-------- app/Core/Mail/ClientInterface.php | 15 +++++------ app/Core/Mail/Transport/Mail.php | 28 ++++++++++++--------- app/Core/Mail/Transport/Sendmail.php | 4 +-- app/Core/Mail/Transport/Smtp.php | 8 +++--- app/Job/EmailJob.php | 30 +++++++++++----------- doc/en_US/plugin-mail-transports.markdown | 13 +++++----- 8 files changed, 86 insertions(+), 55 deletions(-) diff --git a/ChangeLog b/ChangeLog index 39ca44b3..e7b81e7a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,7 @@ Version 1.0.40 (unreleased) New features: * Send comments by email +* Add Reply-To header to emails sent from Kanboard * Upload Sqlite database from user interface Improvements: @@ -23,6 +24,7 @@ Breaking changes: * Columns "default_swimlane" and "show_default_swimlane" from "projects" table are not used anymore * Remove API method "getDefaultSwimlane()" * Add mandatory argument "project_id" to API method "updateSwimlane()" +* Change interface for mail transports Bug fixes: diff --git a/app/Core/Mail/Client.php b/app/Core/Mail/Client.php index ee3bdead..334f8816 100644 --- a/app/Core/Mail/Client.php +++ b/app/Core/Mail/Client.php @@ -9,7 +9,7 @@ use Kanboard\Core\Base; /** * Mail Client * - * @package mail + * @package Kanboard\Core\Mail * @author Frederic Guillot */ class Client extends Base @@ -38,30 +38,35 @@ class Client extends Base * Send a HTML email * * @access public - * @param string $email - * @param string $name + * @param string $recipientEmail + * @param string $recipientName * @param string $subject * @param string $html * @return Client */ - public function send($email, $name, $subject, $html) + public function send($recipientEmail, $recipientName, $subject, $html) { - if (! empty($email)) { - $this->queueManager->push(EmailJob::getInstance($this->container) - ->withParams($email, $name, $subject, $html, $this->getAuthor()) - ); + if (! empty($recipientEmail)) { + $this->queueManager->push(EmailJob::getInstance($this->container)->withParams( + $recipientEmail, + $recipientName, + $subject, + $html, + $this->getAuthorName(), + $this->getAuthorEmail() + )); } return $this; } /** - * Get email author + * Get author name * * @access public * @return string */ - public function getAuthor() + public function getAuthorName() { $author = 'Kanboard'; @@ -72,6 +77,22 @@ class Client extends Base return $author; } + /** + * Get author email + * + * @access public + * @return string + */ + public function getAuthorEmail() + { + if ($this->userSession->isLogged()) { + $userData = $this->userSession->getAll(); + return ! empty($userData['email']) ? $userData['email'] : ''; + } + + return ''; + } + /** * Get mail transport instance * diff --git a/app/Core/Mail/ClientInterface.php b/app/Core/Mail/ClientInterface.php index 66263a98..3bfa32d3 100644 --- a/app/Core/Mail/ClientInterface.php +++ b/app/Core/Mail/ClientInterface.php @@ -5,7 +5,7 @@ namespace Kanboard\Core\Mail; /** * Mail Client Interface * - * @package mail + * @package Kanboard\Core\Mail * @author Frederic Guillot */ interface ClientInterface @@ -14,11 +14,12 @@ interface ClientInterface * Send a HTML email * * @access public - * @param string $email - * @param string $name - * @param string $subject - * @param string $html - * @param string $author + * @param string $recipientEmail + * @param string $recipientName + * @param string $subject + * @param string $html + * @param string $authorName + * @param string $authorEmail */ - public function sendEmail($email, $name, $subject, $html, $author); + public function sendEmail($recipientEmail, $recipientName, $subject, $html, $authorName, $authorEmail = ''); } diff --git a/app/Core/Mail/Transport/Mail.php b/app/Core/Mail/Transport/Mail.php index c99cc8ba..0d819f77 100644 --- a/app/Core/Mail/Transport/Mail.php +++ b/app/Core/Mail/Transport/Mail.php @@ -12,7 +12,7 @@ use Kanboard\Core\Mail\ClientInterface; /** * PHP Mail Handler * - * @package transport + * @package Kanboard\Core\Mail\Transport * @author Frederic Guillot */ class Mail extends Base implements ClientInterface @@ -21,20 +21,26 @@ 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 + * @param string $recipientEmail + * @param string $recipientName + * @param string $subject + * @param string $html + * @param string $authorName + * @param string $authorEmail */ - public function sendEmail($email, $name, $subject, $html, $author) + public function sendEmail($recipientEmail, $recipientName, $subject, $html, $authorName, $authorEmail = '') { try { $message = Swift_Message::newInstance() ->setSubject($subject) - ->setFrom(array($this->helper->mail->getMailSenderAddress() => $author)) - ->setTo(array($email => $name)) - ->setBody($html, 'text/html'); + ->setFrom($this->helper->mail->getMailSenderAddress(), $authorName) + ->setTo(array($recipientEmail => $recipientName)); + + if (! empty($authorEmail)) { + $message->setReplyTo($authorEmail); + } + + $message->setBody($html, 'text/html'); Swift_Mailer::newInstance($this->getTransport())->send($message); } catch (Swift_TransportException $e) { @@ -46,7 +52,7 @@ class Mail extends Base implements ClientInterface * Get SwiftMailer transport * * @access protected - * @return \Swift_Transport|\Swift_MailTransport|\Swift_SmtpTransport|\Swift_SendmailTransport + * @return \Swift_Transport */ protected function getTransport() { diff --git a/app/Core/Mail/Transport/Sendmail.php b/app/Core/Mail/Transport/Sendmail.php index 039be705..a1a2cbd6 100644 --- a/app/Core/Mail/Transport/Sendmail.php +++ b/app/Core/Mail/Transport/Sendmail.php @@ -7,7 +7,7 @@ use Swift_SendmailTransport; /** * PHP Mail Handler * - * @package transport + * @package Kanboard\Core\Mail\Transport * @author Frederic Guillot */ class Sendmail extends Mail @@ -16,7 +16,7 @@ class Sendmail extends Mail * Get SwiftMailer transport * * @access protected - * @return \Swift_Transport|\Swift_MailTransport|\Swift_SmtpTransport|\Swift_SendmailTransport + * @return \Swift_Transport */ protected function getTransport() { diff --git a/app/Core/Mail/Transport/Smtp.php b/app/Core/Mail/Transport/Smtp.php index 815dde5d..7338a81e 100644 --- a/app/Core/Mail/Transport/Smtp.php +++ b/app/Core/Mail/Transport/Smtp.php @@ -7,7 +7,7 @@ use Swift_SmtpTransport; /** * PHP Mail Handler * - * @package transport + * @package Kanboard\Core\Mail\Transport * @author Frederic Guillot */ class Smtp extends Mail @@ -16,7 +16,7 @@ class Smtp extends Mail * Get SwiftMailer transport * * @access protected - * @return \Swift_Transport|\Swift_MailTransport|\Swift_SmtpTransport|\Swift_SendmailTransport + * @return \Swift_Transport */ protected function getTransport() { @@ -29,8 +29,8 @@ class Smtp extends Mail $transport->setStreamOptions(array( 'ssl' => array( 'allow_self_signed' => true, - 'verify_peer' => false, - 'verify_peer_name' => false, + 'verify_peer' => false, + 'verify_peer_name' => false, ) )); } diff --git a/app/Job/EmailJob.php b/app/Job/EmailJob.php index 2da3ca2a..c6eb500a 100644 --- a/app/Job/EmailJob.php +++ b/app/Job/EmailJob.php @@ -14,16 +14,17 @@ class EmailJob extends BaseJob * Set job parameters * * @access public - * @param string $email - * @param string $name + * @param string $recipientEmail + * @param string $recipientName * @param string $subject * @param string $html - * @param string $author + * @param string $authorName + * @param string $authorEmail * @return $this */ - public function withParams($email, $name, $subject, $html, $author) + public function withParams($recipientEmail, $recipientName, $subject, $html, $authorName, $authorEmail) { - $this->jobParams = array($email, $name, $subject, $html, $author); + $this->jobParams = array($recipientEmail, $recipientName, $subject, $html, $authorName, $authorEmail); return $this; } @@ -31,25 +32,24 @@ class EmailJob extends BaseJob * Execute job * * @access public - * @param string $email - * @param string $name + * @param string $recipientEmail + * @param string $recipientName * @param string $subject * @param string $html - * @param string $author + * @param string $authorName + * @param string $authorEmail */ - public function execute($email, $name, $subject, $html, $author) + public function execute($recipientEmail, $recipientName, $subject, $html, $authorName, $authorEmail) { $transport = $this->helper->mail->getMailTransport(); - $this->logger->debug(__METHOD__.' Sending email to: '.$email.' using transport: '.$transport); $startTime = microtime(true); + $this->logger->debug(__METHOD__.' Sending email to: '.$recipientEmail.' using transport: '.$transport); + $this->emailClient ->getTransport($transport) - ->sendEmail($email, $name, $subject, $html, $author) - ; + ->sendEmail($recipientEmail, $recipientName, $subject, $html, $authorName, $authorEmail); - if (DEBUG) { - $this->logger->debug('Email sent in '.round(microtime(true) - $startTime, 6).' seconds'); - } + $this->logger->debug(__METHOD__.' Email sent in '.round(microtime(true) - $startTime, 6).' seconds'); } } diff --git a/doc/en_US/plugin-mail-transports.markdown b/doc/en_US/plugin-mail-transports.markdown index 33ce5e3b..f3f9efc6 100644 --- a/doc/en_US/plugin-mail-transports.markdown +++ b/doc/en_US/plugin-mail-transports.markdown @@ -24,13 +24,14 @@ interface ClientInterface * Send a HTML email * * @access public - * @param string $email - * @param string $name - * @param string $subject - * @param string $html - * @param string $author + * @param string $recipientEmail + * @param string $recipientName + * @param string $subject + * @param string $html + * @param string $authorName + * @param string $authorEmail */ - public function sendEmail($email, $name, $subject, $html, $author); + public function sendEmail($recipientEmail, $recipientName, $subject, $html, $authorName, $authorEmail = ''); } ``` -- cgit v1.2.3