###############
#### SMTP ####
###############
Postfix由postfix RPM包提供,并通过postfix服务脚本控制。它是一个由多个协同操作程序构成的模块
化程序,它的组件由master进程控制。
Postfix的主配置文件是/etc/postfix/main.cf,可以使用文本编辑器或postconf命令进行编辑。postconf
命令还可用于确定Postfix的所有当前和默认配置设置或逐项确定这些设置。
默认情况下,Postfix仅侦听来自本地主机的传入电子邮件。若要重新配置postfix以接收从远程主机发送的本地邮件,必须在/etc/postfix/main.cf中设置inet_interfaces = all
对电子邮件进行故障排除时,将在/var/log/maillog中保留所有与邮件相关的操作日志,其中包括关于
被事件和成功事件的信息。mailq命令(或postqueue -p)显示已排队的所有传出邮件的列表。若要尝试
再次立即发送所有已排队的邮件,可以运行postfix flush命令(或postqueue -f);否则,postfix将大
约每小时尝试重新发送一次,直至邮件被接受或过期。
mailq ##查看队列中的邮件(如果存在,则邮件未发送成功)
postqueue -f ##处理队列中的邮件
postsuper -d ID ##删除ID的邮件
>/var/spool/mail/root ##清空root用户邮件
postconf -d ##显示配置文件默认值
postconf -n ##显示配置文件不同于默认值的更改
postconf -e "..." ##更改配置
#### 1、基本电子邮件配置
配置DNS,主机IP:172.25.254.115
主机名:mailwestos.westos.com
systemctl stop firewalld.service ##关闭防火墙
hostnamectl set-hostname mailwestos.westos.com ##修改主机名
yum install bind -y ##安装软件
vim /etc/named.conf ##修改配置文件
**********
修改:
listen-on port 53 { any; };
allow-query { any; };
dnssec-validation no;
**********
vim /etc/named.rfc1912.zones ##修改配置文件
***********
添加:
zone "westos.com" IN {
type master;
file "westos.com.zone";
allow-update { none; };
};
zone "linux.com" IN {
type master;
file "linux.com.zone";
allow-update { none; };
};
***********
cp -p /var/named/named.localhost /var/named/westos.com.zone
vim westos.com.zone ##修改配置文件
***********
$TTL 1D
@ IN SOA dns.westos.com. root.westos.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.westos.com.
dns A 172.25.254.115
westos.com. MX 1 172.25.254.115.
***********
cp -p /var/named/westos.com.zone /var/named/linux.com.zone
vim linux.com.zone ##修改配置文件
************
$TTL 1D
@ IN SOA dns.linux.com. root.linux.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.linux.com.
dns A 172.25.254.115
linux.com. MX 1 172.25.254.215.
************
systemctl restart named ##重启服务
测试:
两台主机
一台主机名为mailwestos.com(),另一台主机名为maillinux.linux.com
两台主机同时修改 /etc/resolv.conf
为什DNS Server?因为在邮件发送过程中,需要把邮件地址的domain地址转化成IP地址,再去发送给对应的收件人
*********
nameserver 172.25.254.115
*********
dig -t mx westos.com
dig -t mx linux.com
在DNS主机
vim /etc/postfix/main.cf
76 myhostname = mailwestos.westos.com ##设置系统的主机名(指向真正的域名)
83 mydomain = westos.com ##设置域名(地址邮件主机所在的域)
99 myorigin = $mydomain ##设置由本机寄出的邮件所使用的域名或主机名称
116 inet_interfaces = all ##接受来自所有网的请求
164 mydestination = $myhostname, $mydomain, localhost ##指定发给本机的域名
systemctl restart postfix.service
在maillinux.linux.com主机中
76 myhostname = maillinux.linux.com
83 mydomain = linux.com
99 myorigin = $mydomain
113 inet_interfaces = all
116 #inet_interfaces = all
164 mydestination = $myhostname, $mydomain, localhost
systemctl restart postfix.service
测试:
都执行 systemctl stop firewalld 否则开着就不能收到别人发的信息
发送邮件
[root@mailwestos named]# mail root@westos.com
Subject: ww
ss
dd
.
EOT
[root@mailwestos named]# mailq
Mail queue is empty ##邮件发送出去了
[root@mailwestos named]# mail ##查看邮箱
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N 1 root Fri Mar 10 21:50 19/556 "ww"
##已经收到邮件
....
### 2、给邮件接收方设置别名
vim /etc/aliases
*******
94 admin: root
95 more: :include:/etc/postfix/users ##可以达到邮件群发,users文件中的用户都会收到
96 wang: root@linux.com
#注:前假后真
*******
vim /etc/postfix/users
********
root
student
********
postalias /etc/aliases ##创建别名数据库
systemctl restart postfix.service
测试:
给admin发,本地root用户会收到,给more发,本地用户root和student会收到,给wang发,root@linux.com会收到
例:
[root@mailwestos named]# mail wang
Subject: kil
sssssss
.
EOT
[root@maillinux Desktop]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N 1 root Fri Mar 10 22:28 24/873 "kil"
##### 邮件地址的伪装
#### 1、虚拟别名域的配置(入站地址伪装)
百度查找:
**********
使用虚拟别名域,可以将发给虚拟域的邮件实际投递到真实域的用户邮箱中;可以实现群组邮递的功能,即指定一个虚拟邮件地址,任何人发给这个邮件地址的邮件都将由邮件服务器自动转发到真实域中的一组用户的邮箱中。
这里的虚拟域可以是实际并不存在的域,而真实域既可以是本地域(即main.cf文件中的mydestination参数值中列出的域),也可以是远程域或Internet中的域。虚拟域是真实域的一个别名。实际上,通过一个虚拟别名表(virtual),实现了虚拟域的邮件地址到真实域的邮件地址的重定向。
编辑Postfix主配置文件/etc/postfix/main.cf,进行如下定义:
virtual_alias_domains = dzxx.cn
virtual_alias_maps = hash:/etc/postfix/virtual
参数virtual_alias_domains用来指定虚拟别名域的名称,参数virtual_alias_maps用来指定含有虚拟别名域定义的文件路径。
编辑配置文件/etc/postfix/virtual
在修改配置文件main.cf和virtual后,要使更改立即生效,应分别执行/usr/sbin目录下以下的两条命令。
postmap /etc/postfix/virtual
postfix reload
第1条命令用来将文件/etc/postfix/virtual生成Postfix可以读取的数据库文件/etc/postfix /virtual.db;第2条命令用于重新加载Postfix主配置文件main.cf文件。
**********
#在maillinux
vim /etc/postfix/virtual
*********
admin@qq.com root@linux.com
@yy.com @linux.com
前面时虚拟用户后面是系统用户,其实收邮件还是系统用户收发的,只是允许虚拟用户对其操作
*********
postconf -d | grep virtual
postmap /etc/postfix/virtual
postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"
systemctl restart postfix.service
[root@maillinux postfix]# mail root@yy.com
Subject: ss
n
.
EOT
[root@maillinux postfix]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N 1 root Wed Mar 15 07:08 18/536 "ss"
&
#### 2、出站地址伪装
在maillinux主机中,出站伪装
vim /etc/postfix/generic
**********
root@linux.com (真) root@qq.com(假,但是主DNS必须有该域名,且其A记录文件的邮件IP为@linux.com的IP)
**********
postconf -d | grep generic
postconf -e "smtp_generic_maps = hash:/etc/postfix/generic"
postmap /etc/postfix/generic
systemctl restart postfix.service
[root@maillinux Desktop]# mail root@westos.com
Subject: xiawu1
1111111
.
EOT
[root@mailwestos named]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N 1 root Sat Mar 11 00:50 21/735 "xiawu1"
& 1
Message 1:
From root@qq.com Sat Mar 11 00:50:19 2017
## 接收方显示来信为 root@qq.com,而不是@linux.com
#### 邮件接收服务,dovecot
在linux.com
yum install dovecot -y
vim /etc/dovecot/dovecot.conf
*********
24 protocols = imap pop3 lmtp ##使用的协议
48 login_trusted_networks = 0.0.0.0/0 ##允许登录的IP(所有)
49 disable_plaintext_auth = no ##使用名文登录
*********
vim /etc/dovecot/conf.d/10-mail.conf
*********
# %u - username
# %n - user part in user@domain, same as %u if there's no domain
# %d - domain part in user@domain, empty if there's no domain
# %h - home directory
30 mail_location = mbox:~/mail:INBOX=/var/mail/%u
*********
su - student
mkdir /home/student/mail/.imap -p
touch /home/student/mail/.imap/INBOX
注:如果没有创建目录和文件,则mutt软件无法登录,可以在/var/log/maillog中查看日志,显示没有上述目录和文件
systemctl restart dovecot
测试:
在测试机上安装 mutt 软件,该软件是linux的终端下的邮件客户端
mutt -f pop://student@172.25.254.116
进入后,输入密码,能看到该用户邮箱里的邮件
#### postfix+mysql
### 邮件接收
yum install dovecot-mysql mariadb-server.x86_64 httpd php php-mysql.x86_64 -y
systemctl restart httpd
vim /etc/my.cnf
********
10 skip-networking=1
********
systemctl restart mariadb
tar jxf /mnt/phpMyAdmin-3.4.0-all-languages.tar.bz2 ##解压
cp -rp /mnt/phpMyAdmin-3.4.0-all-languages /var/www/html/
mv /var/www/html/phpMyAdmin-3.4.0-all-languages/ /var/www/html/mysqladmin
cp /var/www/html/mysqladmin/config.sample.inc.php /var/www/html/mysqladmin/config.inc.php
vim /var/www/html/mysqladmin/config.inc.php
**********
17 $cfg['blowfish_secret'] = 'linux';
**********
mysql_secure_installation ##创建密码
在网页中登录:172.25.254.116/mysqladmin/,创建数据库 email ,在email 中创建表 mailuser(username,password,domain,maildir),在 mailuser 表中插入 数据(admin@redhat.com,123,redhat.com,/redhat.com/admin/(一定要加‘/’不然无法生成目录))
mysql -uroot -p ##登录数据库
##创建用户,并给其密码
MariaDB [(none)]> create user wang@localhost identified by 'wang';
##给用户授权
MariaDB [(none)]> grant insert,select on email.* to wang@localhost;
vim /etc/postfix/mysql-domain.cf
***********
hosts = localhost
user = wang
password = wang
dbname = email
table = mailuser
select_field = domain
where_field = domain
***********
vim /etc/postfix/mysql-mailbox.cf
***********
hosts = localhost
user = wang
password = wang
dbname = email
table = mailuser
select_field = maildir
where_field = username
***********
vim /etc/postfix/mysql-user.cf
***********
hosts = localhost
user = wang
password = wang
dbname = email
table = mailuser
select_field = username
where_field = username
***********
#注:这三个文件是postfix从mysql中查询数据用的
用postmap检测配置是否正确
postmap -q "admin@redhat.com" mysql:/etc/postfix/mysql-user.cf
postmap -q "redhat.com" mysql:/etc/postfix/mysql-domain.cf
postmap -q "admin@redhat.com" mysql:/etc/postfix/mysql-mailbox.cf
groupadd -g 888 vmail
useradd -u 888 -g 888 vmail
修改配置文件 /etc/postfix/main.cf
virtual_gid_maps = static:888
virtual_uid_maps = static:888
virtual_mailbox_maps = mysql:/etc/postfix/mysql-mailbox.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-domain.cf
virtual_mailbox_base = /home/vmail
virtual_alias_maps = mysql:/etc/postfix/mysql-user.cf
测试:
给虚拟用户 admin@redhat.com 发邮件,能够成功发出,并且可以在/home/vmail/redhat.com/admin/new/ 中查看到邮件。
但是,用户现在还没有发送邮件的服务,我们还需要给虚拟用户配置dovecot服务,这样一个完整的虚拟用户服务就被创建出来了。
#### 虚拟用户发送邮件
vim /etc/dovecot/dovecot.conf
**********
48 login_trusted_networks = 0.0.0.0/0
49 disable_plaintext_auth = no
**********
vim /etc/dovecot/conf.d/10-mail.conf
**********
# %u - username
# %n - user part in user@domain, same as %u if there's no domain
# %d - domain part in user@domain, empty if there's no domain
# %h - home directory
30 mail_location = maildir:/home/vmail/%d/%n ##邮件存储目录
**********
vim /etc/dovecot/conf.d/10-auth.conf
**********
123 !include auth-sql.conf.ext ##支持数据库
**********
cp /usr/share/doc/dovecot-2.2.10/example-config/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext
**********
32 driver = mysql
71 connect = host=localhost dbname=email user=wang password=wang
78 default_pass_scheme = PLAIN
107 password_query = \
108 SELECT username, domain, password \
109 FROM mailuser WHERE username = '%u' AND domain = '%d'
125 user_query = SELECT maildir, 888 AS uid, 888 AS gid FROM mailuser WHER E username = '%u'
**********
systemctl restart dovecot.service
测试:
测试1:邮件服务器postfix是否正常运行
[root@foundation67 ~]# telnet 172.25.254.116 25
Trying 172.25.254.115...
Connected to 172.25.254.115.
Escape character is '^]'.
220 maillinux.linux.com ESMTP Postfix ##连接成功
测试2:dovecot是否正常运行
[root@foundation67 ~]# telnet 172.25.254.116 110
Trying 172.25.254.115...
Connected to 172.25.254.115.
Escape character is '^]'.
+OK [XCLIENT] Dovecot ready.
user wang@wang.com
+OK
pass 123
+OK Logged in.
打开软件雷鸟(自己安装),登录虚拟用户,在里面可以收发邮件
#### SMTP ####
###############
Postfix由postfix RPM包提供,并通过postfix服务脚本控制。它是一个由多个协同操作程序构成的模块
化程序,它的组件由master进程控制。
Postfix的主配置文件是/etc/postfix/main.cf,可以使用文本编辑器或postconf命令进行编辑。postconf
命令还可用于确定Postfix的所有当前和默认配置设置或逐项确定这些设置。
默认情况下,Postfix仅侦听来自本地主机的传入电子邮件。若要重新配置postfix以接收从远程主机发送的本地邮件,必须在/etc/postfix/main.cf中设置inet_interfaces = all
对电子邮件进行故障排除时,将在/var/log/maillog中保留所有与邮件相关的操作日志,其中包括关于
被事件和成功事件的信息。mailq命令(或postqueue -p)显示已排队的所有传出邮件的列表。若要尝试
再次立即发送所有已排队的邮件,可以运行postfix flush命令(或postqueue -f);否则,postfix将大
约每小时尝试重新发送一次,直至邮件被接受或过期。
mailq ##查看队列中的邮件(如果存在,则邮件未发送成功)
postqueue -f ##处理队列中的邮件
postsuper -d ID ##删除ID的邮件
>/var/spool/mail/root ##清空root用户邮件
postconf -d ##显示配置文件默认值
postconf -n ##显示配置文件不同于默认值的更改
postconf -e "..." ##更改配置
#### 1、基本电子邮件配置
配置DNS,主机IP:172.25.254.115
主机名:mailwestos.westos.com
systemctl stop firewalld.service ##关闭防火墙
hostnamectl set-hostname mailwestos.westos.com ##修改主机名
yum install bind -y ##安装软件
vim /etc/named.conf ##修改配置文件
**********
修改:
listen-on port 53 { any; };
allow-query { any; };
dnssec-validation no;
**********
vim /etc/named.rfc1912.zones ##修改配置文件
***********
添加:
zone "westos.com" IN {
type master;
file "westos.com.zone";
allow-update { none; };
};
zone "linux.com" IN {
type master;
file "linux.com.zone";
allow-update { none; };
};
***********
cp -p /var/named/named.localhost /var/named/westos.com.zone
vim westos.com.zone ##修改配置文件
***********
$TTL 1D
@ IN SOA dns.westos.com. root.westos.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.westos.com.
dns A 172.25.254.115
westos.com. MX 1 172.25.254.115.
***********
cp -p /var/named/westos.com.zone /var/named/linux.com.zone
vim linux.com.zone ##修改配置文件
************
$TTL 1D
@ IN SOA dns.linux.com. root.linux.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.linux.com.
dns A 172.25.254.115
linux.com. MX 1 172.25.254.215.
************
systemctl restart named ##重启服务
测试:
两台主机
一台主机名为mailwestos.com(),另一台主机名为maillinux.linux.com
两台主机同时修改 /etc/resolv.conf
为什DNS Server?因为在邮件发送过程中,需要把邮件地址的domain地址转化成IP地址,再去发送给对应的收件人
*********
nameserver 172.25.254.115
*********
dig -t mx westos.com
dig -t mx linux.com
在DNS主机
vim /etc/postfix/main.cf
76 myhostname = mailwestos.westos.com ##设置系统的主机名(指向真正的域名)
83 mydomain = westos.com ##设置域名(地址邮件主机所在的域)
99 myorigin = $mydomain ##设置由本机寄出的邮件所使用的域名或主机名称
116 inet_interfaces = all ##接受来自所有网的请求
164 mydestination = $myhostname, $mydomain, localhost ##指定发给本机的域名
systemctl restart postfix.service
在maillinux.linux.com主机中
76 myhostname = maillinux.linux.com
83 mydomain = linux.com
99 myorigin = $mydomain
113 inet_interfaces = all
116 #inet_interfaces = all
164 mydestination = $myhostname, $mydomain, localhost
systemctl restart postfix.service
测试:
都执行 systemctl stop firewalld 否则开着就不能收到别人发的信息
发送邮件
[root@mailwestos named]# mail root@westos.com
Subject: ww
ss
dd
.
EOT
[root@mailwestos named]# mailq
Mail queue is empty ##邮件发送出去了
[root@mailwestos named]# mail ##查看邮箱
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N 1 root Fri Mar 10 21:50 19/556 "ww"
##已经收到邮件
....
### 2、给邮件接收方设置别名
vim /etc/aliases
*******
94 admin: root
95 more: :include:/etc/postfix/users ##可以达到邮件群发,users文件中的用户都会收到
96 wang: root@linux.com
#注:前假后真
*******
vim /etc/postfix/users
********
root
student
********
postalias /etc/aliases ##创建别名数据库
systemctl restart postfix.service
测试:
给admin发,本地root用户会收到,给more发,本地用户root和student会收到,给wang发,root@linux.com会收到
例:
[root@mailwestos named]# mail wang
Subject: kil
sssssss
.
EOT
[root@maillinux Desktop]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N 1 root Fri Mar 10 22:28 24/873 "kil"
##### 邮件地址的伪装
#### 1、虚拟别名域的配置(入站地址伪装)
百度查找:
**********
使用虚拟别名域,可以将发给虚拟域的邮件实际投递到真实域的用户邮箱中;可以实现群组邮递的功能,即指定一个虚拟邮件地址,任何人发给这个邮件地址的邮件都将由邮件服务器自动转发到真实域中的一组用户的邮箱中。
这里的虚拟域可以是实际并不存在的域,而真实域既可以是本地域(即main.cf文件中的mydestination参数值中列出的域),也可以是远程域或Internet中的域。虚拟域是真实域的一个别名。实际上,通过一个虚拟别名表(virtual),实现了虚拟域的邮件地址到真实域的邮件地址的重定向。
编辑Postfix主配置文件/etc/postfix/main.cf,进行如下定义:
virtual_alias_domains = dzxx.cn
virtual_alias_maps = hash:/etc/postfix/virtual
参数virtual_alias_domains用来指定虚拟别名域的名称,参数virtual_alias_maps用来指定含有虚拟别名域定义的文件路径。
编辑配置文件/etc/postfix/virtual
在修改配置文件main.cf和virtual后,要使更改立即生效,应分别执行/usr/sbin目录下以下的两条命令。
postmap /etc/postfix/virtual
postfix reload
第1条命令用来将文件/etc/postfix/virtual生成Postfix可以读取的数据库文件/etc/postfix /virtual.db;第2条命令用于重新加载Postfix主配置文件main.cf文件。
**********
#在maillinux
vim /etc/postfix/virtual
*********
admin@qq.com root@linux.com
@yy.com @linux.com
前面时虚拟用户后面是系统用户,其实收邮件还是系统用户收发的,只是允许虚拟用户对其操作
*********
postconf -d | grep virtual
postmap /etc/postfix/virtual
postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"
systemctl restart postfix.service
[root@maillinux postfix]# mail root@yy.com
Subject: ss
n
.
EOT
[root@maillinux postfix]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N 1 root Wed Mar 15 07:08 18/536 "ss"
&
#### 2、出站地址伪装
在maillinux主机中,出站伪装
vim /etc/postfix/generic
**********
root@linux.com (真) root@qq.com(假,但是主DNS必须有该域名,且其A记录文件的邮件IP为@linux.com的IP)
**********
postconf -d | grep generic
postconf -e "smtp_generic_maps = hash:/etc/postfix/generic"
postmap /etc/postfix/generic
systemctl restart postfix.service
[root@maillinux Desktop]# mail root@westos.com
Subject: xiawu1
1111111
.
EOT
[root@mailwestos named]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N 1 root Sat Mar 11 00:50 21/735 "xiawu1"
& 1
Message 1:
From root@qq.com Sat Mar 11 00:50:19 2017
## 接收方显示来信为 root@qq.com,而不是@linux.com
#### 邮件接收服务,dovecot
在linux.com
yum install dovecot -y
vim /etc/dovecot/dovecot.conf
*********
24 protocols = imap pop3 lmtp ##使用的协议
48 login_trusted_networks = 0.0.0.0/0 ##允许登录的IP(所有)
49 disable_plaintext_auth = no ##使用名文登录
*********
vim /etc/dovecot/conf.d/10-mail.conf
*********
# %u - username
# %n - user part in user@domain, same as %u if there's no domain
# %d - domain part in user@domain, empty if there's no domain
# %h - home directory
30 mail_location = mbox:~/mail:INBOX=/var/mail/%u
*********
su - student
mkdir /home/student/mail/.imap -p
touch /home/student/mail/.imap/INBOX
注:如果没有创建目录和文件,则mutt软件无法登录,可以在/var/log/maillog中查看日志,显示没有上述目录和文件
systemctl restart dovecot
测试:
在测试机上安装 mutt 软件,该软件是linux的终端下的邮件客户端
mutt -f pop://student@172.25.254.116
进入后,输入密码,能看到该用户邮箱里的邮件
#### postfix+mysql
### 邮件接收
yum install dovecot-mysql mariadb-server.x86_64 httpd php php-mysql.x86_64 -y
systemctl restart httpd
vim /etc/my.cnf
********
10 skip-networking=1
********
systemctl restart mariadb
tar jxf /mnt/phpMyAdmin-3.4.0-all-languages.tar.bz2 ##解压
cp -rp /mnt/phpMyAdmin-3.4.0-all-languages /var/www/html/
mv /var/www/html/phpMyAdmin-3.4.0-all-languages/ /var/www/html/mysqladmin
cp /var/www/html/mysqladmin/config.sample.inc.php /var/www/html/mysqladmin/config.inc.php
vim /var/www/html/mysqladmin/config.inc.php
**********
17 $cfg['blowfish_secret'] = 'linux';
**********
mysql_secure_installation ##创建密码
在网页中登录:172.25.254.116/mysqladmin/,创建数据库 email ,在email 中创建表 mailuser(username,password,domain,maildir),在 mailuser 表中插入 数据(admin@redhat.com,123,redhat.com,/redhat.com/admin/(一定要加‘/’不然无法生成目录))
mysql -uroot -p ##登录数据库
##创建用户,并给其密码
MariaDB [(none)]> create user wang@localhost identified by 'wang';
##给用户授权
MariaDB [(none)]> grant insert,select on email.* to wang@localhost;
vim /etc/postfix/mysql-domain.cf
***********
hosts = localhost
user = wang
password = wang
dbname = email
table = mailuser
select_field = domain
where_field = domain
***********
vim /etc/postfix/mysql-mailbox.cf
***********
hosts = localhost
user = wang
password = wang
dbname = email
table = mailuser
select_field = maildir
where_field = username
***********
vim /etc/postfix/mysql-user.cf
***********
hosts = localhost
user = wang
password = wang
dbname = email
table = mailuser
select_field = username
where_field = username
***********
#注:这三个文件是postfix从mysql中查询数据用的
用postmap检测配置是否正确
postmap -q "admin@redhat.com" mysql:/etc/postfix/mysql-user.cf
postmap -q "redhat.com" mysql:/etc/postfix/mysql-domain.cf
postmap -q "admin@redhat.com" mysql:/etc/postfix/mysql-mailbox.cf
groupadd -g 888 vmail
useradd -u 888 -g 888 vmail
修改配置文件 /etc/postfix/main.cf
virtual_gid_maps = static:888
virtual_uid_maps = static:888
virtual_mailbox_maps = mysql:/etc/postfix/mysql-mailbox.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-domain.cf
virtual_mailbox_base = /home/vmail
virtual_alias_maps = mysql:/etc/postfix/mysql-user.cf
测试:
给虚拟用户 admin@redhat.com 发邮件,能够成功发出,并且可以在/home/vmail/redhat.com/admin/new/ 中查看到邮件。
但是,用户现在还没有发送邮件的服务,我们还需要给虚拟用户配置dovecot服务,这样一个完整的虚拟用户服务就被创建出来了。
#### 虚拟用户发送邮件
vim /etc/dovecot/dovecot.conf
**********
48 login_trusted_networks = 0.0.0.0/0
49 disable_plaintext_auth = no
**********
vim /etc/dovecot/conf.d/10-mail.conf
**********
# %u - username
# %n - user part in user@domain, same as %u if there's no domain
# %d - domain part in user@domain, empty if there's no domain
# %h - home directory
30 mail_location = maildir:/home/vmail/%d/%n ##邮件存储目录
**********
vim /etc/dovecot/conf.d/10-auth.conf
**********
123 !include auth-sql.conf.ext ##支持数据库
**********
cp /usr/share/doc/dovecot-2.2.10/example-config/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext
**********
32 driver = mysql
71 connect = host=localhost dbname=email user=wang password=wang
78 default_pass_scheme = PLAIN
107 password_query = \
108 SELECT username, domain, password \
109 FROM mailuser WHERE username = '%u' AND domain = '%d'
125 user_query = SELECT maildir, 888 AS uid, 888 AS gid FROM mailuser WHER E username = '%u'
**********
systemctl restart dovecot.service
测试:
测试1:邮件服务器postfix是否正常运行
[root@foundation67 ~]# telnet 172.25.254.116 25
Trying 172.25.254.115...
Connected to 172.25.254.115.
Escape character is '^]'.
220 maillinux.linux.com ESMTP Postfix ##连接成功
测试2:dovecot是否正常运行
[root@foundation67 ~]# telnet 172.25.254.116 110
Trying 172.25.254.115...
Connected to 172.25.254.115.
Escape character is '^]'.
+OK [XCLIENT] Dovecot ready.
user wang@wang.com
+OK
pass 123
+OK Logged in.
打开软件雷鸟(自己安装),登录虚拟用户,在里面可以收发邮件