diff options
| author | Greg Roach <fisharebest@webtrees.net> | 2019-09-16 22:29:16 +0100 |
|---|---|---|
| committer | Greg Roach <fisharebest@webtrees.net> | 2019-09-16 22:29:16 +0100 |
| commit | 4d99955e5797e1e12688b8d0592d207a63b2c6c6 (patch) | |
| tree | a07fa02438cc58ab8af732af57702dab7f1a067b | |
| parent | 6f0c730f276816b802405b832685c6b695f6bd1c (diff) | |
| download | webtrees-4d99955e5797e1e12688b8d0592d207a63b2c6c6.tar.gz webtrees-4d99955e5797e1e12688b8d0592d207a63b2c6c6.tar.bz2 webtrees-4d99955e5797e1e12688b8d0592d207a63b2c6c6.zip | |
Fix: #1238 - add support for DKIM mail signatures
| -rw-r--r-- | app/Http/Controllers/AdminSiteController.php | 4 | ||||
| -rw-r--r-- | app/Services/MailService.php | 21 | ||||
| -rw-r--r-- | resources/views/admin/site-mail.phtml | 40 |
3 files changed, 54 insertions, 11 deletions
diff --git a/app/Http/Controllers/AdminSiteController.php b/app/Http/Controllers/AdminSiteController.php index b75e5ca37c..a0e7609f8b 100644 --- a/app/Http/Controllers/AdminSiteController.php +++ b/app/Http/Controllers/AdminSiteController.php @@ -396,6 +396,10 @@ class AdminSiteController extends AbstractBaseController Site::setPreference('SMTP_AUTH_USER', $params['SMTP_AUTH_USER']); Site::setPreference('SMTP_SSL', $params['SMTP_SSL']); Site::setPreference('SMTP_HELO', $params['SMTP_HELO']); + Site::setPreference('DKIM_DOMAIN', $params['DKIM_DOMAIN']); + Site::setPreference('DKIM_SELECTOR', $params['DKIM_SELECTOR']); + Site::setPreference('DKIM_KEY', $params['DKIM_KEY']); + if ($params['SMTP_AUTH_PASS'] !== '') { Site::setPreference('SMTP_AUTH_PASS', $params['SMTP_AUTH_PASS']); } diff --git a/app/Services/MailService.php b/app/Services/MailService.php index 37f4e6d135..a3a74821bf 100644 --- a/app/Services/MailService.php +++ b/app/Services/MailService.php @@ -25,6 +25,7 @@ use Swift_Mailer; use Swift_Message; use Swift_NullTransport; use Swift_SendmailTransport; +use Swift_Signers_DKIMSigner; use Swift_SmtpTransport; use Swift_Transport; use function str_replace; @@ -59,10 +60,26 @@ class MailService ->setFrom($from->email(), $from->realName()) ->setTo($to->email(), $to->realName()) ->setReplyTo($reply_to->email(), $reply_to->realName()) - ->setBody($message_html, 'text/html') - ->addPart($message_text, 'text/plain'); + ->setBody($message_html, 'text/html'); + + $dkim_domain = Site::getPreference('DKIM_DOMAIN'); + $dkim_selector = Site::getPreference('DKIM_SELECTOR'); + $dkim_key = Site::getPreference('DKIM_KEY'); + + if ($dkim_domain !== '' && $dkim_selector !== '' && $dkim_key !== '') { + $signer = new Swift_Signers_DKIMSigner($dkim_key, $dkim_domain, $dkim_selector); + $signer + ->setHeaderCanon('relaxed') + ->setBodyCanon('relaxed'); + + $message->attachSigner($signer); + } else { + // DKIM body hashes don't work with multipart/alternative content. + $message->addPart($message_text, 'text/plain'); + } $mailer = new Swift_Mailer($this->transport()); + $mailer->send($message); } catch (Exception $ex) { Log::addErrorLog('MailService: ' . $ex->getMessage()); diff --git a/resources/views/admin/site-mail.phtml b/resources/views/admin/site-mail.phtml index e9392dae2b..67259bbecd 100644 --- a/resources/views/admin/site-mail.phtml +++ b/resources/views/admin/site-mail.phtml @@ -13,7 +13,6 @@ <form method="post" class="form-horizontal"> <?= csrf_field() ?> - <!-- SMTP_ACTIVE --> <div class="row form-group"> <label for="SMTP_ACTIVE" class="col-sm-3 col-form-label"> <?= /* I18N: A configuration setting */ I18N::translate('Messages') ?> @@ -26,7 +25,6 @@ </div> </div> - <!-- SMTP_FROM_NAME --> <div class="row form-group"> <label for="SMTP_FROM_NAME" class="col-sm-3 col-form-label"> <?= /* I18N: A configuration setting */ I18N::translate('Sender name') ?> @@ -41,7 +39,6 @@ <h2><?= I18N::translate('SMTP mail server') ?></h2> - <!-- SMTP_HOST --> <div class="row form-group"> <label for="SMTP_HOST" class="col-sm-3 col-form-label"> <?= /* I18N: A configuration setting */ I18N::translate('Server name') ?> @@ -54,7 +51,6 @@ </div> </div> - <!-- SMTP_PORT --> <div class="row form-group"> <label for="SMTP_PORT" class="col-sm-3 col-form-label"> <?= /* I18N: A configuration setting */ I18N::translate('Port number') ?> @@ -67,7 +63,6 @@ </div> </div> - <!-- SMTP_AUTH --> <fieldset class="form-group"> <div class="row"> <legend class="col-form-label col-sm-3"> @@ -82,7 +77,6 @@ </div> </fieldset> - <!-- SMTP_AUTH_USER --> <div class="row form-group"> <label for="SMTP_AUTH_USER" class="col-sm-3 col-form-label"> <?= /* I18N: A configuration setting */ I18N::translate('Username') ?> @@ -95,7 +89,6 @@ </div> </div> - <!-- SMTP_AUTH_PASS --> <div class="row form-group"> <label for="SMTP_AUTH_PASS" class="col-sm-3 col-form-label"> <?= /* I18N: A configuration setting */ I18N::translate('Password') ?> @@ -108,7 +101,6 @@ </div> </div> - <!-- SMTP_SSL --> <div class="row form-group"> <label for="SMTP_SSL" class="col-sm-3 col-form-label"> <?= /* I18N: A configuration setting */ I18N::translate('Secure connection') ?> @@ -121,7 +113,6 @@ </div> </div> - <!-- SMTP_HELO --> <div class="row form-group"> <label for="SMTP_HELO" class="col-sm-3 col-form-label"> <?= /* I18N: A configuration setting */ I18N::translate('Sending server name') ?> @@ -134,6 +125,37 @@ </div> </div> + <h2> + <?= /* I18N: https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail */ I18N::translate('DKIM digital signature') ?> + </h2> + + <div class="row form-group"> + <label for="DKIM_DOMAIN" class="col-sm-3 col-form-label"> + <?= I18N::translate('Domain name') ?> + </label> + <div class="col-sm-9"> + <input type="text" class="form-control" id="DKIM_DOMAIN" name="DKIM_DOMAIN" value="<?= e(Site::getPreference('DKIM_DOMAIN')) ?>" maxlength="255"> + </div> + </div> + + <div class="row form-group"> + <label for="DKIM_SELECTOR" class="col-sm-3 col-form-label"> + <?= I18N::translate('Selector') ?> + </label> + <div class="col-sm-9"> + <input type="text" class="form-control" id="DKIM_SELECTOR" name="DKIM_SELECTOR" value="<?= e(Site::getPreference('DKIM_SELECTOR')) ?>" maxlength="255"> + </div> + </div> + + <div class="row form-group"> + <label for="DKIM_KEY" class="col-sm-3 col-form-label"> + <?= I18N::translate('Private key') ?> + </label> + <div class="col-sm-9"> + <textarea class="form-control" id="DKIM_KEY" name="DKIM_KEY"><?= e(Site::getPreference('DKIM_KEY')) ?></textarea> + </div> + </div> + <div class="row form-group"> <div class="offset-sm-3 col-sm-9"> <button type="submit" class="btn btn-primary"> |
