Add Reply-To header to emails sent from Kanboard

This commit is contained in:
Frederic Guillot
2017-02-18 19:13:08 -05:00
parent b4dc602381
commit bd0ed33179
8 changed files with 86 additions and 55 deletions

View File

@@ -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
*

View File

@@ -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 = '');
}

View File

@@ -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()
{

View File

@@ -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()
{

View File

@@ -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,
)
));
}

View File

@@ -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');
}
}