Roundcube i postfixadmin
Roundcube (http://www.roundcube.net) jest popularnym webmailem korzystającym z technologii AJAX. Moi klienci są z niego bardzo zadowoleni, bowiem wygląda bardzo nowocześnie. Jako panel konfiguracyjny Postfixa używam Postfixadmina, który co prawda daje też panel dla użytkowników, gdzie mogą oni zmienić swoje hasło, ustawić autoodpowiedź czy zmienić aliasy, ale jest to drugi panel, z innym layoutem, inną filozofią obsługi itp.
Dlatego też zacząłem szukać rozwiązania, które pozwoliłoby mi rozszerzyć funkcjonalność roundcube'a o zmianę haseł, ustawianie autoodpowiedzi i aliasów - z bazy postfixadmina.
Dla starszych wersji roudcube jest rcpfa - sprawdzał się doskonale, ale jego autor został ojcem i nie ma czasu go uaktualniać.
Dziś ściągnąłem zatem wersję 3.0 RC roundcube (z nowym API do pluginów) i udało mi się zgrać go z postfixadminem.
Wspomniany wcześniej rcpfa zapewnia trzy funkcjonalności:
- Zmianę haseł
- Ustawianie autorespondera
- Ustawianie przekierowań poczty
Udało mi się dostosować dwa pluginy do współpracy z postfixadminem:
- Do zmiany hasła użyłem standardowego pluginu password, ustawiając odpowiednio password_db_dsn oraz password_query na UPDATE mailbox SET password=%c WHERE username=%u
- Do ustawienia autorespondera stworzyłem własny plugin bazujący na hmail_autoresponder (dostosowałem go do bazy postfixadmina oraz zrobiłem go samodzielnym tak, by nie wymagał do działania pluginu settings. Plugin w załączniku.
- Do ustawiania aliasów również wzorowałem się na hmail_aliases - plugin w załączniku
UWAGA!!!
Używam nieco zmienionej wersji skryptu vacation.pl do wysyłania autoodpowiedzi - wiadomość jest wysyłana tylko gdy aktualna data jest pomiędzy activefrom i activeto. W związku z tym:
- W bazie w tabeli vacation muszą pojawić się pola activefrom, activeto
- Skrypt vacation.pl ma dodane sprawdzanie, czy data jest pomiędzy activefrom a activeto:
my $query = qq{SELECT email FROM vacation WHERE email=? and
active=$db_true and (activefrom is null or (activefrom<=curdate() and
activeto>=curdate()))};
$query = qq{SELECT email FROM vacation WHERE email=? and
active=$db_true and (activefrom is null or (activefrom<=curdate() and
activeto>=curdate()))}

