From 31f348523db25df2d1312ebe5c8e9e8825cc041c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Lahmann?= <lahmann@ub.uni-leipzig.de>
Date: Thu, 17 Dec 2015 16:36:56 +0100
Subject: [PATCH] * allow securing connection to mailserver either via explicit
 setting in config.ini or by configured mailserver port

---
 config/vufind/config.ini                    |  4 ++++
 module/VuFind/src/VuFind/Mailer/Factory.php | 11 +++++++++++
 2 files changed, 15 insertions(+)

diff --git a/config/vufind/config.ini b/config/vufind/config.ini
index d28382d9143..dc6a0de2f05 100644
--- a/config/vufind/config.ini
+++ b/config/vufind/config.ini
@@ -388,6 +388,10 @@ host            = localhost
 port            = 25
 ;username       = user
 ;password       = pass
+; If a login is required you can define which protocol to use for securing the
+; connection. If no explicit protocol ('tls' or 'ssl') is configured, a protocol
+; based on the configured port is chosen (587 -> tls, 487 -> ssl).
+;secure         = tls
 ; If set to false, users can send anonymous emails; otherwise, they must log in first
 require_login   = true
 ; Should we put the logged-in user's address in the "from" field by default?
diff --git a/module/VuFind/src/VuFind/Mailer/Factory.php b/module/VuFind/src/VuFind/Mailer/Factory.php
index f47a9a7c92f..46ca1d9c396 100644
--- a/module/VuFind/src/VuFind/Mailer/Factory.php
+++ b/module/VuFind/src/VuFind/Mailer/Factory.php
@@ -64,6 +64,17 @@ class Factory implements \Zend\ServiceManager\FactoryInterface
                 'username' => $config->Mail->username,
                 'password' => $config->Mail->password
             ];
+            if (isset($config->Mail->secure)) {
+                // always set user defined secure connection
+                $settings['connection_config']['ssl'] = $config->Mail->secure;
+            } else {
+                // set default secure connection based on configured port
+                if ($settings['port'] == '587') {
+                    $settings['connection_config']['ssl'] = 'tls';
+                } elseif ($settings['port'] == '487') {
+                    $settings['connection_config']['ssl'] = 'ssl';
+                }
+            }
         }
         $transport = new Smtp();
         $transport->setOptions(new SmtpOptions($settings));
-- 
GitLab