====== Roundcube web mail ======
==== Debian Lenny ====
Questi i pacchetti Debian necessari. Purtroppo non sono presenti in Debian Lenny, fortunatamente ha funzionato l'installazione dei pacchetti Sid su Lenny (2009-04-16).
* **php-mdb2**
* **php-mdb2-driver-mysql**
* **roundcube-mysql**
* **roundcube-core**
* **roundcube**
Oltre a MySQL è disponibile anche il supporto a PostgreSQL e Sqlite, basta installare i pacchetti relativi.
Se si desidera modificare la configurazione (ad esempio il database di backend) eseguire **''dpkg-reconfigure roundcube-core''**.
==== Debian Squeeze ====
Pacchetti installati (escluse le dipendenze):
* **roundcube**
* **roundcube-pgsql**
* **aspell-it**
Si vuole utilizzare PostgreSQL come backend ed avere il correttore ortografico in italiano.
Durante l'installazione del pacchetto risposto come segue alle domande:
* IMAP server **127.0.0.1**
* Default language **it_IT**
* Usare **dbconfig-common** per la configurazione del backend
* Method for authenticating PostgreSQL user: **password**
In questo modo viene creato automaticamente il database PostgreSQL di nome **roundcube**, con owner **roundcube** e metodo di accesso **md5** (password).
==== Debian Wheezy ====
C'è un [[https://sourceforge.net/projects/rcubevacation/forums/forum/997972/topic/6718273|problema di visualizzazione]] causato dalla nuova skin di Roundcube 0.7.2, per cui il plugin appare tutto spostato in alto a sinistra. Bisogna modificare due file in **''vacation/skins/default/''**, cioè **''templates/vacation.html''** e **''vacation.css''**.
Qui i {{.:patches:rcubevacation-1.9.9-skin-0.7.2.tgz|file modificati}} oppure {{.:patches:rcubevacation-1.9.9-skin-0.7.2.patch.txt|il file patch}}.
==== Debug ====
Roundcube scrive i suoi log in **''/var/lib/roundcube/logs/''**.
L'installazione predefinita Debian invece fa creare a Roundcube dei file di log in **''/var/log/roundcube/''**, il livello di logging si imposta in ''/etc/roundcube/config.inc.php'' (nelle vecchie versioni Debian si usava ''main.inc.php'') con la direttiva **''$rcmail_config['debug_level']''**.
Una opzione utile da attivare, disabilitata per default in Debian, è la registrazione dei login:
// Log successful/failed logins to /userlogins or to syslog
$config['log_logins'] = true;
===== Sqlite =====
Con il pacchetto Debian Lenny di **roundcube_0.2.1-1** configurato per Sqlite, pare che ci sia un bug. Se si tenta di modificare qualche impostazione dell'identità si ottiene l'errore:
SERVICE CURRENTLY NOT AVAILABLE!
Error No. [0x01F4]
===== MySQL =====
Il processo di configurazione Debian su database **MySQL** richiede necessariamente l'accesso al database come amministratore del database (generalmente **root**), non è sufficiente avere un utente e un database già creati. Anzi **il database e l'utente non devono esistere** prima dell'installazione Debian.
Per accedere a MySQL serve il modulo **MDB2_Driver_mysql**, che in Debian Lenny non esiste pacchettizzato. Per installarlo:
pear install 'pear/MDB2'
pear install 'pear/MDB2#mysql'
Probabilmente è possibile anche installare manualmente i pacchetti da Squeeze: **php-mdb2** e **php-mdb2-driver-mysql**.
===== Creazione Maildir =====
Il server courier-imap (e l'omologo courier-pop) richiedono che l'utente abbia la propria **''$HOME/Maildir''** per consentire il login. In caso che Roundcube neghi l'accesso controllare che l'utente abbia la propria Maildir.
In generale dovrebbe bastare creare una **''/etc/skel/Maildir/''** con struttura e permessi corretti in modo che ogni nuovo utente abbia la propria. In alternativa l'utente root può eseguire il comando:
su -l -c 'maildirmake' username
Ad ogni modo la Maildir dovrebbe essere creata automaticamente alla ricezione della prima mail.
===== Personalizzazioni =====
Il file di configurazione con tutte le opzioni disponibili è ''/etc/roundcube/main.inc.php'', ma con Debian Jessie le personalizzazioni vanno messe in **''/etc/roundcube/config.inc.php''**.
Per nascondere il drop-down box per la scelta del server imap modificare la variable come segue:
//$rcmail_config['default_host'] = array("127.0.0.1");
$rcmail_config['default_host'] = "127.0.0.1";
=== Virtual users ===
Si vuole accedere usando l'**indirizzo email** al posto del nome di login. Si vuole anche che il mittente venga automaticamente impostato al corretto indirizzo email, invece che al generico **login@hostname.domain.com**.
Se si utilizza il server Courier IMAP è possibile configurare il **courier-authdaemon** in tal senso (autenticazione **''authuserdb''**): Roundcube esegue l'autenticazione direttamente via imap/courier-authdaemon.
Altrimenti si può sfruttare la presenza di un file [[http://www.postfix.org/postconf.5.html#virtual_alias_maps|virtual_alias_maps]] di Postfix (es. ''/etc/postfix/virtual_alias_maps.in''), aggiungendo in **''/etc/roundcube/main.inc.php''**:
// Path to a virtuser table file to resolve user names and e-mail addresses
$rcmail_config['virtuser_file'] = '/etc/postfix/virtual_alias_maps.in';
**NOTA1:** Se ad uno stesso indirizzo email in ''virtual_alias_maps'' corrispondono due o più account, non è possibile utilizzare quell'indirizzo email come virtuser di Roundcube.
**NOTA2:** Utilizzando il //virtuser_file// Roundcube dovrebbe essere in grado di desumere correttamente l'indirizzo email dell'utente da usare come mittente. Altrimenti vedere più avanti come creare un record nella tabella ''users'' e nella tabella ''identities'' per configurare manualmente l'account.
=== Check new mail ===
Per non tempestare il server si porta l'intervallo da 1 minuto (default) a 5 minuti. Ogni utente potrà tuttavia modificare le proprie preferenze.
// Minimal value of user's 'keep_alive' setting (in seconds)
// Must be less than 'session_lifetime'
$rcmail_config['min_keep_alive'] = 180;
// Default interval for keep-alive/check-recent requests (in seconds)
// Must be greater than or equal to 'min_keep_alive' and less than 'session_lifetime'
$rcmail_config['keep_alive'] = 300;
=== Cartelle speciali ===
Per dare ad ogni nuovo utente le cartelle speciali **Bozze**, **Inviata**, **Spam** e **Cestino** bisogna creare le relative Maildir e sottoscriverle. Il file con le cartelle sottoscritte usato dal server IMAP Courier è **''courierimapsubscribed''**.
La Maildir deve appartenere all'utente (root può crearle con **''su(1)''** e **''maildirmake(1)''**). È possibile preparare il template della Maildir e salvarlo in **''/etc/skel/''**, in questo caso la Maildir deve appartenere a root:
cd /etc/skel
maildirmake Maildir
maildirmake Maildir/.Drafts
maildirmake Maildir/.Junk
maildirmake Maildir/.Sent
maildirmake Maildir/.Trash
echo INBOX.Drafts >> Maildir/courierimapsubscribed
echo INBOX.Junk >> Maildir/courierimapsubscribed
echo INBOX.Sent >> Maildir/courierimapsubscribed
echo INBOX.Trash >> Maildir/courierimapsubscribed
=== Autenticazione su invio ===
Con le impostazioni Debian predefinite l'invio viene fatto direttamente sulla porta 25 di localhost dall'utente Apache. A seguito di accessi fraudolenti (furto di login/password) potrebbe capitare di vedere invii massicci con il mittente alterato, pertanto diventa difficile risalire anche a quale account è stato violato (mail sotomessa da utente Apache con mittente di fantasia).
Per rendere un po' più tracciabili le mail in uscita conviene impostare l'invio tramite TLS con login e password. In **''/etc/roundcube/main.inc.php''** si imposta:
$rcmail_config['smtp_port'] = 25;
$rcmail_config['smtp_user'] = '%u';
$rcmail_config['smtp_pass'] = '%p';
===== Virtual users ed email alias =====
**ATTENZIONE**: Questa ricetta funziona su **Debian Stretch**, che installa **Roundcube 1.2.3**. La situazione è cambiata rispetto a Debian Jessie, dove Roundcube 0.7.2 aveva il campo //alias// nella tabella //users//, rimosso nella versione più recente.
Al primo **login nella webmail** viene creata automaticamente una riga nella tabella **users**: nel campo **username** viene memorizzato il nome usato per il login, che è stato **autenticato via IMAP**. Se il sistema IMAP sottostante accetta indifferentemente sia lo **username Unix** che l'**indirizzo email**, si corre il rischio che Roundcube crei due utenti differenti nella tabella users, con tutti i problemi del caso (duplicazione delle preferenze, della rubrica, ecc.).
Esiste il plugin **virtuser_file** che tenta il lookup del nome di login in un file, cercando una corrispondenza //indirizzo email// => //username Unix//; se lo username trovato esiste già nella tabella users, il login viene effettuato con quelle credenziali.
Si installa il pacchetto **roundcube-plugins** e si attiva il plugin modificando **/etc/roundcube/config.inc.php**:
$config['plugins'] = array(
'virtuser_file'
);
// Virtual users mapping file: email_address >= username
$config['virtuser_file'] = '/etc/postfix/virtual_alias_maps';
Ovviamente il file **/etc/postfix/virtual_alias_maps** deve contenere la mappa da indirizzo email a username Unix, del tipo:
nome.cognome@dominio.it username
Sarebbe opportuno anche creare forzosamente una entry nella **tabella users** al momento della creazione di una casella di posta (utilizzando lo username Unix) e disabilitare la creazione automatica degli utenti da parte di Roundcube, basta aggiungere in **/etc/roundcube/config.inc.php**:
// Only registered users can use this service
$config['auto_create_user'] = false;
Secondo questo criterio è opportuno creare anche un record nella **tabella identities** (collegato all'utente nella tabella users), nel quale si imposta l'indirizzo email da usare come mittente.
Un'altro parametro di configurazione consente di usare l'email di una propria identità come nome di login (tale parametro potrebbe rendere superfluo l'uso del plugin //virtuser_file//, qualora ogni utente avesse la propria identità impostata correttamente):
// Enables possibility to log in using email address from user identities
$config['user_aliases'] = true;
===== Plugins =====
I plugin possono essere scompattati nella directory **''/usr/local/share/roundcube/plugins/''** e collegati con un link simbolico da **''/var/lib/roundcube/plugins/''**.
Poi nel file /etc/roundcube/main.inc.php si aggiunge il nome del plugin nell'array:
$rcmail_config['plugins'] = array('vacation', 'filters');
FIXME Debian ha la directory plugin di Roundcube anche in altri posti, ma un link in esse non è sufficiente ad attivare il plugin stesso. Ha senso mantenere il link anche in queste?
* **''/etc/roundcube/plugins/''**
* **''/usr/share/roundcube/plugins/''**
Esiste anche il pacchetto Debian **roundcube-plugins**. FIXME Vedere cosa contiene di utile e che sistema utilizza per abilitare/disabilitare i vari plugin.
===== Plugin rcubevacation 1.9.0 =====
Installato il plugin [[http://sourceforge.net/projects/rcubevacation/|RoundCube Vacation]] 1.9.0.\\ Vedere più avanti l'installazione del plugin **versione 1.9.9**.
Scompattato in **''/usr/local/share/roundcube/plugins/vacation/''**, creato un link da ''/usr/share/roundcube/plugins/''.
Abilitato il plugin editando **''/etc/roundcube/main.inc.php''**:
$rcmail_config['plugins'] = array('vacation');
Modificato in **''config.inc.php''** l'oggetto predefinito:
$rcmail_config['default']['subject'] = "Notifica vacation (out of office)";
Configurato in **''config.ini''** il metodo di azione:
[default]
driver = "setuid"
executable = "/usr/local/sbin/squirrelmail_vacation_proxy"
Si deve compilare e installare il programma **''squirrelmail_vacation_proxy''** i cui sorgenti sono forniti con il plugin.
Nel file ''config.mk'' si imposta **''BINDIR = /usr/local/sbin''**, e si esegue il classico **''make && make install''**.
===== Plugin rcubevacation 1.9.9 =====
Installato il plugin [[http://sourceforge.net/projects/rcubevacation/|RoundCube Vacation]] 1.9.9.
Scompattato in **''/usr/local/share/roundcube/plugins/vacation/''**, creato un link da ''/usr/share/roundcube/plugins/''. **ATTENZIONE:** con Debain Wheezy il link simbolico deve essere creato in ''/var/lib/roundcube/plugins/''.
Abilitato il plugin editando **''/etc/roundcube/main.inc.php''**:
$rcmail_config['plugins'] = array('vacation');
Configurato il file **''vacation/config.ini''**, impostando nella sezione ''%%[default]%%'':
[default]
driver = "setuid"
executable = "/usr/local/sbin/squirrelmail_vacation_proxy"
subject = "Notifica vacation (out of office)"
body = "default.txt"
Si deve compilare e installare il programma **''squirrelmail_vacation_proxy''** i cui sorgenti sono forniti con il plugin.
Nel file ''config.mk'' si imposta **''BINDIR = /usr/local/sbin''** e **''RESTRICTUSE = -D RESTRICTUSE''**, poi si esegue il classico **''make && make install''**.
==== Patch per virtual domains ====
La seguente **{{.:patches:rcubevacation-1.9.9.patch.gz|rcubevacation-1.9.9.patch}}** consente di:
* Funzionare correttamente con destinatari che non corrispondono ad utenti Unix.
* Impostare alias di risposta non locali (consente a vacation di rispondere a messaggi indirizzati a utenti di domini virtuali, ad esempio ''niccolo.rigacci@domain1.org,info@domain2.org'').
* Impostare forward multipli.
* **TODO** Non consente di attivare il vacation con forward senza copia locale.
**ATTENZIONE!** Il nome di login utilizzato per entrare in Roundcube deve corrispondere al **nome di login Unix** oppure all'**alias presente nella tabella ''users''**. Non può essere una delle **identità alternative** presenti nella tabella ''identities''. Altrimenti il plugin non è in grado di identificare l'utente Unix sottostante e gestire i relativi file nella home directory.
==== Il file .forward ====
Ecco alcuni esempi di file **''.forward''** con il relativo significato.\\ **Nota:** un nome preceduto dal backslash significa consegna ad utente locale senza ulteriore verifica del forward.
**Vacation** (risponde ai messaggi destinati a due differenti alias):
\,"|/usr/bin/vacation -a -a "
**Vacation** e **forward** a due altri indirizi, con copia locale:
\,,,"|/usr/bin/vacation -a -a "
**Forward** a due indirizi, **con copia locale**:
\,,
**Forward** a due indirizi, **senza copia locale**:
,
La patch proposta prevede che i destinatari multipli vengano scritti **su una stessa riga** di ''.forward'', **separati da virgole**. Tuttavia il file ''.forward'' può essere composto da più righe (destinazioni multiple), si trova documentato (e pare funzionare) questa sintassi:
\,
,
e pure questa:
\
===== Plugin roundcube-vacation-2.x =====
Vedere la pagina su **[[https://plugins.roundcube.net/packages/gabtoth/vacation|plugins.roundcube.net]]**, l'archivio si può scaricare dalla sua pagina su **[[https://github.com/gabor-toth/roundcube-vacation-plugin|GitHub]]**.
Creare la cartella **/usr/local/share/roundcube/plugins/vacation/** e scompattare al suo interno il contenuto dell'archivio, quindi creare un **link simbolico**:
ln -s /usr/local/share/roundcube/plugins/vacation /var/lib/roundcube/plugins
Attivare il plugin aggiungendolo all'array **%%$config['plugins']%%** nel file **/etc/roundcube/config.inc.php**:
$config['plugins'] = array(
'vacation'
);
===== Filtri web-mail =====
Per le note generali vedere il paragrafo [[#plugins]].
Si tratta di un plugin web-side, cioè i filtri vengono applicati solo quandi si apre la posta con webmail. Scaricato l'archivio da [[http://sourceforge.net/projects/rcubefilters/]], si utilizza la versione 2.0 su Roundcube 0.7.2.
Scompattato l'archvio in ''/usr/local/share/roundcube/plugins/filters/'' e creato un link simbolico in **''/var/lib/roundcube/plugins/''**. Aggiungere il plugin in **''/etc/roundcube/main.inc.php''**:
$rcmail_config['plugins'] = array('vacation', 'filters');
Nella schermata delle //Impostazioni// compare il tab //Filtri//.
===== Supporto quota =====
Come impostazione predefinita Roundcube supporta la quota disco tramite l'omonima funzione IMAP, vedere la paragrafo [[imap#quota|IMAP quota]].
===== Problema con la Disposition Notification =====
Quando si crea un nuovo messaggio email è possibile attivare l'opzion **Return receipt** (in italiano **Ricevuta di ritorno**). Questa opzione aggiunge due header al messaggio in uscita:
Return-Receipt-To
Disposition-Notification-To
Aprendo il messaggio con lo stesso Roundcube, viene chiesto se inviare la ricevuta:
//Il mittente ha richiesto di ricevere una notifica dell'avvenuta lettura del messaggio. Intendi inviare tale notifica?//
Rispondendo in modo affermativo, potrebbe accadere di ricevere il seguente errore:
//Errore SMTP (554): Fallito l'inserimento del destinatario "username@domain.com" (5.7.1 <>: Sender address rejected: Access denied)//
Secondo l'**[[https://www.ietf.org/rfc/rfc2298.txt|RFC2298]]** in un messaggio MDN il campo From dell'envelope (quello trasmesso da **''MAIL FROM:''** del protocollo SMTP) deve essere vuoto e Roundcube si comporta di conseguenza. Queste le raccomandazioni dell'RFC:
//The From field of the message header of the MDN MUST contain the address of the person for whom the message disposition notification is being issued.
The envelope sender address (i.e., SMTP MAIL FROM) of the MDN MUST be null (<>), specifying that no Delivery Status Notification messages or other messages indicating successful or unsuccessful delivery are to be sent in response to an MDN.//
Purtroppo in alcuni casi il server SMTP potrebbe rifiutare un messaggio composto in quel modo. Ad esempio il server Postfix potrebbe loggare quanto segue:
postfix/smtpd[24890]: connect from localhost.localdomain[127.0.0.1]
postfix/smtpd[24890]: NOQUEUE: reject: RCPT from localhost.localdomain[127.0.0.1]:
554 5.7.1 <>: Sender address rejected:
Access denied; from=<> to= proto=ESMTP helo=
Con **Roundcube 1.2.3** è possibile aggiungere un parametro a **/etc/roundcube/config.inc.php** che contravviene all'RFC, ma risolve il problema:
// According to RFC2298, return receipt envelope sender address must be empty.
// but our SMTP server does not accept a "from=<>".
$config['mdn_use_from'] = true;
Per versioni più vecchie di Roundcube l'unica alternativa è modificare il codice sorgente. La parte che rimuove il FROM è contenuto nel file **''rcube_smtp.php''** alle riga 223:
// RFC2298.3: remove envelope sender address
if (preg_match('/Content-Type: multipart\/report/', $text_headers)
&& preg_match('/report-type=disposition-notification/', $text_headers)
) {
$from = '';
}