summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederic Guillot <fred@kanboard.net>2017-02-18 19:13:08 -0500
committerFrederic Guillot <fred@kanboard.net>2017-02-18 19:13:08 -0500
commitbd0ed331797717ff9db63216df550d95674ba248 (patch)
tree0f3fbe140b26274ab5ac80b74aa7a29d37b0689b
parentb4dc602381a367ce9ed1a1bbe28b7903976fdabe (diff)
Add Reply-To header to emails sent from Kanboard
-rw-r--r--ChangeLog2
-rw-r--r--app/Core/Mail/Client.php41
-rw-r--r--app/Core/Mail/ClientInterface.php15
-rw-r--r--app/Core/Mail/Transport/Mail.php28
-rw-r--r--app/Core/Mail/Transport/Sendmail.php4
-rw-r--r--app/Core/Mail/Transport/Smtp.php8
-rw-r--r--app/Job/EmailJob.php30
-rw-r--r--doc/en_US/plugin-mail-transports.markdown13
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';
@@ -73,6 +78,22 @@ class Client extends Base
}
/**
+ * 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
*
* @access public
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 = '');
}
```