Hallo allerseits,
vielleicht verwenden ja auch andere hier eine eigene Roundcube-Installation, um ihre Emails zu verwalten, und vielleicht sollen damit ja auch andere Postfächer, als nur die auf dem eigenen Webspace, bedient werden.
Da Netcup in letzter Zeit die PHP-Mailfunktion zunehmend deaktviert, ist man nun auch in Roundcube darauf angewiesen, neben dem Posteingangsserver auch jeweils einen Postausgangsserver festzulegen, und dies ist in Roundcube bislang wohl nur für einen einzigen je Installation vorgesehen - es sei denn, die Postausgangsserver (SMTP) entsprechen exakt den Posteingangsservern (IMAP).
Da ich im WWW nichts unkompliziert Anwendbares finden konnte und auch keine Umgehung über Emailumleitungen und mehrere Identitägen in Roundcube wählen wollte (bzw. konnte, da z.B. Emails von Web.de auf vielen Serveren genau auf ihre Herkunft geprüft werden), habe ich mir eine eigene einfache Umgehung überlegt. Vielleicht hilft es ja dem einen oder anderen, der nicht so tief in PHP drin steckt und daher sowas nicht einfach selbst aus dem Ärmel schütteln kann.
Die bei mir betroffene Roundcube-Version ist 1.3.8 . Einige darin enthaltene SMTP-Konfigurationsparameter habe ich in einer früheren Version nicht in der entsprechenden config.inc.php finden können, keine Ahnung warum. Ich kann mir nicht vorstellen, dass kurz zuvor noch kein SMTP-Mailversand in Roundcube möglich war, daher sollten diese Parameter evtl. auch in älteren Versionen funktionieren, aber das muss jeder selbst prüfen.
Voraussetzungen der betroffenen Umsetzung:
Roundcube selbst liegt im Unterverzeichnis mit dem Verzeichnisnamen "@", der Aufruf von Roundcube erfolgt nach Einstellen des gewählten Postausgangsservers mittels Klick auf den zugehörigen Link auf der neuen Auswahlseite im "Hauptverzeichnis".
(Bei anderen Konstellationen kann jeder sicher leicht die entsprechenden Anpassungen in den folgenden Dateien selbst vornehmen.)
In der Roundcube-Config im config- Verzeichnis von Roundcube wird lediglich die Einstellung des Postausgangsservers (SMTP) umgestellt und damit ein Auslesen des Postausgangsserver-Namens aus einer neu zu erstellenden Datei (siehe weiter unten) bewirkt:
<?php
// ... weitere Parameter
$config['smtp_server'] = @file_get_contents('../server.conf');
// ... weitere Parameter
?>
Die neu zu erstellende Datei "server.conf" im Hauptverzeichnis kann leer sein oder einen beliebigen Inhalt haben. Sie wird dann überschrieben.
Im "Hauptverzeichnis" (siehe oben) liegt weiterhin die neu hinzugefügte Konfigurationsdatei "serverconfig.inc.php", die die Namen aller zulässigen Postausgangsserver enthält:
<?php
$serverconfig = array( // Anpassen!
'NC' => 'mx????.netcup.net',
'Web' => 'tls://smtp.web.de:587'
);
?>
Und dort liegt auch die Index-Datei mit dem eigentlichen Skript:
<?php
require 'serverconfig.inc.php';
$wmlink = "<br>\r\n" . '<a href="@/">Webmailer</a>';
$dblbrk = "<br>\r\n<br>\r\n";
if (isset($_GET['server'])) {
$server = $_GET['server'];
if (array_key_exists($server, $serverconfig)) {
file_put_contents('server.conf', $serverconfig[$server]);
$msg = '<i>Server "<b>'. $serverconfig[$server] . '</b>" activated.</i>' . $wmlink . $dblbrk;
}
} else {
$act_srv = file_get_contents('server.conf');
if (array_key_exists($act_srv, array_flip($serverconfig))) {
$msg = '<i>Server "<b>'. $act_srv . '</b>" is active.</i>' . $wmlink . $dblbrk;
} else {
$msg = '<i>No valid server is active.</i>' . $dblbrk;
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Select server</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<base target="_self">
<style type = "text/css">
<!--
body, form, form select, form select optgroup, form select optgroup option, form input[type=submit] {
font-family: arial;
font-style: normal;
font-size: 12px;
line-height: 15px;
}
//-->
</style>
</head>
<body style="margin: 40px; line-height: 20px;">
<?php echo $msg; ?>
<form method='get' action='' enctype='multipart/form-data' target='_self' style='margin: 0px;'>
<select name="server"
title="Select server">
<optgroup label="Select server"></optgroup>
<?php
foreach($serverconfig as $key => $value) {
echo " <option value=\"$key\" title=\"$value\">$key</option>\r\n";
}
?>
</select>
<input type="hidden" name="t" value="<?php echo time(); ?>" /><!-- forces php execution instead of showing cached site during next site request -->
<input type="submit" value="Select" />
</form>
</body>
</html>
Alles anzeigen
Dieses Skript erzeugt ein Auswahlmenü mit den zulässigen Postausgangsservers und schreibt den gewählten dann in die Datei "server.conf", wo er dann von der Roundcube-Config ausgelesen wird.
Durch dieses Vorgehen ist der Eingriff in die eigentliche Roundcube-Installation nur minimal und kann nach einem Update ganz leicht erneuert werden. Dies war mir sehr wichtig. Natürlich wird jemand mit viel PHP-Erfahrung auch eine Erweiterung analog zur Verwendung der IMAP-Server direkt in Roundcube einprogrammieren können, ohne meine Umgehungslösung zu benötigen. Aber mir schien das mit meinen Kenntnissen nicht aussichtsreich genug - und sehr unangenehm bei späteren Updates.
Grüsse und viel Erfolg beim Übernehmen!
Samci