Hlavní navigace

Vytváříme webmail s rozhraním Roundcube

Petr Macek

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');

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?

19. 4. 2012 5:58

martin (neregistrovaný)

Ano, musíš upravit hlavičku a připsat tam, aby vacation generoval v určité kódové sadě ve které píšeš (standartně nemá žádné kódování, takže proto žádná čeština)

21. 4. 2011 5:01

volani.webnode.cz (neregistrovaný)

Existuje něco co umí přijímat a třídit i ATOM/RSS feedy?

Lupa.cz: Brněnský radní chce zničit kartel operátorů. Uspěje?

Brněnský radní chce zničit kartel operátorů. Uspěje?

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

Vitalia.cz: Jedlé kaštany jsou trpké, je třeba je tepelně upravit

Jedlé kaštany jsou trpké, je třeba je tepelně upravit

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“