安装:
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.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf virtual_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 = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_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.cf user = mailuser password = mailuserpass hosts = 127.0.0.1 dbname = mailserver query = SELECT 1 FROM virtual_domains WHERE name='%s' #虚拟用户 /etc/postfix/mysql-virtual-mailbox-maps.cf user = mailuser password = mailuserpass hosts = 127.0.0.1 dbname = mailserver query = SELECT 1 FROM virtual_users WHERE email='%s' #虚拟别名 /etc/postfix/mysql-virtual-alias-maps.cf user = mailuser password = mailuserpass hosts = 127.0.0.1 dbname = mailserver query = SELECT destination FROM virtual_aliases WHERE source='%s' |
测试查询:
1
2
3
|
postmap -q haiyun.me mysql: /etc/postfix/mysql-virtual-mailbox-domains .cf postmap -q user@haiyun.me mysql: /etc/postfix/mysql-virtual-mailbox-maps .cf postmap -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.conf auth_verbose = yes # 认证详细日志 auth_debug = yes # 认证debug disable_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为user userdb { driver = static args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n } /etc/dovecot/dovecot-sql.conf.ext driver = mysql connect = host=127.0.0.1 dbname=mailserver user=mailuser password=mailuserpass default_pass_scheme = SHA512-CRYPT password_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/nologin chown -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