Le protocole IMAP4
22/02/2005
 Christian CALECA 
Liste des cours

Deux serveurs IMAP4

Accueil ] [ Introduction ] [ Le protocole ] [ Serveurs IMAP ] [ Plus avec Cyrus ]


Si tout ça vous a donné l'envie d'expérimenter, voire de mettre en place un serveur IMAP, voici en quelque mots une présentation des deux serveurs les plus courants.

Le cas simple et facile à installer

Il s'agit du serveur uw-imapd, celui là même qui a été utilisé en page précédente. Utilisé sur Debian ou une autre distribution comme Mandrake ou Fedora,avec Exim ,Postfix ou Sendmail, les MTA installés par défaut savent délivrer localement avec les bons outils dans des boîtes aux lettres au format Mailbox, généralement dans le répertoire /var/spool/mail.

Pour Mandrake

Installez le paquetage imap sur Mandrake (celui-ci vous fournira également le service POP3).

Vérifiez que le super démon xinetd est correctement configuré. Vous devez trouver dans /etc/xinetd.d/imap quelque chose de ce genre :

service imap
{
        socket_type             = stream
        wait                    = no
        user                    = root
        server                  = /usr/sbin/imapd
        log_on_success          += DURATION USERID
        log_on_failure          += USERID
        disable                 = no
}

Vérifiez également dans /etc/services la présence de ces lignes :

imap            143/tcp         imap2           # Interim Mail Access Proto v2
imap            143/udp         imap2

Si imap2 vous gène, remplacez par imap4. Ce sera plus joli, mais ça ne fonctionnera pas mieux.

Curieusement, imap2 fait en réalité référence à imap4 révision 1

Pour Debian :

Installez le paquetage uw-imapd .

Vérifiez que le super démon inetd est correctement configuré. Vous devez trouver dans /etc/inetd.conf quelque chose de ce genre :

#:MAIL: Mail, news and uucp services.
imap2  stream  tcp     nowait        root    /usr/sbin/tcpd  /usr/sbin/imapd
imap3  stream  tcp     nowait        root    /usr/sbin/tcpd  /usr/sbin/imapd

Vérifiez également dans /etc/services la présence de ces lignes :

imap2           143/tcp         imap            # Interim Mail Access Proto v2
imap2           143/udp         imap

Pour les deux :

relancez votre super démon si vous avez modifié sa configuration, et ça devrait fonctionner.

Vous voyez, ce n'est pas bien compliqué, et ce sera largement suffisant dans bien des cas.

Le cas compliqué et difficile à installer

Les solutions les plus simples n'étant pas forcément les plus attrayantes, nous allons maintenant voir une solution qui utilise Cyrus, le serveur de choc. 

Pourquoi tout ça ?

L'objectif est de monter un système indépendant des comptes d'utilisateurs UNIX (Authentification par saslauth via une base de données indépendante des comptes utilisateurs), avec un serveur IMAP proposant le plus de fonctionnalités possibles, et utilisant le format Maildir, plus sûr (Cyrus).

Pour l'authentification, nous aurions pu utiliser une base de données de type MySQL ou un annuaire LDAP. Le sado-masochisme a toutefois ses limites, et ça nous mènerait trop loin hors du sujet initial.

Un outil comme web-cyradm propose une solution en utilisant MySQL. Cet outil, pour prometteur qu'il soit, ne semble pas encore assez mature. Il n'est pas le seul dans ce genre, replex semble être un concurrent très proche. 

Avec ce trio, nous aurions pu réaliser un système de messagerie performant :

Mais attention, ça peut vite devenir très compliqué...

Matériel requis

Ici, nous nous contenterons de faire fonctionner cyrus d'une façon "simple".

Les paquetages existent pour la Mandrake 9.2 dans les contributions. Vous pouvez faire ça sur Mandrake, mais ce qui suit est décrit sur Debian. Ce sera probablement plus compliqué, mais par la suite, c'est tout de même plus facile de faire évoluer une Debian qu'une Mandrake.

Il faut la version 2.1 ou supérieure de Cyrus. Elle n'existe pas "packagée" dans la Debian stable. Autrement dit vous avez le choix entre :

Nous ferons ça sur une testing.

Comme il n'est pas question ici d'écrire une encyclopédie, nous supposons que vous savez faire les choses suivantes :

Si vous savez faire tout cela, vous pourrez faire aussi la suite. Sinon, ça risque de se solder par un échec.

Cyrus

C'est lui qui va recevoir les mails locaux, gérer les boîtes aux lettres des inscrits et leur servir leurs messages via IMAP (ou POP3).

Cyrus, pour authentifier les clients, s'appuie sur SASL. SASL peut authentifier depuis par plusieurs méthodes :

Dans le cas le plus simple, shadow, chaque utilisateur devra disposer d'un compte local, ce n'est pas ce qui nous intéresse.

sasldb, c'est déjà mieux, les utilisateurs auront un compte dans la base sasldb, indépendant des comptes UNIX,

pam, c'est le moyen le plus souple. On pourra utiliser un annuaire LDAP ou une base de données MySQL ou même sasldb, via pam.

La première chose à faire, une fois la configuration vue plus haut réalisée, est d'installer Cyrus21 et saslauthd.

Installation de Cyrus :

Voici la liste des paquetages. Attention, à ceux qui sont installés (ii).  Tous ceux qui sont listés ici ne sont pas forcément nécessaires.

cyclope:~# dpkg -l '*cyrus*'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name                     Version                  Description
+++-========================-========================-================================================================
pn  cyrus-admin              <none>                   (no description available)
pn  cyrus-common             <none>                   (no description available)
pn  cyrus-dev                <none>                   (no description available)
pn  cyrus-imapd              <none>                   (no description available)
pn  cyrus-nntp               <none>                   (no description available)
pn  cyrus-pop3d              <none>                   (no description available)
ii  cyrus21-admin            2.1.14-1                 Cyrus mail system (administration tool)
ii  cyrus21-clients          2.1.14-1                 Cyrus mail system (test clients)
ii  cyrus21-common           2.1.14-1                 Cyrus mail system (common files)
pn  cyrus21-dev              <none>                   (no description available)
ii  cyrus21-doc              2.1.14-1                 Cyrus mail system (documentation files)
un  cyrus21-docs             <none>                   (no description available)
ii  cyrus21-imapd            2.1.14-1                 Cyrus mail system (IMAP support)
pn  cyrus21-murder           <none>                   (no description available)
ii  cyrus21-pop3d            2.1.14-1                 Cyrus mail system (POP3 support)
un  cyrus22-common           <none>                   (no description available)
ii  libauthen-sasl-cyrus-per 0.07-1                   Perl extension for Cyrus SASL library
un  libcyrus-imap-perl       <none>                   (no description available)
ii  libcyrus-imap-perl21     2.1.14-1                 Interface to Cyrus imap client imclient library

installation de sasl :

cyclope:~# dpkg -l '*sasl*'                                                                                              
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name                     Version                  Description
+++-========================-========================-================================================================
pn  gsasl                    <none>                   (no description available)
ii  libauthen-sasl-cyrus-per 0.07-1                   Perl extension for Cyrus SASL library
ii  libauthen-sasl-perl      2.05-1                   Authen::SASL - SASL Authentication framework
pn  libgsasl1                <none>                   (no description available)
pn  libgsasl1-dev            <none>                   (no description available)
un  libsasl-bin              <none>                   (no description available)
pn  libsasl-dev              <none>                   (no description available)
pn  libsasl-digestmd5-des    <none>                   (no description available)
pn  libsasl-digestmd5-plain  <none>                   (no description available)
pn  libsasl-gssapi-heimdal   <none>                   (no description available)
pn  libsasl-gssapi-mit       <none>                   (no description available)
pn  libsasl-krb4-mit         <none>                   (no description available)
un  libsasl-modules          <none>                   (no description available)
un  libsasl-modules-krb5     <none>                   (no description available)
un  libsasl-modules-nonus    <none>                   (no description available)
ii  libsasl-modules-plain    1.5.27-3.5               Basic Pluggable Authentication Modules for SASL
ii  libsasl2                 2.1.12-1                 Authentication abstraction library
pn  libsasl2-dev             <none>                   (no description available)
un  libsasl2-digestmd5-des   <none>                   (no description available)
pn  libsasl2-digestmd5-plain <none>                   (no description available)
pn  libsasl2-gssapi-mit      <none>                   (no description available)
pn  libsasl2-krb4-mit        <none>                   (no description available)
ii  libsasl2-modules         2.1.12-1                 Pluggable Authentication Modules for SASL
ii  libsasl2-modules-gssapi- 2.1.12-1                 Pluggable Authentication Modules for SASL
ii  libsasl2-modules-kerbero 2.1.12-1                 Pluggable Authentication Modules for SASL
pn  libsasl2-modules-plain   <none>                   (no description available)
ii  libsasl7                 1.5.27-3.5               Authentication abstraction library.
ii  sasl-bin                 1.5.27-3.5               Programs for manipulating the SASL users database
ii  sasl2-bin                2.1.12-1                 Programs for manupulating the SASL users database

Là encore, tous ne sont pas forcément nécessaires.

Vérifications

saslauthd

Le paquetage sasl2-bin contient les outils nécessaires pour gérer l'authentification sasl :

cyclope:~# dpkg -L sasl2-bin
/.
/usr
/usr/share
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/sasldblistusers2.8.gz
/usr/share/man/man8/saslpasswd2.8.gz
/usr/share/man/man8/sasldbconverter2.8.gz
/usr/share/man/man8/sasltestsuite.8.gz
/usr/share/man/man8/saslauthd.8.gz
/usr/share/man/man8/testsaslauthd.8.gz
/usr/share/doc
/usr/share/doc/sasl2-bin
/usr/share/doc/sasl2-bin/README.Debian
/usr/share/doc/sasl2-bin/copyright
/usr/share/doc/sasl2-bin/changelog.gz
/usr/share/doc/sasl2-bin/changelog.Debian.gz
/usr/sbin
/usr/sbin/saslauthd
/usr/sbin/sasltestsuite
/usr/sbin/testsaslauthd
/usr/sbin/sasldblistusers2
/usr/sbin/saslpasswd2
/usr/sbin/sasldbconverter2
/etc
/etc/default
/etc/default/saslauthd
/etc/init.d
/etc/init.d/saslauthd

Le fichier /etc/default/saslauthd a son importance :

cyclope:~# cat /etc/default/saslauthd
# This needs to be uncommented before saslauthd will be run automatically
START=yes

# You must specify the authentication mechanisms you wish to use.
# This defaults to "pam" for PAM support, but may also include
# "shadow" or "sasldb", like this:
# MECHANISMS="pam shadow"

MECHANISMS="sasldb"

C'est parti...

# /etc/init.d/saslauthd restart
Restarting SASL Authentication Daemon: saslauthd.
#
# saslpasswd2 -c cyrus
Password:
Again (for verification):
#

Nous avons créé un utilisateur nommé cyrus, avec un mot de passe : passwd dans l'exemple. Bien entendu, essayez de choisir quelque chose de plus original. Cet utilisateur est destiné à devenir par la suite l'administrateur de Cyrus.

# sasldblistusers2
cyrus@cyclope: userPassword
#

l'utilisateur cyrus est bien créé (cyclope est le nom de la machine de test).

# testsaslauthd -u cyrus -p passwd
0: OK "Success."
cyclope:/etc/pam.d#

saslauthd semble fonctionner correctement. Nous pouvons passer à cyrus.

Cyrus

Le paquetage cyrus21-admin contient :

# dpkg -L cyrus21-admin
/.
/usr
/usr/share
/usr/share/linda
/usr/share/linda/overrides
/usr/share/linda/overrides/cyrus21-admin
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/cyrus21-admin
/usr/share/icons
/usr/share/icons/cyradm.xpm
/usr/share/icons/mini
/usr/share/icons/mini/cyradm.xpm
/usr/share/doc
/usr/share/doc/cyrus21-admin
/usr/share/doc/cyrus21-admin/README.Debian
/usr/share/doc/cyrus21-admin/copyright
/usr/share/doc/cyrus21-admin/changelog.gz
/usr/share/doc/cyrus21-admin/changelog.Debian.gz
/usr/share/doc/cyrus21-admin/changelog.html.gz
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/cyradm.1.gz
/usr/share/man/man1/sieveshell.1.gz
/usr/bin
/usr/bin/cyradm
/usr/bin/sieveshell
/usr/lib
/usr/lib/menu
/usr/lib/menu/cyrus21-admin

cyradm est l'outil qui permettra de gérer les comptes imap.

Le paquetage cyrus21-imapd contient :

cyclope:/etc/pam.d# dpkg -L cyrus21-imapd
/.
/usr
/usr/sbin
/usr/sbin/squatter
/usr/lib
/usr/lib/cyrus
/usr/lib/cyrus/bin
/usr/lib/cyrus/bin/imapd
/usr/share
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/squatter.8.gz
/usr/share/man/man8/idled.8.gz
/usr/share/man/man8/imapd.8.gz
/usr/share/doc
/etc
/etc/pam.d
/etc/pam.d/imap
/usr/share/doc/cyrus21-imapd

Quant au paquetage cyrus21-common :

cyclope:/etc/pam.d# dpkg -L cyrus21-common
/.
/etc
/etc/pam.d
/etc/pam.d/lmtp
/etc/pam.d/sieve
/etc/default
/etc/default/cyrus21
/etc/logcheck
/etc/logcheck/ignore.d.server
/etc/logcheck/ignore.d.server/cyrus21
/etc/logcheck/ignore.d.workstation
/etc/logcheck/ignore.d.workstation/cyrus21
/etc/cyrus.conf
/etc/imapd.conf
/etc/init.d
/etc/init.d/cyrus21
/etc/cron.daily
/etc/cron.daily/cyrus21-common
/usr
/usr/sbin
/usr/sbin/cyrdeliver
/usr/sbin/cyrdump
/usr/sbin/cyrmaster
/usr/sbin/cyrquota
/usr/sbin/cyrreconstruct
/usr/sbin/cyrus-makedirs
/usr/sbin/ctl_cyrusdb
/usr/sbin/ctl_deliver
/usr/sbin/ctl_mboxlist
/usr/sbin/cvt_cyrusdb
/usr/sbin/chk_cyrus
/usr/sbin/ipurge
/usr/sbin/tls_prune
/usr/sbin/mbpath
/usr/lib
/usr/lib/cyrus
/usr/lib/cyrus/upgrade
/usr/lib/cyrus/upgrade/convert-sieve.pl
/usr/lib/cyrus/upgrade/dohash
/usr/lib/cyrus/upgrade/rehash
/usr/lib/cyrus/upgrade/undohash
/usr/lib/cyrus/upgrade/translatesieve
/usr/lib/cyrus/upgrade/upgradesieve
/usr/lib/cyrus/cyrus-db-types.txt
/usr/lib/cyrus/cyrus-hardwired-config.txt
/usr/lib/cyrus/bin
/usr/lib/cyrus/bin/lmtpd
/usr/lib/cyrus/bin/timsieved
/usr/lib/cyrus/bin/notifyd
/usr/lib/cyrus/bin/fud
/usr/lib/cyrus/get-backtrace.gdb
/usr/share
/usr/share/snmp
/usr/share/snmp/mibs
/usr/share/snmp/mibs/CYRUS-MASTER-MIB.txt
/usr/share/linda
/usr/share/linda/overrides
/usr/share/linda/overrides/cyrus21-common
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/cyrus21-common
/usr/share/doc
/usr/share/doc/cyrus21-common
/usr/share/doc/cyrus21-common/README.Debian.gz
/usr/share/doc/cyrus21-common/README.Debian.debug.gz
/usr/share/doc/cyrus21-common/README.Debian.simpleinstall.gz
/usr/share/doc/cyrus21-common/README.postfix.gz
/usr/share/doc/cyrus21-common/changelog.Debian.gz
/usr/share/doc/cyrus21-common/copyright
/usr/share/doc/cyrus21-common/NEWS.Debian.gz
/usr/share/doc/cyrus21-common/changelog.gz
/usr/share/doc/cyrus21-common/UPGRADE.Debian.gz
/usr/share/doc/cyrus21-common/README.Debian.database.gz
/usr/share/doc/cyrus21-common/changelog.html.gz
/usr/share/man
/usr/share/man/man5
/usr/share/man/man5/cyrus.conf.5.gz
/usr/share/man/man5/imapd.conf.5.gz
/usr/share/man/man8
/usr/share/man/man8/mbpath.8.gz
/usr/share/man/man8/timsieved.8.gz
/usr/share/man/man8/notifyd.8.gz
/usr/share/man/man8/lmtpd.8.gz
/usr/share/man/man8/ctl_cyrusdb.8.gz
/usr/share/man/man8/ctl_deliver.8.gz
/usr/share/man/man8/ctl_mboxlist.8.gz
/usr/share/man/man8/cvt_cyrusdb.8.gz
/usr/share/man/man8/chk_cyrus.8.gz
/usr/share/man/man8/fud.8.gz
/usr/share/man/man8/ipurge.8.gz
/usr/share/man/man8/cyrdeliver.8.gz
/usr/share/man/man8/cyrmaster.8.gz
/usr/share/man/man8/cyrreconstruct.8.gz
/usr/share/man/man8/cyrquota.8.gz
/usr/share/man/man8/cyrdump.8.gz
/usr/share/man/man8/cyrus-makedirs.8.gz
/usr/share/man/man8/tls_prune.8.gz
/var
/var/lib
/var/lib/cyrus
/var/spool
/var/spool/cyrus
/var/spool/sieve
/var/run
/var/run/cyrus
/var/run/cyrus/socket
/etc/sieve
/usr/lib/cyrus/bin/quota
/usr/lib/cyrus/bin/reconstruct

Il n'y a à priori rien à modifier dans la configuration par défaut de cyrus. Pour imapd, ça va être différent :

Le man imapd.conf vous donnera tous les détails, pour l'instant, nous devons surtout prêter attention à trois lignes :

admins: cyrus

Il faut indiquer qui sera le (ou les) administrateur(s) de cyrus imapd. Autant choisir tout de suite le compte que nous avons créé tout à l'heure, parce que la seconde ligne qui nous intéresse :

sasl_pwcheck_method: saslauthd

indique la méthode d'authentification. Ce sera obligatoirement SASL, mais SASL peut utiliser divers moyens, nous choisissons saslauthd, puisque nous l'avons testée avec succès.

Enfin :

servername: cyclope.maison.mrs

servername doit indiquer le nom complètement qualifié de l'hôte de cyrus.

Bien. Cyradm devrait fonctionner. 

# /etc/init.d/cyrus21 restart
Stopping Cyrus IMAPd: cyrmaster.
Waiting for complete shutdown...
Starting Cyrus IMAPd: cyrmaster.
cyclope:/etc/pam.d# cyradm --user cyrus localhost
IMAP Password:

cyclope>

Ben voilà... Heureusement, il y a une aide en ligne :

cyclope> help
authenticate, login, auth         authenticate to server
chdir, cd                         change current directory
createmailbox, create, cm         create mailbox
deleteaclmailbox, deleteacl, dam  remove ACLs from mailbox
deletemailbox, delete, dm         delete mailbox
disconnect, disc                  disconnect from current server
exit, quit                        exit cyradm
help, ?                           show commands
info                              display mailbox/server metadata
listacl, lam, listaclmailbox      list ACLs on mailbox
listmailbox, lm                   list mailboxes
listquota, lq                     list quotas on specified root
listquotaroot, lqr, lqm           show quota roots and quotas for mailbox
reconstruct                       reconstruct mailbox (if supported)
renamemailbox, rename, renm       rename (and optionally relocate) mailbox
server, servername, connect       show current server or connect to server
setaclmailbox, sam, setacl        set ACLs on mailbox
setinfo                           set server metadata
setquota, sq                      set quota on mailbox or resource
version, ver                      display version info of current server
cyclope>

commençons par un "listmalbox" :

cyrus> listmmailbox

cyrus>

C'est vide. C'est normal, nous n'avons encore rien fait. 

cyclope> createmailbox user.essai0
cyclope> lm
user.essai0 (\HasNoChildren)
cyclope>

en voilà un de fait. Voyons les droits :

cyclope> listaclmailbox user.essai0
essai0 lrswipcda
cyclope>

seul essai0 a tous les droits sur cette boîte aux lettres. D'ailleurs :

cyclope> deletemailbox user.essai0
deletemailbox: Permission denied
cyclope>

même l'administrateur cyrus ne peut détruire cette boîte. Du moins, pas si facilement.

Faisons un petit tour sur le serveur, pour voir. L'installation de cyrus a construit toute une arborescence dans /var/spool/cyrus. Je vous passe les détails, pour aller directement dans :

cyclope:/var/spool/cyrus/mail/e/user/essai0# ls
cyrus.cache cyrus.header cyrus.index
cyclope:/var/spool/cyrus/mail/e/user/essai0#

Comme c'est peut-être pas clair, détaillons un peu.

  • Jusqu'à /var/spool/cyrus/mail/e/ c'est l'installation de cyrus qui a créé l'arborescence. Vous trouverez un répertoire par lettre de l'alphabet, ils sont tous vides, sauf le "e".
  • Dans le "e", user/essai0 a bien entendu été créé lorsque l'on a créé la BAL avec cyradm. Les trois fichiers inclus également.

Qu'avons-nous fait ?

Que reste-t-il à faire ?

mailbox_transport = cyrus
#mailbox_command = procmail -a "$EXTENSION"

Spécifier le transport pour mailbox et supprimer l'appel de la commande procmail.

# The Cyrus deliver program has changed incompatibly, multiple times.
cyrus     unix  -       n       n       -       -       pipe
  flags=R user=cyrus argv=/usr/sbin/cyrdeliver -e -m "${extension}" ${user}
# Cyrus 2.1.5 (Amos Gouaux)
#cyrus     unix  -       n       n       -       -       pipe
#  user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}

Comme vous pouvez le constater, l'agent de livraison de cyrus peut changer de nom et de façon de fonctionner, suivant la version. Il faut donc faire bien attention à ce détail pour que la livraison locale fonctionne correctement avec cyrus. Faites le bon choix en fonction de la version que vous utilisez.

A titre d'exemple, voici le master.cf de la configuration utilisée pour rédiger cet article :

# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (50)
# ==========================================================================
smtp      inet  n       -       y       -       -       smtpd
#628      inet  n       -       n       -       -       qmqpd
pickup    fifo  n       -       y       60      1       pickup
cleanup   unix  n       -       y       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
#qmgr     fifo  n       -       n       300     1       nqmgr
rewrite   unix  -       -       y       -       -       trivial-rewrite
bounce    unix  -       -       y       -       0       bounce
defer     unix  -       -       y       -       0       bounce
flush     unix  n       -       y       1000?   0       flush
smtp      unix  -       -       y       -       -       smtp
showq     unix  n       -       y       -       -       showq
error     unix  -       -       y       -       -       error
local     unix  -       n       n       -       -       local
virtual   unix  -       n       y       -       -       virtual
lmtp      unix  -       -       y       -       -       lmtp
#
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
# The Cyrus deliver program has changed incompatibly.
#
cyrus     unix  -       n       n       -       -       pipe
  flags=R user=cyrus argv=/usr/sbin/cyrdeliver -e -m ${extension} ${user}
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp     unix  -       n       n       -       -       pipe
  flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -d -t$nexthop -f$sender $recipient
scalemail-backend unix  -       n       n       -       2       pipe
  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}

# only used by postfix-tls
#smtps    inet  n       -       n       -       -       smtpd 
  -o smtpd_tls_wrappermode=yes -o #smtpd_sasl_auth_enable=yes
#587      inet  n       -       n       -       -       smtpd 
  -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=no
proxymap          unix  -       -       n       -       -       proxymap
trace     unix  -       -       -       -       0       bounce
verify    unix  -       -       -       -       1       verify

Il s'agit ici de la version 2.1.17 de cyrus et de la version 2.1.5 de Postfix
 

# saslpasswd2 -c essai0
Password:
Again (for verification):

# sasldblistusers2
essai0@cyclope: userPassword
cyrus@cyclope: userPassword

# testsaslauthd -u essai0 -p essai0
0: OK "Success."
cyclope:/var/spool/cyrus/mail/e/user/essai0#

Tests

# mail essai0@cyclope.maison.mrs
Subject: hello world
coucou
.
Cc:

#
Nov 15 17:45:40 cyclope postfix/pickup[1072]: 
                        AA9B1F95: uid=0 from=<root>
Nov 15 17:45:40 cyclope postfix/cleanup[1245]: 
                        AA9B1F95: message-id=<20031115164540.AA9B1F95@cyclope.maison.mrs>
Nov 15 17:45:40 cyclope postfix/qmgr[491]: 
                        AA9B1F95: from=<root@cyclope.maison.mrs>, size=315, nrcpt=1 (queue active)
Nov 15 17:45:41 cyclope postfix/pipe[1249]: 
                        AA9B1F95: to=<essai0@cyclope.maison.mrs>, relay=cyrus, delay=1, 
                        status=sent (cyclope.maison.mrs)

C'est passé. 

cyclope:/var/spool/cyrus/mail/e/user/essai0# ls -l
total 16
-rw-------    1 cyrus    mail          577 Nov 15 17:45 1.
-rw-------    1 cyrus    mail          584 Nov 15 17:45 cyrus.cache
-rw-------    1 cyrus    mail          152 Nov 15 16:27 cyrus.header
-rw-------    1 cyrus    mail          128 Nov 15 17:45 cyrus.index
cyclope:/var/spool/cyrus/mail/e/user/essai0#

Il y a un nouveau fichier. serait-ce le message ?

# cat 1.
Return-Path: <cyrus@cyclope.maison.mrs>
Received: from cyclope.maison.mrs ([unix socket])
        by cyclope.maison.mrs (Cyrus v2.1.14-IPv6-Debian-2.1.14-1) 
        with LMTP; Sat, 15 Nov 2003 17:45:41 +0100
X-Sieve: CMU Sieve 2.2
Return-Path: <root@cyclope.maison.mrs>
Received: by cyclope.maison.mrs (Postfix, from userid 0)
        id AA9B1F95; Sat, 15 Nov 2003 17:45:40 +0100 (CET)
To: essai0@cyclope.maison.mrs
Subject: hello world
Message-Id: <20031115164540.AA9B1F95@cyclope.maison.mrs>
Date: Sat, 15 Nov 2003 17:45:40 +0100 (CET)
From: root@cyclope.maison.mrs (root)

coucou

#

Oui, c'est le message. Jusque là, tout fonctionne.

# telnet cyclope.maison.mrs 143
Trying 192.168.0.16...
Connected to cyclope.maison.mrs.
Escape character is '^]'.
* OK cyclope.maison.mrs Cyrus IMAP4 v2.1.14-IPv6-Debian-2.1.14-1 server ready
001 login essai0 essai0
001 OK User logged in

# Bien !  déjà l'identification fonctionne

002 select INBOX
* FLAGS (\Answered \Flagged \Draft \Deleted \Seen)
* OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen \*)]
* 1 EXISTS
* 1 RECENT
* OK [UNSEEN 1]
* OK [UIDVALIDITY 1068910075]
* OK [UIDNEXT 2]
002 OK [READ-WRITE] Completed

# Bon signe, il existe bien un message dans la BAL

003 fetch 1 BODY[TEXT]
* 1 FETCH (FLAGS (\Recent \Seen) BODY[TEXT] {10}
coucou

)
003 OK Completed

# pas la peine de vérifier dans le détail de l'en-tête, c'est bien sûr le bon message

004 logout
* BYE LOGOUT received
004 OK Completed
Connection closed by foreign host.
cyclope:/var/spool/cyrus/mail/e/user/essai0#

Et voilà le travail. Nous savons maintenant configurer :

et nous savons utiliser :

Juste un détail...

Nous avons vu en créant une boîte aux lettres avec cyradm que le point (.) était utilisé comme séparateur hiérarchique dans l'arborescence des dossiers...

Comment faire alors, si l'on souhaite créer des utilisateurs qui ont un point dans le nom ?

On ne peut pas. Sauf si l'on ajoute dans imapd.conf la ligne :

unixhierarchysep: yes

Dans ce cas, le séparateur devient un "slash" (/) et le point devient utilisable dans les noms.

Nous devrons écrire alors :

cyclope> createmailbox user/essai0
cyclope> lm
user/essai0 (\HasNoChildren)
cyclope>

Vous préférerez probablement utiliser cette possibilité.


Précédente ] [ Accueil ] [ Suivante ]