# Howto Roundcube

Sous licence libre GPL, roundcube est un client de messagerie utilisant l'IMAP.
D'autres alternatives existent tel que rainloop, SOGo, Squirrelmail,...

## Installation 

Rien de plus simple :

~~~
# apt install roundcube
~~~

La configuration se fait dans `/etc/roundcube/config.inc.php`.
Il ne faut pas modifier le fichier de configuration par défaut (`/etc/roundcube/defaults.inc.php`).


## Plugins

### Plugin sieve

Celui-ci permet l'usage de filtres, notamment l'envoi de messages d’absence ou de vacances (utilisé à Evolix pour les comptes mails virtuels).

~~~
# apt install roundcube-plugins-extra
~~~

On pourra l'activer ainsi :

~~~
$config['plugins'] = array('sieverules');
~~~

La configuration des règles se feront dans `/etc/roundcube/plugins/sieverules/config.inc.php`.


### Plugin vacation

Pour envoyer des messages d'absence, on privilégie l'utilisation de [filtres Sieve](#plugin-sieve) dans Roundcube (Préférences > Filtres). A Evolix, on l'utilise pour les comptes mails virtuels configurés dans LDAP.

Pour les comptes mails Unix, on utilise le plugin Roundcube vacation suivant (attention aux forks !) : <https://github.com/gabor-toth/roundcube-vacation-plugin>

Sinon, on peut utiliser ce fork qui englobe la traduction française : <https://github.com/leeroyke/roundcube-vacation-plugin>


#### Installation du plugin vacation

On utilise généralement ce plugin avec le driver FTP lorsque l'on est dans un setup avec les utilisateurs en compte Unix.
Il faut donc préalablement avoir installé Proftpd, avec le module ldap `proftpd-mod-ldap` et bien charger le module dans la configuration de proftpd.

Au niveau de proftpd on utilise la configuration ldap suivante, dans `/etc/proftpd/ldap.conf` :

~~~
<IfModule mod_ldap.c>
LDAPServer ldap://localhost/??sub
LDAPBindDN "cn=admin,dc=example,dc=com" "PASSWORD"
LDAPUsers "ou=people,dc=example,dc=com" (uid=%u) (uidNumber=%u)

LDAPAuthBinds       on
</IfModule>
~~~

Au niveau de la configuration du plugin vacation, on utilise la configuration suivante dans `/etc/roundcube/plugins/vacation/config.ini` :

~~~
[default]
driver = "ftp"
;server = "localhost"
subject = "Absence / Out of office"
body = "default.txt"
;disable_forward = true


[dotforward]
binary = "/usr/bin/vacation"
flags = ""
message = ".vacation.msg"
database = ".vacation.db"
alias_identities = true
set_envelop_sender = false
always_keep_message = true
~~~

Il ne faut pas oublier également d'installer le paquet *vacation*.


#### Utilisation du plugin vacation

Voir [/HowtoPostfix#forward]() et [/HowtoPostfix#vacation]()

Attention : Il est important de préciser les alias dans l'interface, sinon le mail de vacation ne sera pas envoyé.


### Plugin password

Son utilisé résulte sur la possibilité de changer son propre mot de passe avec de nombreux connecteurs tel que dovecot, LDAP, etc.

On pourra l'activer ainsi :

~~~
$config['plugins'] = array('password');
~~~

Pour les comptes mails stockés dans LDAP il faudra installer `php7.3-ldap` et mettre en place le fichier `/etc/roundcube/plugins/password/config.inc.php` suivant :

~~~
<?php
$config=array();
$config['password_driver'] = 'ldap_simple';
$config['password_confirm_current'] = true;
$config['password_ldap_host'] = '127.0.0.1';
$config['password_ldap_userDN_mask'] = 'uid=%login,ou=people,dc=example,dc=com';
$config['password_ldap_encodage'] = 'ssha';
?>
~~~


## Import de contacts en CSV 

<https://www.pokorra.de/2017/01/import-contacts-via-csv-into-roundcube/>


## FAQ / Troubleshooting

### Mode debug

On spécifie le mode file pour sélectionner le debug que l'on souhaite activer :

~~~
$config['log_driver'] = 'file';
~~~

Les messages seront présent dans `/var/log/roundcube/`.

Activer la ou les debug de protocoles et leur verbosités :

~~~
// DEBUG
// system error reporting, sum of: 1 = log; 4 = show
$config['debug_level'] = 4;

// Log SQL queries
$config['sql_debug'] = false;

// Log IMAP conversation
$config['imap_debug'] = true;

// Log LDAP conversation
$config['ldap_debug'] = false;

// Log SMTP conversation
$config['smtp_debug'] = false;
~~~


### Mailbox doesn’t exist

Si nous avons par exemple l'erreur suivante : "UID MOVE : Mailbox doesn’t exist : Trash"

On devra activer cette option :

~~~
$config['create_default_folders'] = true;
~~~


### Problème d’envoi de pièce jointe

Il n'y a aucune erreur affichée dans l'interface web de Rouncube, mais les pièces jointes ne sont plus envoyées.

Il y a des erreurs de ce genre dans les logs de Roundcube `/var/log/roundcube/errors` lorsqu’on essaye d’envoyer une pièce jointe dans un e-mail :

```
[01-Jan-2020 00:00:00 +0200]: <abcd1234> PHP Error: compte@domaine.com can't read /tmp/rcmAttmntQ2clsS (not in temp_dir) in /usr/share/roundcube/plugins/filesystem_attachments/filesystem_attachments.php on line 216 (POST /?_task=mail&_unlock=loading1599225495530&_lang=undefined&_framed=1&_action=send)
```

Cela est causé par les versions de Roundcube sur Debian 9 (Stretch) et 10 (Bullseye). Lorsque les mises-à-jour sont gérées via apt, la mise-à-jour écrase les permissions de `/var/lib/roundcube/temp/`, ce qui a pour effet de bord de ne plus pouvoir envoyer de pièces-jointes pour les vhosts qui utilisent un AssignUserID dédié.

Le bug est corrigé dans la version 1.4.3+dfsg.1-1 du paquet roundcube (<https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=951194#26>), disponible à partir de Debian 11 (Bullseye).

Sur Debian 10 (Buster), il est possible d'utiliser un backport du paquet.
Pour les version plus anciennes, il est préférable de les mettre à niveau vers Debian 10 ou 11.

Pour solutionner temporairement le problème :

```
# chown www-roundcube:roundcube /var/lib/roundcube/temp
```


### `Erreur SMTP (220) : échec d’authentification`

Le port par défaut est maintenant 587.

Si Roundcube se connecte à Postfix en local, on peut repasser sur le port 25.

Si on a besoin de rester sur le port 587, il peut manquer les options de configuration TLS dans `/etc/roundcube/config.inc.php` :

Debian >= 12 (`smtp_server` renommé `smtp_host` et inclue le port) :

~~~
## SSL
$config['smtp_host'] = 'localhost:587';
## ou TLS
$config['smtp_host'] = 'tls://localhost:587';

$config['smtp_conn_options'] = array(
  'ssl'         => array(
    'verify_peer'  => true,
    'verify_depth' => 3,
    'cafile'       => '/etc/ssl/certs/ca-certificates.crt',
  ),
);
~~~

Debian < 12 :

~~~
## SSL
$config['smtp_server'] = 'localhost';
## ou TLS
$config['smtp_server'] = 'tls://localhost';

$config['smtp_port'] = '587';

$config['smtp_conn_options'] = array(
  'ssl'         => array(
    'verify_peer'  => true,
    'verify_depth' => 3,
    'cafile'       => '/etc/ssl/certs/ca-certificates.crt',
  ),
);
~~~

Si le certificat n'est pas valide ou auto-signé, on peut désactiver la vérification :

~~~
$config['smtp_conn_options'] = array(
  'ssl' => array(
    'verify_peer'      => false,
    'verify_peer_name' => false,
  ),
);
~~~

