Skip to content

Commit afbfa89

Browse files
Add support to send mail to unauthenticated smtp relay (hestiacp#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>
1 parent d8d2622 commit afbfa89

File tree

9 files changed

+76
-53
lines changed

9 files changed

+76
-53
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash
22
# info: Add mail domain smtp relay support
3-
# options: USER DOMAIN HOST USERNAME PASSWORD [PORT]
3+
# options: USER DOMAIN HOST [USERNAME] [PASSWORD] [PORT]
44
#
55
# example: v-add-mail-domain-smtp-relay user domain.tld srv.smtprelay.tld uname123 pass12345
66
#
@@ -30,7 +30,7 @@ source_conf "$HESTIA/conf/hestia.conf"
3030
# Verifications #
3131
#----------------------------------------------------------#
3232

33-
check_args '5' "$#" 'USER DOMAIN HOST USERNAME PASSWORD'
33+
check_args '3' "$#" 'USER DOMAIN HOST [USERNAME] [PASSWORD] [PORT]'
3434
is_format_valid 'port' 'user' 'domain' 'host'
3535
is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM'
3636
is_object_valid 'user' 'USER' "$user"

bin/v-add-sys-smtp-relay

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash
22
# info: add system wide smtp relay support
3-
# options: HOST USERNAME PASSWORD [PORT]
3+
# options: HOST [USERNAME] [PASSWORD] [PORT]
44
#
55
# example: v-add-sys-smtp-relay srv.smtprelay.tld uname123 pass12345
66
#
@@ -28,7 +28,7 @@ source_conf "$HESTIA/conf/hestia.conf"
2828
# Verifications #
2929
#----------------------------------------------------------#
3030

31-
check_args '3' "$#" 'HOST USERNAME PASSWORD [PORT]'
31+
check_args '1' "$#" 'HOST [USERNAME] [PASSWORD] [PORT]'
3232
is_format_valid 'port' 'host' 'password'
3333
is_username_format_valid "$username" 'username'
3434
format_no_quotes "$password" 'passowrd'

install/deb/exim/exim4.conf.4.94.template

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,17 @@ dovecot_login:
250250
######################################################################
251251
begin routers
252252

253+
send_via_unauthenticated_smtp_relay:
254+
driver = manualroute
255+
address_data = SMTP_RELAY_HOST:SMTP_RELAY_PORT
256+
domains = !+local_domains
257+
require_files = SMTP_RELAY_FILE
258+
condition = ${if eq{SMTP_RELAY_USER}{}}
259+
transport = remote_smtp
260+
route_list = * ${extract{1}{:}{$address_data}}::${extract{2}{:}{$address_data}}
261+
no_more
262+
no_verify
263+
253264
send_via_smtp_relay:
254265
driver = manualroute
255266
address_data = SMTP_RELAY_HOST:SMTP_RELAY_PORT

install/deb/exim/exim4.conf.template

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,17 @@ dovecot_login:
250250
######################################################################
251251
begin routers
252252

253+
send_via_unauthenticated_smtp_relay:
254+
driver = manualroute
255+
address_data = SMTP_RELAY_HOST:SMTP_RELAY_PORT
256+
domains = !+local_domains
257+
require_files = SMTP_RELAY_FILE
258+
condition = ${if eq{SMTP_RELAY_USER}{}}
259+
transport = remote_smtp
260+
route_list = * ${extract{1}{:}{$address_data}}::${extract{2}{:}{$address_data}}
261+
no_more
262+
no_verify
263+
253264
send_via_smtp_relay:
254265
driver = manualroute
255266
address_data = SMTP_RELAY_HOST:SMTP_RELAY_PORT

install/upgrade/versions/1.5.9.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,5 @@ upgrade_config_set_value 'UPGRADE_UPDATE_DNS_TEMPLATES' 'false'
2020
upgrade_config_set_value 'UPGRADE_UPDATE_MAIL_TEMPLATES' 'false'
2121
upgrade_config_set_value 'UPGRADE_REBUILD_USERS' 'false'
2222
upgrade_config_set_value 'UPGRADE_UPDATE_FILEMANAGER_CONFIG' 'false'
23+
24+

install/upgrade/versions/1.6.0.sh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,19 @@ if [ "$MAIL_SYSTEM" = "exim4" ]; then
2828
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
2929
# Add missing limit.conf file
3030
cp $HESTIA_INSTALL_DIR/exim/limit.conf /etc/exim4/limit.conf
31+
32+
# Upgrading Mail System
33+
if [ "$MAIL_SYSTEM" == "exim4" ]; then
34+
if ! grep -q "send_via_unauthenticated_smtp_relay" /etc/exim4/exim4.conf.template; then
35+
36+
echo '[ * ] Enabling SMTP relay support...'
37+
# Add smtp relay router
38+
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'
39+
40+
line=$(expr $(sed -n '/begin routers/=' /etc/exim4/exim4.conf.template) + 2)
41+
sed -i "${line}i $insert" /etc/exim4/exim4.conf.template
42+
fi
43+
fi
3144
fi
3245

3346
# Adding LE autorenew cronjob if there are none

web/add/mail/index.php

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -101,26 +101,22 @@
101101

102102
// Add SMTP Relay Support
103103
if (empty($_SESSION['error_msg'])) {
104-
if (isset($_POST['v_smtp_relay']) && (!empty($_POST['v_smtp_relay_host'])) && (!empty($_POST['v_smtp_relay_user']))) {
104+
if (isset($_POST['v_smtp_relay']) && !empty($_POST['v_smtp_relay_host'])) {
105105
if (($_POST['v_smtp_relay_host'] != $v_smtp_relay_host) ||
106106
($_POST['v_smtp_relay_user'] != $v_smtp_relay_user) ||
107107
($_POST['v_smtp_relay_port'] != $v_smtp_relay_port)) {
108-
if (!empty($_POST['v_smtp_relay_pass'])) {
109-
$v_smtp_relay = true;
110-
$v_smtp_relay_host = escapeshellarg($_POST['v_smtp_relay_host']);
111-
$v_smtp_relay_user = escapeshellarg($_POST['v_smtp_relay_user']);
112-
$v_smtp_relay_pass = escapeshellarg($_POST['v_smtp_relay_pass']);
113-
if (!empty($_POST['v_smtp_relay_port'])) {
114-
$v_smtp_relay_port = escapeshellarg($_POST['v_smtp_relay_port']);
115-
} else {
116-
$v_smtp_relay_port = '587';
117-
}
118-
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);
119-
check_return_code($return_var, $output);
120-
unset($output);
108+
$v_smtp_relay = true;
109+
$v_smtp_relay_host = escapeshellarg($_POST['v_smtp_relay_host']);
110+
$v_smtp_relay_user = escapeshellarg($_POST['v_smtp_relay_user']);
111+
$v_smtp_relay_pass = escapeshellarg($_POST['v_smtp_relay_pass']);
112+
if (!empty($_POST['v_smtp_relay_port'])) {
113+
$v_smtp_relay_port = escapeshellarg($_POST['v_smtp_relay_port']);
121114
} else {
122-
$_SESSION['error_msg'] = _('SMTP Relay Password is required');
115+
$v_smtp_relay_port = '587';
123116
}
117+
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);
118+
check_return_code($return_var, $output);
119+
unset($output);
124120
}
125121
}
126122
}

web/edit/mail/index.php

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -430,27 +430,22 @@
430430

431431
// Add SMTP Relay Support
432432
if (empty($_SESSION['error_msg'])) {
433-
if (isset($_POST['v_smtp_relay']) && (!empty($_POST['v_smtp_relay_host'])) && (!empty($_POST['v_smtp_relay_user']))) {
433+
if (isset($_POST['v_smtp_relay']) && !empty($_POST['v_smtp_relay_host'])) {
434434
if (($_POST['v_smtp_relay_host'] != $v_smtp_relay_host) ||
435435
($_POST['v_smtp_relay_user'] != $v_smtp_relay_user) ||
436-
($_POST['v_smtp_relay_port'] != $v_smtp_relay_port) ||
437-
(!empty($_POST['v_smtp_relay_pass']))) {
438-
if (!empty($_POST['v_smtp_relay_pass'])) {
439-
$v_smtp_relay = true;
440-
$v_smtp_relay_host = escapeshellarg($_POST['v_smtp_relay_host']);
441-
$v_smtp_relay_user = escapeshellarg($_POST['v_smtp_relay_user']);
442-
$v_smtp_relay_pass = escapeshellarg($_POST['v_smtp_relay_pass']);
443-
if (!empty($_POST['v_smtp_relay_port'])) {
444-
$v_smtp_relay_port = escapeshellarg($_POST['v_smtp_relay_port']);
445-
} else {
446-
$v_smtp_relay_port = '587';
447-
}
448-
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);
449-
check_return_code($return_var, $output);
450-
unset($output);
436+
($_POST['v_smtp_relay_port'] != $v_smtp_relay_port)) {
437+
$v_smtp_relay = true;
438+
$v_smtp_relay_host = escapeshellarg($_POST['v_smtp_relay_host']);
439+
$v_smtp_relay_user = escapeshellarg($_POST['v_smtp_relay_user']);
440+
$v_smtp_relay_pass = escapeshellarg($_POST['v_smtp_relay_pass']);
441+
if (!empty($_POST['v_smtp_relay_port'])) {
442+
$v_smtp_relay_port = escapeshellarg($_POST['v_smtp_relay_port']);
451443
} else {
452-
$_SESSION['error_msg'] = _('SMTP Relay Password is required');
444+
$v_smtp_relay_port = '587';
453445
}
446+
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);
447+
check_return_code($return_var, $output);
448+
unset($output);
454449
}
455450
}
456451
if ((!isset($_POST['v_smtp_relay'])) && ($v_smtp_relay == true)) {

web/edit/server/index.php

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -576,27 +576,22 @@
576576

577577
// Update system wide smtp relay
578578
if (empty($_SESSION['error_msg'])) {
579-
if (isset($_POST['v_smtp_relay']) && (!empty($_POST['v_smtp_relay_host'])) && (!empty($_POST['v_smtp_relay_user']))) {
579+
if (isset($_POST['v_smtp_relay']) && !empty($_POST['v_smtp_relay_host'])) {
580580
if (($_POST['v_smtp_relay_host'] != $v_smtp_relay_host) ||
581581
($_POST['v_smtp_relay_user'] != $v_smtp_relay_user) ||
582-
($_POST['v_smtp_relay_port'] != $v_smtp_relay_port) ||
583-
(!empty($_POST['v_smtp_relay_pass']))) {
584-
if (!empty($_POST['v_smtp_relay_pass'])) {
585-
$v_smtp_relay = true;
586-
$v_smtp_relay_host = escapeshellarg($_POST['v_smtp_relay_host']);
587-
$v_smtp_relay_user = escapeshellarg($_POST['v_smtp_relay_user']);
588-
$v_smtp_relay_pass = escapeshellarg($_POST['v_smtp_relay_pass']);
589-
if (!empty($_POST['v_smtp_relay_port'])) {
590-
$v_smtp_relay_port = escapeshellarg($_POST['v_smtp_relay_port']);
591-
} else {
592-
$v_smtp_relay_port = '587';
593-
}
594-
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);
595-
check_return_code($return_var, $output);
596-
unset($output);
582+
($_POST['v_smtp_relay_port'] != $v_smtp_relay_port)) {
583+
$v_smtp_relay = true;
584+
$v_smtp_relay_host = escapeshellarg($_POST['v_smtp_relay_host']);
585+
$v_smtp_relay_user = escapeshellarg($_POST['v_smtp_relay_user']);
586+
$v_smtp_relay_pass = escapeshellarg($_POST['v_smtp_relay_pass']);
587+
if (!empty($_POST['v_smtp_relay_port'])) {
588+
$v_smtp_relay_port = escapeshellarg($_POST['v_smtp_relay_port']);
597589
} else {
598-
$_SESSION['error_msg'] = _('SMTP Relay Password is required');
590+
$v_smtp_relay_port = '587';
599591
}
592+
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);
593+
check_return_code($return_var, $output);
594+
unset($output);
600595
}
601596
}
602597
if ((!isset($_POST['v_smtp_relay'])) && ($v_smtp_relay == true)) {

0 commit comments

Comments
 (0)