Vytváříme webmail s rozhraním Roundcube

Petr Macek 22. 10. 2009

Neomezený přístup k e-mailům je dnes vyžadován téměř od všech uživatelů. Například v době dovolených, kdy sebou nechceme tahat notebook s celou naší kanceláří, může se hodit přístup k poště přes www rozhraní. A takových nástrojů je mnoho: Horde, Squirrelmail, Openwebmail nebo třeba Roundcube.

My si dnes rozšíříme náš Sendmail s antispamem, antivirem o IMAP/POP3 server Dovecot a www rozhraní Roundcube. Přidáme si nějaké pluginy a patche. Výsledek bude ten, že uživatelé mají přístup k poště přes běžné protokoly, www rozhraní, možnost nastavit si automatické odpovědi, přesměrování a mnoho dalšího. Použití Sendmailu není tentokrát podmínkou, snadno jej lze nahradit jiným serverem.

Roundcube

Roundcube

Roundcube

Základ tvoří Sendmail, který už jsme si v minulých dílech připravili. Ten nám poštu zpracuje a pomocí procmailu uloží do uživatelských maildirů. Přístup k poště bude protokoly IMAP4 a POP3 a jejich zabezpečené verze IMAPS a POP3S. Šifrované verze protokolů nevyužívají jiných portů, ale nabízí na běžném portu možnost si TLS/SSL vyžádat (třeba příkaz STLS u POP3). Jako POP3 a IMAP4 server použijeme Dovecot. Ještě si do něho přidáme poměrně nový plugin pro Outlook express, který řeší mazání zpráv na IMAPu. Většina uživatelů očekává běžné chování, že smazané zprávy skončí v koši. U IMAPu toto ale funguje jinak. IMAP pouze označí zprávy ke smazání a později je pomocí příkazu EXPUNGE odstraní. Veškeré přesuny zpráv do koše si řeší klient, jen ten Outlook express to neumí.

Co je Roundcube?

Roundcube je jeden z mnoha webmailů a je napsaný v PHP. Podporuje různé druhy databází (MySQL, PostgreSQL, SQLite nebo MSSQL), lokalizován je i do češtiny a na rozdíl od mnohé konkurence i dobře vypadá. K dispozici je seznam jeho vlastností a několik oficiálních screenshotů.

Teď k praktickému řešení. Předpokládám, že Sendmail máte dle minulých dílu zkonfigurovaný, naše doména je firma.cz. Opět vše proběhne na FreeBSD, sw budeme kompilovat z jeho systému portů. Předpokládáme nainstalovaný www server Apache, PHP5 a MySQL.

Začneme instalací Dovecotu:

$ cd /usr/ports/mail/dovecot
$ make install clean
menu můžeme nechat tak, jak je (tedy zvoleno SSL a POP3)

Zajistíme spouštění Dovecotu při startu systému, přidáním příslušného řádku do /etc/rc.conf:

echo 'dovecot_enable="YES"' >> /etc/rc.conf

Zabezpečení přenosu dat

Pro poštovní klienty, kteří využívají POP3/IMAP bude dobré protokol zabezpečit pomocí TLS/SSL. Ve výchozím stavu nejsou totiž tyto protokoly šifrované. Pokud ale chcete uživatelům umožnit přístup k poště jen přes www, nemusíte se certifikáty zabývat a můžeme je v konfiguraci vynechat. Dovecot v tom případě komunikuje s Roundcube pouze v rámci localhostu a není nutné to více řešit.

Připravíme si certifikáty pro TLS:

$ mkdir -p /etc/ssl/dovecot
$ cd /etc/ssl/dovecot
$ openssl req -new -x509 -nodes -out cert.pem -keyout key.pem -days 365

Konfiguraci najdeme v souboru /usr/local/etc/dovecot.conf. Vypíšu položky, které budu měnit:

protocols = imaps pop3s imap pop3
ssl_disable = no
ssl = yes
ssl_cert_file = /etc/ssl/dovecot/cert.pem
ssl_key_file = /etc/ssl/dovecot/key.pem

mail_location = maildir:~/Maildir
postmaster_address = postmaster@firma.cz

Potom můžeme Dovecot spustit:

$ /usr/local/etc/rc.d/dovecot start

Úložiště mailů

Malá odbočka k úložišti e-mailů. Poštu můžeme ukládat buď do mailboxu, tak jak to ve výchozím stavu dělá Sendmail nebo ve formátu maildir. Dovecot má přednastaveno mailbox ( mail_location = mbox:~/mail:INBOX=/var/mail/%u). Inbox schránek je pak v adresáři /var/mail, ostatní složky pak v domovských adresářích ve složce mail. My ale použijeme maildir, jak je to uvedeno výše v konfiguračním souboru.

Přijmeme doručovatele na plný úvazek

Nyní je nutné upravit konfiguraci Sendmailu, konkrétně je třeba změnit lokálního doručovatele, který ukládá poštu do mailboxů. Tím může být třeba procmail. Jeho instalace a konfigurace je snadná:

$ cd /usr/ports/mail/procmail
$ make install

Vytvoříme jednoduchý konfigurační soubor /usr/local/etc/procmailrc:

DEFAULT=$HOME/Maildir/

V souboru /etc/mail/mail.firma.cz.mc změníme lokálního doručovatele. Přidáme řádek

FEATURE(local_procmail)

a změníme MAILER(local) na MAILER(procmail).

Restartujeme Sendmail s upravenou konfigurací:

$ cd /etc/mail
$ make
$ make install
$ make restart

Tím máme vyřešen příjem a uložení e-mailů.

Instalujeme Roundcube

Teď se můžeme pustit do instalace Roundcube:

Roundcube podporuje i jiné druhy databází, každý si určitě vybere. Používáme MySQL, je nutné založit uživatele pro Roundcube a naimportovat SQL dump, který je součástí instalace. Založíme si databázi a uživatele:

root@mail ~ # mysql -p





Enter password:





Welcome to the MySQL monitor.  Commands end with ; or \g.







Your MySQL connection id is 98858





Server version: 5.1.35 FreeBSD port: mysql-server-5.1.35







Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.







mysql> create database roundcubemail;
Query OK, 1 row affected (0.00 sec)

mysql> use mysql;







Reading table information for completion of table and column names





You can turn off this feature to get a quicker startup with -A







Database changed







mysql> grant all privileges on roundcubemail.* to roundcube identified by 'round12345';
Query OK, 0 rows affected (0.04 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.02 sec)

Teď už jen naimportovat sqldump a máme databázi připravenou:

mysql -u roundcube -p roundcubemail < /usr/local/www/roundcube/SQL/mysql.initial.sql

Roundcube se nainstaluje do adresáře /usr/local/www/roundcube. Uživatelům ho zpřístupníme na adrese www.firma.cz/posta pomocí zápisu alias v konfiguraci apache (soubor httpd.conf, zde je více možností, kde a jak www rozhraní zpřístupnit, třeba pomocí virtual host). Výše zmiňovaný alias se zapisuje takto:

Alias /posta /usr/local/www/roundcube/

Nyní nám Roundcube běží nešifrovaně na http. Samozřejmě bude lépe překonfigurovat Apache a provozovat vše na https. Ale to už je nad rámec dnešního článku.

Konfigurujeme Roundcube

Teď si roundcube nakonfigurujeme. V jeho adresáři config budeme pracovat se dvěma soubory. Nejprve připojení na mysql, to je v souboru /usr/local/www/roundcube/config/db.inc.php. Vypisuji řádky, které měníme:

$rcmail_config['db_dsnw'] = 'mysql://roundcube:round12345@localhost/roundcubemail';

Druhý konfigurační soubor je /usr/local/www/roundcube/config/main.inc.php:

$rcmail_config['default_host'] = 'localhost';
$rcmail_config['mail_domain'] = 'firma.cz';
$rcmail_config['create_default_folders'] = TRUE;
// dovolíme uživatelům jednoduchý editor na tvorbu html emailů?
$rcmail_config['htmleditor'] = TRUE;
$rcmail_config['preview_pane'] = TRUE;
$rcmail_config['check_all_folders'] = TRUE;

Samozřejmě si můžete vyhrát, konfigurace je docela obsáhlá. Většinu zde uvedených věcí si pak mohou uživatelé přenastavit přímo v Roundcube. Tím máme i Roundcube připravený a vše začíná fungovat dle představ. Můžeme vyzkoušet přihlášení. V případě problémů doporučuji kontrolovat /var/log/maillog a error log Apache.

Patche a pluginy

Teď ještě slíbené patche a pluginy. U Dovecotu si nainstalujeme plugin, který upraví chování Outlook Expressu (případně jiných e-mailových klientů) při mazání zprávy. Očekáváme, že smazaná zpráva skončí v koši, ale o tento přesun se na imapu stará klient. Outlook Express toto nepodporuje, proto vznikl následující patch.

I přes ranou verzi se mi osvědčil. Na stránce pluginu je i postup, ale na FreeBSD mi kompilace a instalace nefungovala. Ale pokud vše uděláte „ručně“ (kompilace + nakopírování pluginu do patřičného adresáře), plugin bez problému funguje. Pak už jen v dovecot.conf přidat plugin:

mail_plugins = deleted_to_trash

restart dovecotu

$ /usr/local/etc/rc.d/dovecot restart

Odteď se i Outlook Express začne chovat jako ostatní klienti. Akce je i logována:

Oct 20 06:07:26 mail dovecot: IMAP(cilek): opening Trash succeeded
Oct 20 06:07:26 mail dovecot: IMAP(cilek): from INBOX to Trash, previous action from (null)
Oct 20 06:07:26 mail dovecot: IMAP(cilek): copying to Trash succeeded

Druhý plugin je pro Roundcube. Jmenuje se vacation (jmenuje se stejně jako Sendmailový nástroj). Umožní nám přes www rozhraní nastavovat automatické odpovědi a přesměrování pošty. Je tu trošku problém, protože uživatelé nejsou virtuální, ale v systému (Sendmail umí virtuální uživatele přes LDAP) a tyto činnosti se nastavují pomocí .forward a .vacation.* souborů v domovských adresářích uživatelů (to už jsme v seriálu ukazovali). Takže roundcube potřebuje mít přístup do domovských adresářů (a to zajistit není vždy snadné). Plugin je ale dobře připravený a má více cest (nazývá je driver), jak toho dosáhnout. První možnost pro virtuální uživatele (pro nás nepoužitelné) je nastavovat tyto údaje stejně jako PostfixAdmin v databázi. Takže teoreticky lze Roundcube s tímto pluginem použít namísto PostfixAdmina.

My ale potřebujeme přístup do domovských adresářů. Jsou dvě možnosti:

  • setuid backend  – využívá jakousi squirrelmail_va­cation_proxy, pod FreeBSD v současném stavu asi těžko zkompilovatelné
  • FTP backend  – jednoduchá myšlenka. Na serveru spustíme malý ftp server, který bude mít potřebné přístupy.

Konfigurace FTP je jednoduchá, nemusíme nastavovat žádná práva, ftp backend se k ftp přihlásí jako daný uživatel Roundcube a soubory uloží. FTP server omezíme tak, aby poslouchal pouze na adrese localhost a tím jej poměrně slušně zabezpečíme. Nastavit takhle ftp na FreeBSD je snadné (teoreticky je možné spouštět ftpd přes inetd, ale pak nelze snadno omezit na IP):

$ echo 'ftpd_enable="YES"' >> /etc/rc.conf
$ echo 'ftpd_flags="-a localhost"' >> /etc/rc.conf
$ /etc/rc.d/ftpd start

Dále je nutné zkompilovat PHP s podporou ftp:

$ cd /usr/ports/lang/php5-extension
$ make config
(zaškrtněte FTP)
make deinstall clean install

A restart Apache provedeme třeba takto

$ apachectl restart

Teď už jen samotný plugin, ten stáhneme z domovské stránky. Obsah archivu nakopírujte do adresáře plugins a v jeho konfiguračním souboru config.inc.php nastavte driver na ftp pomocí

$rcmail_config['driver'] = 'ftp';

Nakonec povolíme vacation plugin v Roundcube. V konfiguračním souboru Roundcube main.inc.php změňte $rcmail_config['plugins'] = array(); na  $rcmail_config['plugins'] = array('vacation');

widgety

A máme hotovo. Celý náš seriál se točí kolem Sendmailu. V tomto případě, ale Sendmail není podmínkou. Může být nahrazen třeba Postfixem, stačilo by jen doladit úložiště emailu v Postfixu a Dovecotu. Roundcube je moderní mailový webový klient, nebojte se jej nasadit.

Užitečné odkazy:

Vacation plugin
Patch pro Outlook
FreeBSD
Dovecot
Roudcube
Roundcube forum, pluginy, skiny, …

Našli jste v článku chybu?
Podnikatel.cz: EET a účetní programy. Vše hotovo?

EET a účetní programy. Vše hotovo?

Podnikatel.cz: Tyto pojmy k #EET byste měli znát

Tyto pojmy k #EET byste měli znát

DigiZone.cz: Banaxi: videa kdekoli na světě

Banaxi: videa kdekoli na světě

120na80.cz: Poslední možnost změnit zdravotní pojišťovnu

Poslední možnost změnit zdravotní pojišťovnu

Vitalia.cz: 5 nemocí, se kterými pomáhá urologie

5 nemocí, se kterými pomáhá urologie

Vitalia.cz: Tahák, jak vyzrát nad zápachem z úst

Tahák, jak vyzrát nad zápachem z úst

Podnikatel.cz: Instalatér, malíř a elektrikář. "Vymřou"?

Instalatér, malíř a elektrikář. "Vymřou"?

Podnikatel.cz: Udělali jsme velkou chybu, napsal Čupr

Udělali jsme velkou chybu, napsal Čupr

Podnikatel.cz: „Lex Babiš“ Babišovi paradoxně pomůže

„Lex Babiš“ Babišovi paradoxně pomůže

DigiZone.cz: Technisat připravuje trojici DAB

Technisat připravuje trojici DAB

120na80.cz: Galerie: Čínští policisté testují českou minerálku

Galerie: Čínští policisté testují českou minerálku

Vitalia.cz: 5 chyb, které děláme při skladování potravin

5 chyb, které děláme při skladování potravin

Lupa.cz: Další Češi si nechali vložit do těla čip

Další Češi si nechali vložit do těla čip

Lupa.cz: Jak se prodává firma za miliardu?

Jak se prodává firma za miliardu?

Podnikatel.cz: ČSSZ posílá přehled o důchodovém kontě

ČSSZ posílá přehled o důchodovém kontě

Vitalia.cz: Voda z Vltavy před a po úpravě na pitnou

Voda z Vltavy před a po úpravě na pitnou

Vitalia.cz: Tradiční čínská medicína a rakovina

Tradiční čínská medicína a rakovina

DigiZone.cz: Nova opět stahuje „milionáře“

Nova opět stahuje „milionáře“

Vitalia.cz: Jak Ondra o astma přišel

Jak Ondra o astma přišel

Vitalia.cz: Tohle jsou nejlepší česká piva podle odborníků

Tohle jsou nejlepší česká piva podle odborníků