[Web] Allow to set transport maps, rename relayhosts to sender-dependent transports
This commit is contained in:
@@ -4,23 +4,49 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/vars.inc.php';
|
||||
|
||||
error_reporting(0);
|
||||
if (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == "admin") {
|
||||
$relayhost_id = intval($_GET['relayhost_id']);
|
||||
$transport_id = intval($_GET['transport_id']);
|
||||
$transport_type = $_GET['transport_type'];
|
||||
if (isset($_GET['mail_from']) && filter_var($_GET['mail_from'], FILTER_VALIDATE_EMAIL)) {
|
||||
$mail_from = $_GET['mail_from'];
|
||||
}
|
||||
else {
|
||||
$mail_from = "relay@example.org";
|
||||
}
|
||||
$relayhost_details = relayhost('details', $relayhost_id);
|
||||
if (!empty($relayhost_details)) {
|
||||
if ($transport_type == 'transport-map') {
|
||||
$transport_details = transport('details', $transport_id);
|
||||
$nexthop = $transport_details['nexthop'];
|
||||
}
|
||||
elseif ($transport_type == 'sender-dependent') {
|
||||
$transport_details = relayhost('details', $transport_id);
|
||||
$nexthop = $transport_details['hostname'];
|
||||
}
|
||||
if (!empty($transport_details)) {
|
||||
// Remove [ and ]
|
||||
$hostname_w_port = preg_replace('/\[|\]/', '', $relayhost_details['hostname']);
|
||||
$hostname_w_port = preg_replace('/\[|\]/', '', $nexthop);
|
||||
$skip_lookup_mx = strpos($nexthop, '[');
|
||||
// Explode to hostname and port
|
||||
list($hostname, $port) = explode(':', $hostname_w_port);
|
||||
// Try to get MX if host is not [host]
|
||||
if ($skip_lookup_mx === false) {
|
||||
getmxrr($hostname, $mx_records, $mx_weight);
|
||||
if (!empty($mx_records)) {
|
||||
for ($i = 0; $i < count($mx_records); $i++) {
|
||||
$mxs[$mx_records[$i]] = $mx_weight[$i];
|
||||
}
|
||||
asort ($mxs);
|
||||
$records = array_keys($mxs);
|
||||
echo 'Using first matched primary MX for "' . $hostname . '": ';
|
||||
$hostname = $records[0];
|
||||
echo $hostname . '<br>';
|
||||
}
|
||||
else {
|
||||
echo 'No MX records for ' . $hostname . ' were found in DNS, skipping and using hostname as next-hop.<br>';
|
||||
}
|
||||
}
|
||||
// Use port 25 if no port was given
|
||||
$port = (empty($port)) ? 25 : $port;
|
||||
$username = $relayhost_details['username'];
|
||||
$password = $relayhost_details['password'];
|
||||
$username = $transport_details['username'];
|
||||
$password = $transport_details['password'];
|
||||
|
||||
$mail = new PHPMailer;
|
||||
$mail->Timeout = 10;
|
||||
@@ -73,7 +99,7 @@ if (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == "admi
|
||||
$mail->send();
|
||||
}
|
||||
else {
|
||||
echo "Unknown relayhost.";
|
||||
echo "Unknown transport.";
|
||||
}
|
||||
}
|
||||
else {
|
Reference in New Issue
Block a user