本系列文章主要讨论基于Postfix+Dovecot+Roundcube搭建开源邮件系统的方案。为了贴合实际需要,以虚拟邮件用户为基础,通过MariaDB数据库来管理邮件用户。请注意阅读前后文。
本系列文章:
背景信息
为了模拟真实的使用场景,邮件用户采用虚拟用户(区别于采用操作系统账号方式),用户信息存储在数据库中。数据库采用MariaDB(和mysql几乎相同)。
MariaDB数据库安装
参考本站wordpress 6.5.2版本安装记录 中关于MariaDB安装方法,此处不再详述。
启动数据库:
systemctl start mariadb systemctl enable mariadb
进入数据库:
mysql -u root
设置数据库root账户密码:
alter user root@localhost identified via mysql_native_password using password('admin@123');
创建数据库
建立为Postfix提供访问权限的数据库、及授权账户,数据库名称、账户名称可以自行定义。
/* 创建数据库,名称可以自定义 */ create database maildb; /* 授权mailuser用户对maildb数据库select权限,并设置密码*/ GRANT SELECT ON maildb.* TO 'mailuser'@'127.0.0.1' IDENTIFIED BY 'admin@123'; FLUSH PRIVILEGES;
初始化数据表
建立虚拟用户相关的数据库,后续将会用到。数据库表名称、字段名称可以自定义。
/* 域名表 */ CREATE TABLE `vt_domain` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /* 虚拟用户表 */ CREATE TABLE `vt_user` ( `id` INT NOT NULL AUTO_INCREMENT, `domain_id` INT NOT NULL, `password` VARCHAR(106) NOT NULL, `email` VARCHAR(120) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), FOREIGN KEY (domain_id) REFERENCES vt_domain(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /* 别名表 */ CREATE TABLE `vt_alias` ( `id` INT NOT NULL AUTO_INCREMENT, `domain_id` INT NOT NULL, `source` varchar(100) NOT NULL, `destination` varchar(100) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (domain_id) REFERENCES vt_domain(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
初始化虚拟用户数据
初始化部分用户数据,方便后续测试:
/* 新增两个域名 */ INSERT INTO `maildb`.`vt_domain` (`id` ,`name`) VALUES ('1', 'mailabc.cn'), ('2', 'mail.mailabc.cn'); /* 新增两个虚拟账号,并设置密码为admin@123, 这里的密码做了加密处理,如需使用其他加密方式可以查询官方文档 */ INSERT INTO `maildb`.`vt_user` (`id`, `domain_id`, `password` , `email`) VALUES ('1', '1', ENCRYPT('admin@123', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'admin@mailabc.cn'), ('2', '1', ENCRYPT('admin@123', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'dmarck-reports@mailabc.cn'); /* 新增一个别名账号,本文用不到,直接借鉴的其他文档设置,后续文章再研究具体用法 */ INSERT INTO `maildb`.`vt_alias` (`id`, `domain_id`, `source`, `destination`) VALUES ('1', '1', 'postmaster@mailabc.cn', 'admin@mailabc.cn');
至此,数据库配置完毕。返回顶部查看本系列其他文章。