安装:
|
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.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.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/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