Просмотр исходного кода

Add support to send mail to unauthenticated smtp relay (#2441)

* Add support to send mail to unauthenticated smtp relay(e.g. Internal mail gateway)
* Update script for 1.6.0 release

Co-authored-by: Jaap Marcus <9754650+jaapmarcus@users.noreply.github.com>
Clark Chen 3 лет назад
Родитель
Сommit
afbfa89ada

+ 2 - 2
bin/v-add-mail-domain-smtp-relay

@@ -1,6 +1,6 @@
 #!/bin/bash
 # info: Add mail domain smtp relay support
-# options: USER DOMAIN HOST USERNAME PASSWORD [PORT]
+# options: USER DOMAIN HOST [USERNAME] [PASSWORD] [PORT]
 #
 # example: v-add-mail-domain-smtp-relay user domain.tld srv.smtprelay.tld uname123 pass12345
 #
@@ -30,7 +30,7 @@ source_conf "$HESTIA/conf/hestia.conf"
 #                    Verifications                         #
 #----------------------------------------------------------#
 
-check_args '5' "$#" 'USER DOMAIN HOST USERNAME PASSWORD'
+check_args '3' "$#" 'USER DOMAIN HOST [USERNAME] [PASSWORD] [PORT]'
 is_format_valid 'port' 'user' 'domain' 'host'
 is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM'
 is_object_valid 'user' 'USER' "$user"

+ 2 - 2
bin/v-add-sys-smtp-relay

@@ -1,6 +1,6 @@
 #!/bin/bash
 # info: add system wide smtp relay support
-# options: HOST USERNAME PASSWORD [PORT]
+# options: HOST [USERNAME] [PASSWORD] [PORT]
 #
 # example: v-add-sys-smtp-relay srv.smtprelay.tld uname123 pass12345
 #
@@ -28,7 +28,7 @@ source_conf "$HESTIA/conf/hestia.conf"
 #                    Verifications                         #
 #----------------------------------------------------------#
 
-check_args '3' "$#" 'HOST USERNAME PASSWORD [PORT]'
+check_args '1' "$#" 'HOST [USERNAME] [PASSWORD] [PORT]'
 is_format_valid 'port' 'host' 'password'
 is_username_format_valid "$username" 'username'
 format_no_quotes "$password" 'passowrd'

+ 11 - 0
install/deb/exim/exim4.conf.4.94.template

@@ -250,6 +250,17 @@ dovecot_login:
 ######################################################################
 begin routers
 
+send_via_unauthenticated_smtp_relay:
+  driver = manualroute
+  address_data = SMTP_RELAY_HOST:SMTP_RELAY_PORT
+  domains = !+local_domains
+  require_files = SMTP_RELAY_FILE
+  condition = ${if eq{SMTP_RELAY_USER}{}}
+  transport = remote_smtp
+  route_list = * ${extract{1}{:}{$address_data}}::${extract{2}{:}{$address_data}}
+  no_more
+  no_verify
+
 send_via_smtp_relay:
   driver = manualroute
   address_data = SMTP_RELAY_HOST:SMTP_RELAY_PORT

+ 11 - 0
install/deb/exim/exim4.conf.template

@@ -250,6 +250,17 @@ dovecot_login:
 ######################################################################
 begin routers
 
+send_via_unauthenticated_smtp_relay:
+  driver = manualroute
+  address_data = SMTP_RELAY_HOST:SMTP_RELAY_PORT
+  domains = !+local_domains
+  require_files = SMTP_RELAY_FILE
+  condition = ${if eq{SMTP_RELAY_USER}{}}
+  transport = remote_smtp
+  route_list = * ${extract{1}{:}{$address_data}}::${extract{2}{:}{$address_data}}
+  no_more
+  no_verify
+
 send_via_smtp_relay:
   driver = manualroute
   address_data = SMTP_RELAY_HOST:SMTP_RELAY_PORT

+ 2 - 0
install/upgrade/versions/1.5.9.sh

@@ -20,3 +20,5 @@ upgrade_config_set_value 'UPGRADE_UPDATE_DNS_TEMPLATES' 'false'
 upgrade_config_set_value 'UPGRADE_UPDATE_MAIL_TEMPLATES' 'false'
 upgrade_config_set_value 'UPGRADE_REBUILD_USERS' 'false'
 upgrade_config_set_value 'UPGRADE_UPDATE_FILEMANAGER_CONFIG' 'false'
+
+

+ 13 - 0
install/upgrade/versions/1.6.0.sh

@@ -28,6 +28,19 @@ if [ "$MAIL_SYSTEM" = "exim4" ]; then
     sed -i '115,250 s/warn    ratelimit     = 100 \/ 1h \/ strict \/ $authenticated_id/warn    ratelimit     = ${eval:$acl_c_msg_limit \/ 2} \/ 1h \/ strict \/ $authenticated_id/g' /etc/exim4/exim4.conf.template
     # Add missing limit.conf file
     cp $HESTIA_INSTALL_DIR/exim/limit.conf /etc/exim4/limit.conf
+    
+    # Upgrading Mail System
+    if [ "$MAIL_SYSTEM" == "exim4" ]; then
+        if ! grep -q "send_via_unauthenticated_smtp_relay" /etc/exim4/exim4.conf.template; then
+    
+            echo '[ * ] Enabling SMTP relay support...'
+            # Add smtp relay router
+            insert='send_via_unauthenticated_smtp_relay:\n  driver = manualroute\n  address_data = SMTP_RELAY_HOST:SMTP_RELAY_PORT\n  domains = !+local_domains\n  require_files = SMTP_RELAY_FILE\n  condition = ${if eq{SMTP_RELAY_USER}{}}\n  transport = remote_smtp\n  route_list = * ${extract{1}{:}{$address_data}}::${extract{2}{:}{$address_data}}\n  no_more\n  no_verify\n'
+    
+            line=$(expr $(sed -n '/begin routers/=' /etc/exim4/exim4.conf.template) + 2)
+            sed -i "${line}i $insert" /etc/exim4/exim4.conf.template
+        fi
+    fi
 fi
 
 # Adding LE autorenew cronjob if there are none

+ 11 - 15
web/add/mail/index.php

@@ -101,26 +101,22 @@ if (!empty($_POST['ok'])) {
 
     // Add SMTP Relay Support
     if (empty($_SESSION['error_msg'])) {
-        if (isset($_POST['v_smtp_relay']) && (!empty($_POST['v_smtp_relay_host'])) && (!empty($_POST['v_smtp_relay_user']))) {
+        if (isset($_POST['v_smtp_relay']) && !empty($_POST['v_smtp_relay_host'])) {
             if (($_POST['v_smtp_relay_host'] != $v_smtp_relay_host) ||
                 ($_POST['v_smtp_relay_user'] != $v_smtp_relay_user) ||
                 ($_POST['v_smtp_relay_port'] != $v_smtp_relay_port)) {
-                if (!empty($_POST['v_smtp_relay_pass'])) {
-                    $v_smtp_relay = true;
-                    $v_smtp_relay_host = escapeshellarg($_POST['v_smtp_relay_host']);
-                    $v_smtp_relay_user = escapeshellarg($_POST['v_smtp_relay_user']);
-                    $v_smtp_relay_pass = escapeshellarg($_POST['v_smtp_relay_pass']);
-                    if (!empty($_POST['v_smtp_relay_port'])) {
-                        $v_smtp_relay_port = escapeshellarg($_POST['v_smtp_relay_port']);
-                    } else {
-                        $v_smtp_relay_port = '587';
-                    }
-                    exec(HESTIA_CMD."v-add-mail-domain-smtp-relay ".$user." ".$v_domain." ".$v_smtp_relay_host." ".$v_smtp_relay_user." ".$v_smtp_relay_pass." ".$v_smtp_relay_port, $output, $return_var);
-                    check_return_code($return_var, $output);
-                    unset($output);
+                $v_smtp_relay = true;
+                $v_smtp_relay_host = escapeshellarg($_POST['v_smtp_relay_host']);
+                $v_smtp_relay_user = escapeshellarg($_POST['v_smtp_relay_user']);
+                $v_smtp_relay_pass = escapeshellarg($_POST['v_smtp_relay_pass']);
+                if (!empty($_POST['v_smtp_relay_port'])) {
+                    $v_smtp_relay_port = escapeshellarg($_POST['v_smtp_relay_port']);
                 } else {
-                    $_SESSION['error_msg'] = _('SMTP Relay Password is required');
+                    $v_smtp_relay_port = '587';
                 }
+                exec(HESTIA_CMD."v-add-mail-domain-smtp-relay ".$user." ".$v_domain." ".$v_smtp_relay_host." '".$v_smtp_relay_user."' '".$v_smtp_relay_pass."' ".$v_smtp_relay_port, $output, $return_var);
+                check_return_code($return_var, $output);
+                unset($output);
             }
         }
     }

+ 12 - 17
web/edit/mail/index.php

@@ -430,27 +430,22 @@ if ((!empty($_POST['save'])) && (!empty($_GET['domain'])) && (empty($_GET['accou
 
     // Add SMTP Relay Support
     if (empty($_SESSION['error_msg'])) {
-        if (isset($_POST['v_smtp_relay']) && (!empty($_POST['v_smtp_relay_host'])) && (!empty($_POST['v_smtp_relay_user']))) {
+        if (isset($_POST['v_smtp_relay']) && !empty($_POST['v_smtp_relay_host'])) {
             if (($_POST['v_smtp_relay_host'] != $v_smtp_relay_host) ||
                 ($_POST['v_smtp_relay_user'] != $v_smtp_relay_user) ||
-                ($_POST['v_smtp_relay_port'] != $v_smtp_relay_port) ||
-                (!empty($_POST['v_smtp_relay_pass']))) {
-                if (!empty($_POST['v_smtp_relay_pass'])) {
-                    $v_smtp_relay = true;
-                    $v_smtp_relay_host = escapeshellarg($_POST['v_smtp_relay_host']);
-                    $v_smtp_relay_user = escapeshellarg($_POST['v_smtp_relay_user']);
-                    $v_smtp_relay_pass = escapeshellarg($_POST['v_smtp_relay_pass']);
-                    if (!empty($_POST['v_smtp_relay_port'])) {
-                        $v_smtp_relay_port = escapeshellarg($_POST['v_smtp_relay_port']);
-                    } else {
-                        $v_smtp_relay_port = '587';
-                    }
-                    exec(HESTIA_CMD."v-add-mail-domain-smtp-relay ".$v_username." ".escapeshellarg($v_domain)." ".$v_smtp_relay_host." ".$v_smtp_relay_user." ".$v_smtp_relay_pass." ".$v_smtp_relay_port, $output, $return_var);
-                    check_return_code($return_var, $output);
-                    unset($output);
+                ($_POST['v_smtp_relay_port'] != $v_smtp_relay_port)) {
+                $v_smtp_relay = true;
+                $v_smtp_relay_host = escapeshellarg($_POST['v_smtp_relay_host']);
+                $v_smtp_relay_user = escapeshellarg($_POST['v_smtp_relay_user']);
+                $v_smtp_relay_pass = escapeshellarg($_POST['v_smtp_relay_pass']);
+                if (!empty($_POST['v_smtp_relay_port'])) {
+                    $v_smtp_relay_port = escapeshellarg($_POST['v_smtp_relay_port']);
                 } else {
-                    $_SESSION['error_msg'] = _('SMTP Relay Password is required');
+                    $v_smtp_relay_port = '587';
                 }
+                exec(HESTIA_CMD."v-add-mail-domain-smtp-relay ".$v_username." ".escapeshellarg($v_domain)." ".$v_smtp_relay_host." '".$v_smtp_relay_user."' '".$v_smtp_relay_pass."' ".$v_smtp_relay_port, $output, $return_var);
+                check_return_code($return_var, $output);
+                unset($output);
             }
         }
         if ((!isset($_POST['v_smtp_relay'])) && ($v_smtp_relay == true)) {

+ 12 - 17
web/edit/server/index.php

@@ -576,27 +576,22 @@ if (!empty($_POST['save'])) {
 
     // Update system wide smtp relay
     if (empty($_SESSION['error_msg'])) {
-        if (isset($_POST['v_smtp_relay']) && (!empty($_POST['v_smtp_relay_host'])) && (!empty($_POST['v_smtp_relay_user']))) {
+        if (isset($_POST['v_smtp_relay']) && !empty($_POST['v_smtp_relay_host'])) {
             if (($_POST['v_smtp_relay_host'] != $v_smtp_relay_host) ||
                      ($_POST['v_smtp_relay_user'] != $v_smtp_relay_user) ||
-                     ($_POST['v_smtp_relay_port'] != $v_smtp_relay_port) ||
-                     (!empty($_POST['v_smtp_relay_pass']))) {
-                if (!empty($_POST['v_smtp_relay_pass'])) {
-                    $v_smtp_relay = true;
-                    $v_smtp_relay_host = escapeshellarg($_POST['v_smtp_relay_host']);
-                    $v_smtp_relay_user = escapeshellarg($_POST['v_smtp_relay_user']);
-                    $v_smtp_relay_pass = escapeshellarg($_POST['v_smtp_relay_pass']);
-                    if (!empty($_POST['v_smtp_relay_port'])) {
-                        $v_smtp_relay_port = escapeshellarg($_POST['v_smtp_relay_port']);
-                    } else {
-                        $v_smtp_relay_port = '587';
-                    }
-                    exec(HESTIA_CMD."v-add-sys-smtp-relay ".$v_smtp_relay_host." ".$v_smtp_relay_user." ".$v_smtp_relay_pass." ".$v_smtp_relay_port, $output, $return_var);
-                    check_return_code($return_var, $output);
-                    unset($output);
+                     ($_POST['v_smtp_relay_port'] != $v_smtp_relay_port)) {
+                $v_smtp_relay = true;
+                $v_smtp_relay_host = escapeshellarg($_POST['v_smtp_relay_host']);
+                $v_smtp_relay_user = escapeshellarg($_POST['v_smtp_relay_user']);
+                $v_smtp_relay_pass = escapeshellarg($_POST['v_smtp_relay_pass']);
+                if (!empty($_POST['v_smtp_relay_port'])) {
+                    $v_smtp_relay_port = escapeshellarg($_POST['v_smtp_relay_port']);
                 } else {
-                    $_SESSION['error_msg'] = _('SMTP Relay Password is required');
+                    $v_smtp_relay_port = '587';
                 }
+                exec(HESTIA_CMD."v-add-sys-smtp-relay ".$v_smtp_relay_host." ".$v_smtp_relay_user." ".$v_smtp_relay_pass." ".$v_smtp_relay_port, $output, $return_var);
+                check_return_code($return_var, $output);
+                unset($output);
             }
         }
         if ((!isset($_POST['v_smtp_relay'])) && ($v_smtp_relay == true)) {