HowtoMail/Roundcube
Howto Roundcube
Sous licence libre GPL, roundcube est un client de messagerie utilisant l’IMAP.
Installation
# apt install roundcube roundcube-plugins roundcube-plugins-extra
Configuration
Il ne faut pas modifier le fichier de configuration par défaut
(/etc/roundcube/defaults.inc.php
).
La configuration se fait dans
/etc/roundcube/config.inc.php
.
On pourrait notamment vouloir ajuster :
$config['imap_host'] = 'ssl://mail.example.com:993';
$config['smtp_host'] = 'tls://mail.example.com:587';
$config['plugins'] = [
'managesieve',
];
Taille maximum des pièces jointes
Imaginons que l’on veut autoriser une taille maximum des pièces jointes jusqu’à 10 Mo.
Il faut mettre au moins +40% de 10Mo dans
/etc/postfix/main.cf
:
message_size_limit = 25600000
Il faut configurer PHP pour avoir des valeurs supérieures à +33% de 10 Mo pour ces paramètres :
post_max_size = 20M
upload_max_filesize = 20M
Enfin, il faut configurer Roundcube à exactement +33% de 10 Mo via
/etc/roundcube/config.inc.php
:
config['max_message_size'] = '13.33M';
Plugins
Plugin managesieve (anciennement sieverules)
Le plugin “managesieve” est fourni par le paquet roundcube-plugins
Note : sur des anciennes version de Debian, il s’agissait du plugin “sieverules” fourni avec le paquet roundcube-plugins-extra
Ce plugin permet de créer des règles Sieve stockées sur le serveur IMAP. C’est notamment utile pour gérer des filtres de messages ou l’envoi de message d’absence.
La configuration se fait via
/etc/roundcube/plugins/managesieve/config.inc.php
.
Note : sur des anciennes version de Debian, c’est
/etc/roundcube/plugins/sieverules/config.inc.php
.
Plugin vacation
Pour envoyer des messages d’absence, on privilégie l’utilisation de filtres 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,
),
);
Upgrade en urgence vers 1.5.8
Toutes les versions inférieures à 1.5.8 (dont les 1.4.x 1.2.x etc.) et les versions entre 1.6 inférieures à 1.6.8 sont impactées par des failles de sécurité, cf https://github.com/roundcube/roundcubemail/releases/tag/1.5.8
Voici une méthode pour passer des anciennes versions en 1.5.8 :
$ wget https://github.com/roundcube/roundcubemail/releases/download/1.5.8/roundcubemail-1.5.8-complete.tar.gz
# cd /var/lib
# tar xpvf roundcubemail-1.5.8-complete.tar.gz
# chown -R root: roundcubemail-1.5.8
# cd roundcubemail-1.5.8/
# chown www-data: temp/ && chmod 750 temp/
# rm -rf config/ && ln -s /etc/roundcube config
# rm -rf logs/ && ln -s ../../log/roundcube logs
Modifier la configuration du VirtualHost, en reprenant les directives
de /etc/roundcube/apache.conf
.
Mettre à jour la base de données :
# ./bin/updatedb.sh --package=roundcube --dir=SQL
Vous pourriez rencontrer des erreurs diverses du type :
ERROR: Error in DDL upgrade 2013061000: [1060] Duplicate column name 'expires'
ERROR: Error in DDL upgrade 2015111100: [1060] Duplicate column name 'failed_login'
ERROR: Error in DDL upgrade 2020020101: [1071] Specified key was too long; max key length is 767 bytes
Il faut alors adapter les fichiers .sql
dans
SQL/mysql/
en sautant quand il y a des doublons, ou en
zappant certains problèmes notamment les indexes avec
COLLATE utf8mb4_unicode_ci
.
Lignes tronquées lors de l’impression d’un message
Si vous cliquez sur « Imprimer ce courriel », la vue proposée peut
avoir des lignes tronquées, notamment si vous zoomez. Cela semble un bug
de CSS du skin “elastic”. Un hotfix est d’éditer
/usr/share/roundcube/skins/elastic/deps/bootstrap.min.css
(attention le fichier n’a qu’une seule ligne de code) et dans la section
@media print{
à la fin de la ligne, remplacer :
@page{size:a3}body{min-width:992px !important}.container{min-width:992px !important}
par
@page{size:a3}body{}.container{min-width:992px !important}
Cette astuce a été trouvée grâce au ticket #7732: Elastic: Preview of message does not wrap white spaces #7732
Un bug a été ouvert pour ce problème : https://github.com/roundcube/roundcubemail/issues/9677
Mise à jour de la base de donnée Roundcube
Pour mettre à jour la base de donnée Roundcube (si nécessaire), il faut faire la commande suivante :
# RCUBE_CONFIG_PATH=/etc/roundcube/ /usr/share/roundcube/bin/updatedb.sh --package=roundcube --dir=/usr/share/roundcube/SQL
Impossible d’envoyer un mail avec un image dans le body du mail
roundcube fait un requète POST sur /?_task=mail&...
qui est bloqué par mod_security
avec un
403 Forbidden
.
Dans ce cas il faut ajouter cette exception pour le vhost roundcube :
<IfModule mod_security2.c>
SecRequestBodyAccess Off
</IfModule>