[Web] Add relay host testing tool
parent
b4892f043f
commit
3bd7383bca
|
@ -0,0 +1,74 @@
|
|||
<?php
|
||||
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
|
||||
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']);
|
||||
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)) {
|
||||
// Remove [ and ]
|
||||
$hostname_w_port = preg_replace('/\[|\]/', '', $relayhost_details['hostname']);
|
||||
// Explode to hostname and port
|
||||
list($hostname, $port) = explode(':', $hostname_w_port);
|
||||
// Use port 25 if no port was given
|
||||
$port = (empty($port)) ? 25 : $port;
|
||||
$username = $relayhost_details['username'];
|
||||
$password = $relayhost_details['password'];
|
||||
|
||||
$mail = new PHPMailer;
|
||||
|
||||
$mail->SMTPDebug = 3;
|
||||
$mail->Debugoutput = function($str, $level) {
|
||||
foreach(preg_split("/((\r?\n)|(\r\n?)|\n)/", $str) as $line){
|
||||
if (empty($line)) { continue; }
|
||||
if (preg_match("/SERVER \-\> CLIENT: 2\d\d.+/i", $line)) {
|
||||
echo '<span style="color:darkgreen;font-weight:bold">' . htmlspecialchars($line) . '</span><br>';
|
||||
}
|
||||
elseif (preg_match("/SERVER \-\> CLIENT: 3\d\d.+/i", $line)) {
|
||||
echo '<span style="color:lightgreen;font-weight:bold">' . htmlspecialchars($line) . '</span><br>';
|
||||
}
|
||||
elseif (preg_match("/SERVER \-\> CLIENT: 4\d\d.+/i", $line)) {
|
||||
echo '<span style="color:yellow;font-weight:bold">' . htmlspecialchars($line) . '</span><br>';
|
||||
}
|
||||
elseif (preg_match("/SERVER \-\> CLIENT: 5\d\d.+/i", $line)) {
|
||||
echo '<span style="color:red;font-weight:bold">' . htmlspecialchars($line) . '</span><br>';
|
||||
}
|
||||
elseif (preg_match("/CLIENT \-\> SERVER:.+/i", $line)) {
|
||||
echo '<span style="color:#999;font-weight:bold">' . htmlspecialchars($line) . '</span><br>';
|
||||
}
|
||||
elseif (preg_match("/^(?!SERVER|CLIENT|Connection:|\)).+$/i", $line)) {
|
||||
echo '<span> ↪ ' . htmlspecialchars($line) . '</span><br>';
|
||||
}
|
||||
else {
|
||||
echo htmlspecialchars($line) . '<br>';
|
||||
}
|
||||
}
|
||||
};
|
||||
$mail->isSMTP();
|
||||
$mail->Host = $hostname;
|
||||
if (!empty($username)) {
|
||||
$mail->SMTPAuth = true;
|
||||
$mail->Username = $username;
|
||||
$mail->Password = $password;
|
||||
$mail->Port = $port;
|
||||
}
|
||||
$mail->setFrom($mail_from, 'Mailer');
|
||||
$mail->Subject = 'A subject for a SMTP test';
|
||||
$mail->addAddress($RELAY_TO, 'Joe Null');
|
||||
$mail->Body = 'This is our test body';
|
||||
$mail->send();
|
||||
}
|
||||
else {
|
||||
echo "Unknown relayhost.";
|
||||
}
|
||||
}
|
||||
else {
|
||||
echo "Permission denied.";
|
||||
}
|
|
@ -337,7 +337,7 @@ jQuery(function($){
|
|||
{"name":"username","title":lang.username,"breakpoints":"xs sm"},
|
||||
{"name":"used_by_domains","title":lang.in_use_by, "type": "text","breakpoints":"xs sm"},
|
||||
{"name":"active","filterable": false,"style":{"maxWidth":"80px","width":"80px"},"title":lang.active},
|
||||
{"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","maxWidth":"180px","width":"180px"},"type":"html","title":lang.action,"breakpoints":"xs sm"}
|
||||
{"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","maxWidth":"280px","width":"280px"},"type":"html","title":lang.action,"breakpoints":"xs sm"}
|
||||
],
|
||||
"rows": $.ajax({
|
||||
dataType: 'json',
|
||||
|
@ -349,6 +349,8 @@ jQuery(function($){
|
|||
success: function (data) {
|
||||
$.each(data, function (i, item) {
|
||||
item.action = '<div class="btn-group">' +
|
||||
'<a href="#" data-toggle="modal" id="miau" data-target="#testRelayhostModal" data-relayhost-id="' + encodeURI(item.id) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-stats"></span> Test</a>' +
|
||||
'<a href="/edit.php?relayhost=' + encodeURI(item.id) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' +
|
||||
'<a href="#" id="delete_selected" data-id="single-rlshost" data-api-url="delete/relayhost" data-item="' + encodeURI(item.id) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' +
|
||||
'</div>';
|
||||
item.chkbox = '<input type="checkbox" data-id="rlyhosts" name="multi_select" value="' + item.id + '" />';
|
||||
|
@ -544,6 +546,32 @@ jQuery(function($){
|
|||
draw_fwd_hosts();
|
||||
draw_relayhosts();
|
||||
draw_rspamd_history();
|
||||
|
||||
$('#testRelayhostModal').on('show.bs.modal', function (e) {
|
||||
$('#test_relayhost_result').text("-");
|
||||
button = $(e.relatedTarget)
|
||||
if (button != null) {
|
||||
$('#relayhost_id').val(button.data('relayhost-id'));
|
||||
}
|
||||
})
|
||||
|
||||
$('#test_relayhost').on('click', function (e) {
|
||||
e.preventDefault();
|
||||
prev = $('#test_relayhost').text();
|
||||
$(this).prop("disabled",true);
|
||||
$(this).html('<span class="glyphicon glyphicon-refresh glyphicon-spin"></span> ');
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: 'inc/relay_check.php',
|
||||
dataType: 'text',
|
||||
data: $('#test_relayhost_form').serialize(),
|
||||
complete: function (data) {
|
||||
$('#test_relayhost_result').html(data.responseText);
|
||||
$('#test_relayhost').prop("disabled",false);
|
||||
$('#test_relayhost').text(prev);
|
||||
}
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
$(window).load(function(){
|
||||
|
|
|
@ -349,35 +349,35 @@ $lang['add']['domain'] = 'Domain';
|
|||
$lang['add']['active'] = 'Aktiv';
|
||||
$lang['add']['multiple_bookings'] = 'Mehrfaches Buchen möglich';
|
||||
$lang['add']['save'] = 'Änderungen speichern';
|
||||
$lang['add']['description'] = 'Beschreibung:';
|
||||
$lang['add']['max_aliases'] = 'Max. mögliche Aliasse:';
|
||||
$lang['add']['max_mailboxes'] = 'Max. mögliche Mailboxen:';
|
||||
$lang['add']['mailbox_quota_m'] = 'Max. Speicherplatz pro Mailbox (MiB):';
|
||||
$lang['add']['domain_quota_m'] = 'Domain Speicherplatz gesamt (MiB):';
|
||||
$lang['add']['backup_mx_options'] = 'Backup MX Optionen:';
|
||||
$lang['add']['description'] = 'Beschreibung';
|
||||
$lang['add']['max_aliases'] = 'Max. mögliche Aliasse';
|
||||
$lang['add']['max_mailboxes'] = 'Max. mögliche Mailboxen';
|
||||
$lang['add']['mailbox_quota_m'] = 'Max. Speicherplatz pro Mailbox (MiB)';
|
||||
$lang['add']['domain_quota_m'] = 'Domain Speicherplatz gesamt (MiB)';
|
||||
$lang['add']['backup_mx_options'] = 'Backup MX Optionen';
|
||||
$lang['add']['relay_all'] = 'Alle Empfänger-Adressen relayen';
|
||||
$lang['add']['relay_domain'] = 'Relay Domain';
|
||||
$lang['add']['relay_all_info'] = '<small>Wenn Sie <b>nicht</b> alle Empfänger-Adressen relayen möchten, müssen Sie eine Mailbox für jede Adresse, die relayt werden soll, erstellen.</small>';
|
||||
$lang['add']['alias'] = 'Alias(se)';
|
||||
$lang['add']['alias_spf_fail'] = '<b>Hinweis:</b> Wählen Sie ein externes Postfach als Ziel-Adresse, kann es unter Umständen zu fehlerhaften Spam-Erkennungen <b>beim Empfänger</b> kommen. Weitere Informationen zu diesem Thema finden Sie <a href="https://www.heinlein-support.de/blog/news/gmx-de-und-web-de-haben-mail-rejects-durch-spf/" target="_blank">hier.</a>';
|
||||
$lang['add']['alias_address'] = 'Alias-Adresse(n):';
|
||||
$lang['add']['alias_address'] = 'Alias-Adresse(n)';
|
||||
$lang['add']['alias_address_info'] = '<small>Vollständige E-Mail-Adresse(n) oder @example.com, um alle Nachrichten einer Domain weiterzuleiten. Getrennt durch Komma. <b>Nur eigene Domains</b>.</small>';
|
||||
$lang['add']['alias_domain_info'] = '<small>Nur gültige Domains. Getrennt durch Komma.</small>';
|
||||
$lang['add']['target_address'] = 'Ziel-Adresse(n):';
|
||||
$lang['add']['target_address'] = 'Ziel-Adresse(n)';
|
||||
$lang['add']['target_address_info'] = '<small>Vollständige E-Mail-Adresse(n). Getrennt durch Komma.</small>';
|
||||
$lang['add']['alias_domain'] = 'Alias-Domain';
|
||||
$lang['add']['select'] = 'Bitte auswählen';
|
||||
$lang['add']['target_domain'] = 'Ziel-Domain:';
|
||||
$lang['add']['target_domain'] = 'Ziel-Domain';
|
||||
$lang['add']['mailbox'] = 'Mailbox';
|
||||
$lang['add']['resource'] = 'Ressource';
|
||||
$lang['add']['kind'] = 'Art';
|
||||
$lang['add']['mailbox_username'] = 'Benutzername (linker Teil der E-Mail-Adresse):';
|
||||
$lang['add']['resource_name'] = 'Ressourcenname:';
|
||||
$lang['add']['full_name'] = 'Vor- und Zuname:';
|
||||
$lang['add']['quota_mb'] = 'Speicherplatz (MiB):';
|
||||
$lang['add']['mailbox_username'] = 'Benutzername (linker Teil der E-Mail-Adresse)';
|
||||
$lang['add']['resource_name'] = 'Ressourcenname';
|
||||
$lang['add']['full_name'] = 'Vor- und Zuname';
|
||||
$lang['add']['quota_mb'] = 'Speicherplatz (MiB)';
|
||||
$lang['add']['select_domain'] = 'Bitte zuerst eine Domain auswählen';
|
||||
$lang['add']['password'] = 'Passwort:';
|
||||
$lang['add']['password_repeat'] = 'Passwort (Wiederholung):';
|
||||
$lang['add']['password'] = 'Passwort';
|
||||
$lang['add']['password_repeat'] = 'Passwort (Wiederholung)';
|
||||
$lang['add']['previous'] = 'Vorherige Seite';
|
||||
$lang['add']['restart_sogo_hint'] = 'Der SOGo Container muss nach dem Hinzufügen einer neuen Domain neugestartet werden!';
|
||||
|
||||
|
@ -502,3 +502,5 @@ $lang['success']['forwarding_host_removed'] = "Weiterleitungs-Host %s wurde entf
|
|||
$lang['success']['forwarding_host_added'] = "Weiterleitungs-Host %s wurde hinzugefügt";
|
||||
$lang['success']['relayhost_removed'] = "Relayhost %s wurde entfernt";
|
||||
$lang['success']['relayhost_added'] = "Relayhost %s wurde hinzugefügt";
|
||||
$lang['admin']['relay_from'] = "Absenderadresse";
|
||||
$lang['admin']['relay_run'] = "Test durchführen";
|
||||
|
|
|
@ -354,35 +354,35 @@ $lang['add']['domain'] = 'Domain';
|
|||
$lang['add']['active'] = 'Active';
|
||||
$lang['add']['multiple_bookings'] = 'Multiple bookings';
|
||||
$lang['add']['save'] = 'Save changes';
|
||||
$lang['add']['description'] = 'Description:';
|
||||
$lang['add']['max_aliases'] = 'Max. possible aliases:';
|
||||
$lang['add']['description'] = 'Description';
|
||||
$lang['add']['max_aliases'] = 'Max. possible aliases';
|
||||
$lang['add']['resource_name'] = 'Resource name';
|
||||
$lang['add']['max_mailboxes'] = 'Max. possible mailboxes:';
|
||||
$lang['add']['mailbox_quota_m'] = 'Max. quota per mailbox (MiB):';
|
||||
$lang['add']['domain_quota_m'] = 'Total domain quota (MiB):';
|
||||
$lang['add']['backup_mx_options'] = 'Backup MX options:';
|
||||
$lang['add']['max_mailboxes'] = 'Max. possible mailboxes';
|
||||
$lang['add']['mailbox_quota_m'] = 'Max. quota per mailbox (MiB)';
|
||||
$lang['add']['domain_quota_m'] = 'Total domain quota (MiB)';
|
||||
$lang['add']['backup_mx_options'] = 'Backup MX options';
|
||||
$lang['add']['relay_all'] = 'Relay all recipients';
|
||||
$lang['add']['relay_domain'] = 'Relay this domain';
|
||||
$lang['add']['relay_all_info'] = '<small>If you choose <b>not</b> to relay all recipients, you will need to add a ("blind") mailbox for every single recipient that should be relayed.</small>';
|
||||
$lang['add']['alias'] = 'Alias(es)';
|
||||
$lang['add']['alias_spf_fail'] = '<b>Note:</b> If your chosen destination address is an external mailbox, the <b>receiving mailserver</b> may reject your message due to an SPF failure.</a>';
|
||||
$lang['add']['alias_address'] = 'Alias address/es:';
|
||||
$lang['add']['alias_address'] = 'Alias address/es';
|
||||
$lang['add']['alias_address_info'] = '<small>Full email address/es or @example.com, to catch all messages for a domain (comma-separated). <b>mailcow domains only</b>.</small>';
|
||||
$lang['add']['alias_domain_info'] = '<small>Valid domain names only (comma-separated).</small>';
|
||||
$lang['add']['target_address'] = 'Goto addresses:';
|
||||
$lang['add']['target_address'] = 'Goto addresses';
|
||||
$lang['add']['target_address_info'] = '<small>Full email address/es (comma-separated).</small>';
|
||||
$lang['add']['alias_domain'] = 'Alias domain';
|
||||
$lang['add']['select'] = 'Please select...';
|
||||
$lang['add']['target_domain'] = 'Target domain:';
|
||||
$lang['add']['target_domain'] = 'Target domain';
|
||||
$lang['add']['mailbox'] = 'Mailbox';
|
||||
$lang['add']['resource'] = 'Resource';
|
||||
$lang['add']['kind'] = 'Kind';
|
||||
$lang['add']['mailbox_username'] = 'Username (left part of an email address):';
|
||||
$lang['add']['full_name'] = 'Full name:';
|
||||
$lang['add']['quota_mb'] = 'Quota (MiB):';
|
||||
$lang['add']['mailbox_username'] = 'Username (left part of an email address)';
|
||||
$lang['add']['full_name'] = 'Full name';
|
||||
$lang['add']['quota_mb'] = 'Quota (MiB)';
|
||||
$lang['add']['select_domain'] = 'Please select a domain first';
|
||||
$lang['add']['password'] = 'Password:';
|
||||
$lang['add']['password_repeat'] = 'Confirmation password (repeat):';
|
||||
$lang['add']['password'] = 'Password';
|
||||
$lang['add']['password_repeat'] = 'Confirmation password (repeat)';
|
||||
$lang['add']['previous'] = 'Previous page';
|
||||
$lang['add']['restart_sogo_hint'] = 'You will need to restart the SOGo service container after adding a new domain!';
|
||||
|
||||
|
@ -514,4 +514,6 @@ $lang['delete']['remove_forwardinghost_warning'] = '<b>Warning:</b> You are abou
|
|||
$lang['success']['forwarding_host_removed'] = "Forwarding host %s has been removed";
|
||||
$lang['success']['forwarding_host_added'] = "Forwarding host %s has been added";
|
||||
$lang['success']['relayhost_removed'] = "Relayhost %s has been removed";
|
||||
$lang['success']['relayhost_added'] = "Relayhost %s has been added";
|
||||
$lang['success']['relayhost_added'] = "Relayhost %s has been added";
|
||||
$lang['admin']['relay_from'] = '"From:" address';
|
||||
$lang['admin']['relay_run'] = "Run test";
|
||||
|
|
|
@ -4,8 +4,8 @@ if (!isset($_SESSION['mailcow_cc_role'])) {
|
|||
exit();
|
||||
}
|
||||
?>
|
||||
<div class="modal fade" id="addDomainAdminModal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<!-- add domain admin modal -->
|
||||
<div class="modal fade" id="addDomainAdminModal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
|
@ -62,3 +62,32 @@ if (!isset($_SESSION['mailcow_cc_role'])) {
|
|||
</div>
|
||||
</div>
|
||||
</div><!-- add domain admin modal -->
|
||||
<!-- test relayhost modal -->
|
||||
<div class="modal fade" id="testRelayhostModal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
|
||||
<h3 class="modal-title"><span class="glyphicon glyphicon-stats"></span> Relayhost</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form class="form-horizontal" id="test_relayhost_form" role="form" method="post">
|
||||
<input type="hidden" class="form-control" name="relayhost_id" id="relayhost_id">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-2" for="mail_from"><?=$lang['admin']['relay_from'];?></label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" name="mail_from" id="mail_from" placeholder="relay@example.org">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<button class="btn btn-default" id="test_relayhost" href="#"><?=$lang['admin']['relay_run'];?></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<hr>
|
||||
<div id="test_relayhost_result" style="font-size:10pt">-</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- test relayhost modal -->
|
||||
|
|
Loading…
Reference in New Issue