Installing Courier POP and IMAP

Courier IMAP

  1. 编译安装

    bunzip2 courier-imap-3.0.3.tar.bz2tar xvf courier-imap-3.0.3.tar
    or
    [root@linuxas3 src]# tar jxvf courier-imap-3.0.3.tar.bz2
    [root@linuxas3 src]# cd courier-imap-3.0.3
    
    su other
    
    [root@linuxas3 courier-imap-3.0.3]# su chen
    [chen@linuxas3 courier-imap-3.0.3]$./configure --with-redhat \
    --disable-root-check --enable-unicode=utf-8,iso-8859-1,gb2312,gbk,gb18030 \
    --with-trashquota --with-dirsync
    [chen@linuxas3 courier-imap-3.0.3]$ make [chen@linuxas3 courier-imap-3.0.3]$ make check 
    su root
    
    [chen@linuxas3 courier-imap-3.0.3]$ exit
    exit
    [root@linuxas3 courier-imap-3.0.3]# make install [root@linuxas3 courier-imap-3.0.3]# make install-configure 
    [root@linuxas3 courier-imap-3.0.3]# cd /usr/lib/courier-imap/etc/
    			
  2. /usr/lib/courier-imap/etc/authdaemonrc

    [root@linuxas3 etc]# vi /usr/lib/courier-imap/etc/authdaemonrc
    authmodulelist="authmysql"
    authmodulelistorig="authmysql"
    version="authdaemond.mysql"
     				

    #authmodulelist="authcustom authcram authuserdb authldap authpgsql authmysql authpam"

    去掉不需要的模块,否则会验证失败。

  3. /usr/lib/courier-imap/etc/authmysqlrc

    [root@linuxas3 etc]# cat authmysqlrc
    ##VERSION: $Id: authmysqlrc,v 1.16 2004/01/19 19:34:09 mrsam Exp $
    #
    # Copyright 2000-2004 Double Precision, Inc.  See COPYING for
    # distribution information.
    #
    # Do not alter lines that begin with ##, they are used when upgrading
    # this configuration.
    #
    # authmysqlrc created from authmysqlrc.dist by sysconftool
    #
    # DO NOT INSTALL THIS FILE with world read permissions.  This file
    # might contain the MySQL admin password!
    #
    # Each line in this file must follow the following format:
    #
    # field[spaces|tabs]value
    #
    # That is, the name of the field, followed by spaces or tabs, followed by
    # field value.  Trailing spaces are prohibited.
    
    
    ##NAME: LOCATION:0
    #
    # The server name, userid, and password used to log in.
    
    MYSQL_SERVER            localhost
    MYSQL_USERNAME          postfix
    MYSQL_PASSWORD          6AJx9Nqv9x8hg
    
    ##NAME: MYSQL_SOCKET:0
    #
    # MYSQL_SOCKET can be used with MySQL version 3.22 or later, it specifies the
    # filesystem pipe used for the connection
    #
    MYSQL_SOCKET            /var/lib/mysql/mysql.sock
    
    ##NAME: MYSQL_PORT:0
    #
    # MYSQL_PORT can be used with MySQL version 3.22 or later to specify a port to
    # connect to.
    
    MYSQL_PORT              3306
    
    ##NAME: MYSQL_OPT:0
    #
    # Leave MYSQL_OPT as 0, unless you know what you're doing.
    
    MYSQL_OPT               0
    
    ##NAME: MYSQL_DATABASE:0
    #
    # The name of the MySQL database we will open:
    
    MYSQL_DATABASE          postfix
    
    ##NAME: MYSQL_USER_TABLE:0
    #
    # The name of the table containing your user data.  See README.authmysqlrc
    # for the required fields in this table.
    
    MYSQL_USER_TABLE        postfix_users
    
    ##NAME: MYSQL_CRYPT_PWFIELD:0
    #
    # Either MYSQL_CRYPT_PWFIELD or MYSQL_CLEAR_PWFIELD must be defined.  Both
    # are OK too. crypted passwords go into MYSQL_CRYPT_PWFIELD, cleartext
    # passwords go into MYSQL_CLEAR_PWFIELD.  Cleartext passwords allow
    # CRAM-MD5 authentication to be implemented.
    
    #MYSQL_CRYPT_PWFIELD    crypt
    #MYSQL_CRYPT_PWFIELD    passwd
    
    ##NAME: MYSQL_CLEAR_PWFIELD:0
    #
    #
    # MYSQL_CLEAR_PWFIELD   clear
    MYSQL_CLEAR_PWFIELD     passwd
    
    ##NAME: MYSQL_DEFAULT_DOMAIN:0
    #
    # If DEFAULT_DOMAIN is defined, and someone tries to log in as 'user',
    # we will look up 'user@DEFAULT_DOMAIN' instead.
    #
    #
    # DEFAULT_DOMAIN                example.com
    DEFAULT_DOMAIN          example.net
    
    ##NAME: MYSQL_UID_FIELD:0
    #
    # Other fields in the mysql table:
    #
    # MYSQL_UID_FIELD - contains the numerical userid of the account
    #
    MYSQL_UID_FIELD         uid
    
    ##NAME: MYSQL_GID_FIELD:0
    #
    # Numerical groupid of the account
    
    MYSQL_GID_FIELD         gid
    
    ##NAME: MYSQL_LOGIN_FIELD:0
    #
    # The login id, default is id.  Basically the query is:
    #
    #  SELECT MYSQL_UID_FIELD, MYSQL_GID_FIELD, ... WHERE id='loginid'
    #
    
    MYSQL_LOGIN_FIELD       user
    
    ##NAME: MYSQL_HOME_FIELD:0
    #
    
    MYSQL_HOME_FIELD        home
    
    ##NAME: MYSQL_NAME_FIELD:0
    #
    # The user's name (optional)
    
    MYSQL_NAME_FIELD        name
    
    ##NAME: MYSQL_MAILDIR_FIELD:0
    #
    # This is an optional field, and can be used to specify an arbitrary
    # location of the maildir for the account, which normally defaults to
    # $HOME/Maildir (where $HOME is read from MYSQL_HOME_FIELD).
    #
    # You still need to provide a MYSQL_HOME_FIELD, even if you uncomment this
    # out.
    #
    MYSQL_MAILDIR_FIELD     maildir
    
    ##NAME: MYSQL_DEFAULTDELIVERY:0
    #
    # Courier mail server only: optional field specifies custom mail delivery
    # instructions for this account (if defined) -- essentially overrides
    # DEFAULTDELIVERY from ${sysconfdir}/courierd
    #
    # MYSQL_DEFAULTDELIVERY defaultdelivery
    
    ##NAME: MYSQL_QUOTA_FIELD:0
    #
    # Define MYSQL_QUOTA_FIELD to be the name of the field that can optionally
    # specify a maildir quota.  See README.maildirquota for more information
    #
    MYSQL_QUOTA_FIELD       quota
    
    ##NAME: MYSQL_AUXOPTIONS:0
    #
    # Auxiliary options.  The MYSQL_AUXOPTIONS field should be a char field that
    # contains a single string consisting of comma-separated "ATTRIBUTE=NAME"
    # pairs.  These names are additional attributes that define various per-account
    # "options", as given in INSTALL's description of the "Account OPTIONS"
    # setting.
    #
    # MYSQL_AUXOPTIONS_FIELD        auxoptions
    #
    # You might want to try something like this, if you'd like to use a bunch
    # of individual fields, instead of a single text blob:
    #
    # MYSQL_AUXOPTIONS_FIELD        CONCAT("allowimap=",allowimap,",allowpop3=",allowpop3,",allowwebmail=",allowwebmail,",sharedgroup=",sharedgroup)
    #
    # This will let you define fields called "allowimap", etc, with the end result
    # being something that the OPTIONS parser understands.
    
    
    ##NAME: MYSQL_WHERE_CLAUSE:0
    #
    # This is optional, MYSQL_WHERE_CLAUSE can be basically set to an arbitrary
    # fixed string that is appended to the WHERE clause of our query
    #
    # MYSQL_WHERE_CLAUSE    server='mailhost.example.com'
    
    ##NAME: MYSQL_SELECT_CLAUSE:0
    #
    # (EXPERIMENTAL)
    # This is optional, MYSQL_SELECT_CLAUSE can be set when you have a database,
    # which is structuraly different from proposed. The fixed string will
    # be used to do a SELECT operation on database, which should return fields
    # in order specified bellow:
    #
    # username, cryptpw, clearpw, uid, gid, home, maildir, quota, fullname, options
    #
    # The username field should include the domain (see example below).
    #
    # Enabling this option causes ignorance of any other field-related
    # options, excluding default domain.
    #
    # There are two variables, which you can use. Substitution will be made
    # for them, so you can put entered username (local part) and domain name
    # in the right place of your query. These variables are:
    #               $(local_part), $(domain), $(service)
    #
    # If a $(domain) is empty (not given by the remote user) the default domain
    # name is used in its place.
    #
    # $(service) will expand out to the service being authenticated: imap, imaps,
    # pop3 or pop3s.  Courier mail server only: service will also expand out to
    # "courier", when searching for local mail account's location.  In this case,
    # if the "maildir" field is not empty it will be used in place of
    # DEFAULTDELIVERY.  Courier mail server will also use esmtp when doing
    # authenticated ESMTP.
    #
    # This example is a little bit modified adaptation of vmail-sql
    # database scheme:
    #
    # MYSQL_SELECT_CLAUSE   SELECT CONCAT(popbox.local_part, '@', popbox.domain_name),                      \
    #                       CONCAT('{MD5}', popbox.password_hash),          \
    #                       popbox.clearpw,                                 \
    #                       domain.uid,                                     \
    #                       domain.gid,                                     \
    #                       CONCAT(domain.path, '/', popbox.mbox_name),     \
    #                       '',                                             \
    #                       domain.quota,                                   \
    #                       '',                                             \
    #                       CONCAT("allowimap=",allowimap,",allowpop3=",    \
    #                              allowpop3,",allowwebmail=",allowwebmail, \
    #                              ",sharedgroup=",sharedgroup)             \
    #                       FROM popbox, domain                             \
    #                       WHERE popbox.local_part = '$(local_part)'       \
    #                       AND popbox.domain_name = '$(domain)'            \
    #                       AND popbox.domain_name = domain.domain_name
    
    
    ##NAME: MYSQL_ENUMERATE_CLAUSE:0
    #
    # {EXPERIMENTAL}
    # Optional custom SQL query used to enumerate accounts for authenumerate,
    # in order to compile a list of accounts for shared folders.  The query
    # should return the following fields: name, uid, gid, homedir, maildir
    #
    # Example:
    # MYSQL_ENUMERATE_CLAUSE        SELECT CONCAT(popbox.local_part, '@', popbox.domain_name),                      \
    #                       domain.uid,                                     \
    #                       domain.gid,                                     \
    #                       CONCAT(domain.path, '/', popbox.mbox_name),     \
    #                       ''                                              \
    #                       FROM popbox, domain                             \
    #                       WHERE popbox.local_part = '$(local_part)'       \
    #                       AND popbox.domain_name = '$(domain)'            \
    #                       AND popbox.domain_name = domain.domain_name
    
    
    
    ##NAME: MYSQL_CHPASS_CLAUSE:0
    #
    # (EXPERIMENTAL)
    # This is optional, MYSQL_CHPASS_CLAUSE can be set when you have a database,
    # which is structuraly different from proposed. The fixed string will
    # be used to do an UPDATE operation on database. In other words, it is
    # used, when changing password.
    #
    # There are four variables, which you can use. Substitution will be made
    # for them, so you can put entered username (local part) and domain name
    # in the right place of your query. There variables are:
    #       $(local_part) , $(domain) , $(newpass) , $(newpass_crypt)
    #
    # If a $(domain) is empty (not given by the remote user) the default domain
    # name is used in its place.
    # $(newpass) contains plain password
    # $(newpass_crypt) contains its crypted form
    #
    # MYSQL_CHPASS_CLAUSE   UPDATE  popbox                                  \
    #                       SET     clearpw='$(newpass)',                   \
    #                               password_hash='$(newpass_crypt)'        \
    #                       WHERE   local_part='$(local_part)'              \
    #                       AND     domain_name='$(domain)'
    #
    [root@linuxas3 etc]#
    
    				
  4. 编辑pop3d文件,将POP3DSTART=NO改为POP3DSTART=YES

    [root@linuxas3 etc]# vi pop3d
    POP3DSTART=YES
    				
  5. 编辑imapd文件,将IMAPDSTART=NO改为IMAPDSTART=YES

    [root@linuxas3 etc]# vi imapd
    IMAPDSTART=YES
    				
  6. 启动POP,IMAP

    /usr/lib/courier-imap/libexec/pop3d.rc start
    /usr/lib/courier-imap/libexec/imapd.rc start
    				
  7. 测试POP,IMAP

    [root@linuxas3 src]# telnet localhost 25
    Trying 127.0.0.1...
    Connected to linuxas3.9812.net (127.0.0.1).
    Escape character is '^]'.
    220 mail.example.net ESMTP Postfix
    quit
    221 Bye
    Connection closed by foreign host.
    [root@linuxas3 src]#
    
    [root@linuxas3 src]# telnet localhost 110
    Trying 127.0.0.1...
    Connected to linuxas3.9812.net (127.0.0.1).
    Escape character is '^]'.
    +OK Hello there.
    quit
    +OK Better luck next time.
    Connection closed by foreign host.
    [root@linuxas3 src]#