安装:
|
1
|
yum install dovecot-mysql |
新建数据库:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
CREATE DATABASE mailserver;GRANT SELECT ON mailserver.* TO 'mailuser'@'127.0.0.1' IDENTIFIED BY 'mailuserpass';FLUSH PRIVILEGES;USE mailserver;#虚拟域表CREATE TABLE `virtual_domains` ( `id` int(11) NOT NULL auto_increment, `name` varchar(50) NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;#虚拟用户表CREATE TABLE `virtual_users` ( `id` int(11) NOT NULL auto_increment, `domain_id` int(11) NOT NULL, `password` varchar(106) NOT NULL, `email` varchar(100) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8;#虚拟用户别名CREATE TABLE `virtual_aliases` ( `id` int(11) NOT NULL auto_increment, `domain_id` int(11) NOT NULL, `source` varchar(100) NOT NULL, `destination` varchar(100) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8;添加测试数据:INSERT INTO `mailserver`.`virtual_domains` (`name`)VALUES ('haiyun.me');INSERT INTO `mailserver`.`virtual_users` (`domain_id`, `password` , `email`)VALUES ('1', ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'user@haiyun.me');INSERT INTO `mailserver`.`virtual_aliases` (`domain_id`, `source`, `destination`)VALUES ('1', 'alias@haiyun.me', 'user@haiyun.me'); |
Postfix添加以下配置:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cfvirtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cfvirtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf#使用dovecot lmtp交付虚拟域邮件,省却postfix配置用户邮件目录及权限问题virtual_transport = lmtp:unix:private/dovecot-lmtp #使用dovecot验证,后面dovecot配置smtpd_sasl_type = dovecotsmtpd_sasl_path = private/authsmtpd_sasl_auth_enable = yessmtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination |
配置Postfix支持Mysql查询表:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#虚拟域/etc/postfix/mysql-virtual-mailbox-domains.cfuser = mailuserpassword = mailuserpasshosts = 127.0.0.1dbname = mailserverquery = SELECT 1 FROM virtual_domains WHERE name='%s'#虚拟用户/etc/postfix/mysql-virtual-mailbox-maps.cf user = mailuserpassword = mailuserpasshosts = 127.0.0.1dbname = mailserverquery = SELECT 1 FROM virtual_users WHERE email='%s'#虚拟别名/etc/postfix/mysql-virtual-alias-maps.cf user = mailuserpassword = mailuserpasshosts = 127.0.0.1dbname = mailserverquery = SELECT destination FROM virtual_aliases WHERE source='%s' |
测试查询:
|
1
2
3
|
postmap -q haiyun.me mysql:/etc/postfix/mysql-virtual-mailbox-domains.cfpostmap -q user@haiyun.me mysql:/etc/postfix/mysql-virtual-mailbox-maps.cfpostmap -q alias@haiyun.me mysql:/etc/postfix/mysql-virtual-alias-maps.cf |
Dovecot配置:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
/etc/dovecot/conf.d/10-mail.conf mail_location = maildir:/var/mail/vhosts/%d/%n/etc/dovecot/conf.d/10-auth.confauth_verbose = yes # 认证详细日志 auth_debug = yes # 认证debugdisable_plaintext_auth = no #开启明文验证auth_mechanisms = plain login #支持验证方法#!include auth-system.conf.ext #取消默认系统验证!include auth-sql.conf.ext #使用mysql验证/etc/dovecot/conf.d/auth-sql.conf.ext#用户验证passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext}#用户邮箱目录 %d为domain,%n为useruserdb { driver = static args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n}/etc/dovecot/dovecot-sql.conf.extdriver = mysqlconnect = host=127.0.0.1 dbname=mailserver user=mailuser password=mailuserpassdefault_pass_scheme = SHA512-CRYPTpassword_query = SELECT email as user, password FROM virtual_users WHERE email='%u';/etc/dovecot/conf.d/10-master.conf#lmtp服务,postfix通过lmtp交付邮件service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix }}#验证服务,postfix也通过此验证用户service auth { unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } unix_listener auth-userdb { mode = 0600 user = vmail #group = } user = dovecot}service auth-worker { user = vmail} |
新建用户用以访问邮件目录数据:
|
1
2
|
useradd -M -u 5000 vmail -d /var/mail -s /sbin/nologinchown -R vmail:vmail /var/mail/ |
参考:https://library.linode.com/email/postfix/postfix2.9.6-dovecot2.0.19-mysql
转自:https://www.haiyun.me/archives/953.html