https://www.cnblogs.com/fireblackman/p/15902306.html
1. 安装postfixadmin
https://www.cnblogs.com/fireblackman/p/15799597.html
2. 安装postgres
https://www.cnblogs.com/fireblackman/p/15740550.html
3. 安装postfix
# mysql用postfix-mysql, postgres使用postfix-pgsql
#sudo apt-get install postfix postfix-mysql #因为我们用的是postgres, 所以我们使用如下sudo apt-get install postfix postfix-pgsql
4. 安装dovecot
#sudo apt-get install dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql #同postfix, 我们使用的是postgres, 所以使用如下sudo apt-get install dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-pgsql
5. 配置postfix
a. 建立三个数据库配置文件
sudo vim /etc/postfix/postgres_virtual_mailbox_maps.cfsudo vim /etc/postfix/postgres_virtual_domains_maps.cfsudo vim /etc/postfix/postgres_virtual_alias_maps.cf
##/etc/postfix/postgres_virtual_alias_maps.cf
user = postfixadmin
password = postfixadmin
hosts = 127.0.0.1
dbname = postfixadmin
table = alias
select_field = goto
where_field = address
##/etc/postfix/postgres_virtual_domains_maps.cf
user = postfixadmin
password = postfixadmin
hosts = 127.0.0.1
dbname = postfixadmin
table = domain
select_field = domain
where_field = domain
##/etc/postfix/postgres_virtual_mailbox_maps.cf
user = postfixadmin
password = postfixadmin
hosts = 127.0.0.1
dbname = postfixadmin
table = mailbox
select_field = maildir
where_field = username
b.配置/etc/postfix/main.cf文件
sudo vim /etc/postfix/main.cf
#smtpd_tls_cert_file = /etc/ssl/certs/cacert.pem
#smtpd_tls_key_file = /etc/ssl/private/server.key
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
#myhostname = test.com
myhostname = mail.test.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
#mydestination = $myhostname, mail.test.com, test.com, localhost.localdomain, localhost
mydestination =
relayhost =
#mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mynetworks = all
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
# Virtual Mailbox Domain Settings
virtual_alias_maps = pgsql:/etc/postfix/postgres_virtual_alias_maps.cf
virtual_mailbox_domains = pgsql:/etc/postfix/postgres_virtual_domains_maps.cf
virtual_mailbox_maps = pgsql:/etc/postfix/postgres_virtual_mailbox_maps.cf
virtual_mailbox_limit = 51200000
virtual_minimum_uid = 5000
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_mailbox_base = /home/vmail
virtual_transport = virtual
#SASL AS Dovecot to authenticate.
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
c.更改/etc/postfix/master.cf配置
sudo vim /etc/postfix/master.cf
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# Many of the following services use the Postfix pipe(8) delivery
# agent. See the pipe(8) man page for information about ${recipient}
# and other message envelope options.
# ====================================================================
#
# maildrop. See the Postfix MAILDROP_README file for details.
# Also specify in main.cf: maildrop_destination_recipient_limit=1
#
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
#
# ====================================================================
#
# Recent Cyrus versions can use the existing "lmtp" master.cf entry.
#
# Specify in cyrus.conf:
# lmtp cmd="lmtpd -a" listen="localhost:lmtp" proto=tcp4
#
# Specify in main.cf one or more of the following:
# mailbox_transport = lmtp:inet:localhost
# virtual_transport = lmtp:inet:localhost
#
# ====================================================================
#
# Cyrus 2.1.5 (Amos Gouaux)
# Also specify in main.cf: cyrus_destination_recipient_limit=1
#
#cyrus unix - n n - - pipe
# user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
#
# ====================================================================
# Old example of delivery via Cyrus.
#
#old-cyrus unix - n n - - pipe
# flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
#
# ====================================================================
#
# See the Postfix UUCP_README file for configuration details.
#
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
#
# Other external delivery methods.
#
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 -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}
mailman unix - n n - - pipe
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
${nexthop} ${user}
6.设置文件权限以及Vmail用户
cd /etc/postfix chown root:postfix postgres_virtual_* chmod 640 postgres_virtual_* groupadd -g 5000 vmail useradd -m -g vmail -u 5000 -d /home/vmail vmail service postfix restart
7. 配置 dovcot
a. 修改相关配置文件
/etc/dovecot/dovecot.conf /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-auth.conf/etc/dovecot/conf.d/10-mail.conf /etc/dovecot/dovecot-sql.conf.ext
sudo vim /etc/dovecot/dovecot.conf!include_try /usr/share/dovecot/protocols.d/*.protocol protocols = imap pop3 lmtp
sudo vim /etc/dovecot/conf.d/10-master.conf //未列出的服务配置保持不动service auth { # auth_socket_path points to this userdb socket by default. It's typically # used by dovecot-lda, doveadm, possibly imap process, etc. Users that have # full permissions to this socket are able to get a list of all usernames and # get the results of everyone's userdb lookups. # # The default 0666 mode allows anyone to connect to the socket, but the # userdb lookups will succeed only if the userdb returns an "uid" field that # matches the caller process's UID. Also if caller's uid or gid matches the # socket's uid or gid the lookup succeeds. Anything else causes a failure. # # To give the caller full permissions to lookup all users, set the mode to # something else than 0666 and Dovecot lets the kernel enforce the # permissions (e.g. 0777 allows everyone full permissions). unix_listener auth-userdb { mode = 0600 user = vmail #group = } # Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } # Auth process is run as this user. #user = $default_internal_user user = dovecot }
sudo vim /etc/dovecot/conf.d/10-ssl.conf ssl = required
sudo vim /etc/dovecot/conf.d/10-auth.conf auth_mechanisms = plain login //修改此处#!include auth-system.conf.ext //注释掉此处!include auth-sql.conf.ext //取消此行的注释#!include auth-ldap.conf.ext #!include auth-passwdfile.conf.ext #!include auth-checkpassword.conf.ext #!include auth-vpopmail.conf.ext #!include auth-static.conf.ext
sudo vim /etc/dovecot/conf.d/10-mail.conf mail_location = maildir:/home/vmail/%u //修改此处, 这里关系到邮件的读取,不然会收不到邮件mail_privileged_group = vmail //添加此处
sudo vim /etc/dovecot/dovecot-sql.conf.ext driver = pgsql connect = host=127.0.0.1 dbname=postfixadmin user=postfixadmin password=postfixadmin # 这里配置你实际的数据库连接 default_pass_scheme = SHA512-CRYPT iterate_query = SELECT username AS user FROM mailbox; user_query = SELECT CONCAT('/home/vmail/',maildir) AS home, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = '%u' AND active = '1'; # 这里要和mail_location配置对应上,不然读不到邮件 #user_query = SELECT CONCAT('/home/vmail/', username) AS home, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = '%u' AND active = '1'; password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1';
b.更改配置文件权限并重启dovecot
chown -R vmail:dovecot /etc/dovecotchmod -R o-rwx /etc/dovecotsudo service dovecot restart
8. 使用postfixadmin管理邮箱账号
http://{你的ip}/postfixadmin/login.php