Centos6.4 配置postfix+dovecot+mysql

使用Linux用户验证和收发邮件

需要组件 postfix dovecot roundcube

  1. postfix 用来收发邮件, 作为SMTP服务器, 监听25端口
  2. dovecot 用作为POP3, IMAP服务器, 监听 POP3的110, IMAP的143端口, 用来和邮件客户端(如Foxmail,roundcube等)通讯, 管理邮件
  3. roundcube 作为客户端, 登录时通过IMAP来认证用户

postfix 配置

/etc/postfix/main.cf:

myhostname
mydomain

#指定发送邮件时地址 xx@domain.com 中的domain.com, 如果使用mail命令发送邮件,需要设置该参数否则不能发送
myorigin

#可接受转发邮件的类型
mynetworks_style

#mynetworks和relay_domains配合使用, 用来代替mynetworks_style
#可接受转发的来源IP
mynetworks
#可接受转发的域名
relay_domains

#邮件保存格式, 使用Maildir格式
home_mailbox=Maildir/

以上配置完后就可以用postifx收发邮件了, 也可以通过客户端设置SMTP来让postfix发送邮件,但是客户端无法管理邮件,因为postfix没有提供POP3或IMAP来和客户端互动, 要想让客户端能管理和查看邮件需要配置dovecot来提供POP3或IMAP服务

dovecot 配置

配置 /etc/dovecot/dovecot.conf:

#开启的协议
protocols= imap pop3 lmtp

配置 /etc/dovecot/conf.d/10-auth.conf:

disable_plaintext_auth=no
auth_mechanisms = plain login

#使用Linux用户来验证
!include auth-system.conf.ext

配置 /etc/dovecot/conf.d/10-mail.conf :

#邮件所在目录
mail_location = maildir:~/Maildir

配置 /etc/dovecot/conf.d/10-master.conf:

service auth {
    # Postfix smtp-auth
    unix_listener /var/spool/postfix/private/auth {
      mode = 0660
      user = postfix
      group = postfix
    }
}

配置postfix, 让其使用dovecot来做sasl认证:

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = ''
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks, reject_unauth_    destination
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

使用mysql来存放验证用户,接受域名等信息

因为前面使用的是Linux用户,所以每次收发邮件可以直接使用Linux用户来操作,但是如果要使用mysql来存放用户和验证,我们就需要一个Linux用户来进行收发的操作,因此我们可以建立一个Linux用户来代理操作

$ useradd -g vmail -d /home/vmail

之后为了让postfix和dovecot能够使用mysql特性,需要安装 dovecot-mysql, centos 6.4的postfix好像带了mysql功能

配置dovecot,让其通过mysql的数据来认证用户:

/etc/dovecot/conf.d/10-auth.conf

#注释掉这行
#!include auth-system.conf.ext
#打开这行
!include auth-sql.conf.ext

/etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:/home/vmail/%d/%n/Maildir

/etc/dovecot/10-master.conf:

service auth{
    unix_listener /var/spool/postfix/private/auth {  
            mode = 0666  
            user = postfix  
            group = postfix  
    } 

   unix_listener auth-userdb {
     mode = 0600
     user = vmail
     #group =
   }
}

/etc/dovecot/auth-sql.conf.ext:

passdb {
   driver = sql
   args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
   driver = static
   args = uid=vmail gid=vmail home=/home/vmail/%d/%n
}

postfix通过mysql验证用户

配置 /etc/postfix/main.cf :

#告诉Postfix去MySQL数据库种寻找域名、用户帐号密码及邮件别名等信息
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf  
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf  
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf

postfix使用dovecot的LMTP来存放邮件

设置postfix将接受到的邮件转给dovecot存放到对应目录

配置 /etc/postfix/main.cf :

#将mydestination的值修改为'',以便Postfix能够通过MySQL表中相关数据决定需要接受/发送邮件的域名,这样更具有通用性
mydestination ='' 

#以便告诉Postfix不要使用LDA「Local Delivery Agent」转而使用Dovecot的LMTP完成本地邮件投递
virtual_transport = lmtp:unix:private/dovecot-lmtp

配置 /etc/dovecot/conf.d/10-master.conf :

service lmtp {  
        unix_listener /var/spool/postfix/private/dovecot-lmtp {  
        mode = 0600  
        user = postfix  
        group = postfix  
  }  
}

配置 /etc/dovecot/conf.d/20-lmtp.conf , 作用是使用postmaster_address地址将接收到的邮件转发给对应的本地用户:

protocol lmtp {
   postmaster_address = postmaster@yourdomain
}

参考:

postfix参数说明: http://linux.vbird.org/linux_server/0390postfix.php
postfix 和 dovecot 关系 :http://www.cnblogs.com/maxmys/p/3327239.html
https://wiki.centos.org/zh/HowTos/postfix
http://343614597.blog.51cto.com/7056394/1689705
参考:https://support.rackspace.com/how-to/dovecot-installation-and-configuration-on-centos/
postfix+dovecot+mysql : http://www.open-open.com/lib/view/open1431592348122.html
mysql SHA512-CRYPT 加密 : http://stackoverflow.com/a/24186434/7514395

标签: centos