1.stmp基础知识
stmp即简单邮件传输协议,是用来发邮件的。他帮助每一台计算机在发送或者转信件时找到下一个目的地址。通过smtp协议所指定的服务器,就可以把邮件寄到收信人的服务器上。
发送邮件的几个动作:
转发:电子邮件服务器(MTA)将提交的邮件转发至另一个服务器,以进行发送。
排队:失败的发送或转发尝试排队等待,并由MTA定义重试。(默认情况下,Postfix每小时执行此操作一次)。
拒绝:在首次提交期间,电子邮件被电子邮件服务器拒绝。
退回:远程服务器接受电子邮件以进行发送以后,又将该电子邮件退回给始发电子邮件服务器或用户。
转发:电子邮件服务器(MTA)将提交的邮件转发至另一个服务器,以进行发送。
排队:失败的发送或转发尝试排队等待,并由MTA定义重试。(默认情况下,Postfix每小时执行此操作一次)。
拒绝:在首次提交期间,电子邮件被电子邮件服务器拒绝。
退回:远程服务器接受电子邮件以进行发送以后,又将该电子邮件退回给始发电子邮件服务器或用户。
mailq命令显示已排队的所有邮件。postqueue -f 刷新
2.开始配置postfix
由于配置邮件服务器需要dns 的mx记录。所以我之前已经弄好了dns服务器,并写了2个域。
第一个域sina的mail主机的信息如下
另一个域qq的mail主机的信息如下
下来修改配置文件。两边的配置文件都是大致相当的
在sina域中修改main.cf这个文件
[root@mail-sina named]# cd /etc/postfix/
[root@mail-sina postfix]# vim main.cf
分别修改myhostname,mydomain,myorigin,inet_interfs,mydestination这几个选项。
75 myhostname = host.mail-sina.sina.com
83 mydomain = sina.com
99 myorigin = sina.com
113 inet_interfaces = all
116 #inet_interfaces = localhost
164 mydestination = $myhostname, $mydomain, localhost
修改以上的行数的参数
顺便要注释116行
以上的参数的含义都是
myhostname 主机名
mudomain 域名
myorigin 发件人所在的域
inet_interfaces 监听所有网络接口
mydestination 指定邮件接收人的域。其实就是说你要就收哪些地方来的信件。比如所有sina.com的邮件就都得接收
配置完了之后。重启服务器
systemctl restart postfix
并关闭防火墙对smtp的限制
好了,同样的过程再在mail-qq这台主机再做一遍。
过程略。就是把上面的sina都改成qq就好
sina给qq发一封信
qq查看是否收到信件
信件内容的具体内容如下
&1
Message 1:
From root@sina.com Sun Dec 4 20:05:49 2016
Return-Path: <root@sina.com>
X-Original-To: root@qq.com
Delivered-To: root@qq.com
Date: Sun, 04 Dec 2016 20:05:14 +0800
To: root@qq.com
Subject: Love Letter
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: root@sina.com (root)
Status: R
360 love qq deeply
So and I
打开sina 的root 的邮件箱发现是可以收到邮件的。
1.也可以限制某个ip给mail-qq服务器发信。
(在qq(192.168.1.192)的上面设置拒绝sina的信件(192.168.1.234))
[root@mail-qq Desktop]# postconf -e "smtpd_client_restrictions = check_client_access hash:/etc/postfix/access" #postconf -e 是直接在main.cf后添加配置
然后在access那个文件的末尾添加一句
192.168.1.234 REJECT #192.168.1.234是要禁止的IP
再加密改文件。使用命令
[root@mail-qq postfix]# postmap /etc/postfix/access
配置完main.cf请重启一下postfix
[root@mail-sina ~]# mail root@qq.com
Subject: Hello
Hi
.
EOT
[root@mail-sina ~]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N 1 Mail Delivery System Mon Dec 5 17:28 75/2455 "Undelivered Mail Retu"
发完后发现被退信了,退信的详细信息点击1得
The mail system
<root@qq.com>: host mail.qq.com[192.168.1.192] said: 554 5.7.1
<unknown[192.168.1.234]>: Client host rejected: Access denied (in reply to
RCPT TO command)
2.也可以限制发信人
新建一个文件叫sender(当然是在/etc/postfix/目录下了)[root@mail-qq postfix]# postconf -e "smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/sender"
内容就是限制的用户
再加密一下就好了
[root@mail-qq postfix]# postmap sender
3.同样也可以限制收件人。
(recipient)
[root@mail-qq postfix]# postconf -e "smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/recipient"
新建一个文件叫recipient(当然是也在/etc/postfix/目录下了)
内容就是限制的用户
内容就是限制的用户
再postmap
空壳邮件。简单的说就是将邮件转发至真正处理这个邮件的服务器
背后真正的处理邮件的主机里配置
3.邮件接收服务器
dovecot是邮件接收用到的软件。使用的是imap和pop协议
其默认开启的是110/143/993/995端口
[root@mail-qq postfix]# yum -y install dovecot
Loaded plugins: fastestmirror, langpacks
base | 3.6 kB 00:00
c7-media | 3.6 kB 00:00
[root@mail-qq yum.repos.d]# netstat -atl
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:pop3 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:imap 0.0.0.0:* LISTEN
tcp 0 0 mail-qq.qq.com:domain 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:smtp 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:imaps 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:pop3s 0.0.0.0:* LISTEN
tcp 0 0 mail-qq.qq.com:42196 192.168.1.234:ssh ESTABLISHED
再配置文件中做如下改变
24 protocols = imap pop3 lmtp #24行的注释取消
49 disable_plaintext_auth =no #49行开启明文传输
在/etc/dovecot/conf.d目录下修改10-mail.conf这个文件
30 mail_location = mbox:~/mail:INBOX=/var/mail/%u #后写成这样子
重启服务
切换至news用户
[news@mail-qq ~]$ mkdir mail/.imap -p
[news@mail-qq ~]$ touch mail/.imap/INBOX
[news@mail-qq ~]$ pwd
/home/news
安装工具mutt 。使用yum -y install mutt
[news@mail-qq ~]$ mutt -f imap://news@192.168.1.192 #可以登录邮箱
4.使用Mysql+postfix+雷鸟
(做之前最好将main.cf恢复最开始的设置)
在数据库中建立一张表
MariaDB [Local_user]> desc muser;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(30) | NO | | NULL | |
| password | varchar(30) | NO | | NULL | |
| domain | varchar(30) | NO | | NULL | |
| maildir | varchar(50) | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
MariaDB [Local_user]> create user 'postfix'@'%' identified by '123';
Query OK, 0 rows affected (0.00 sec)
MariaDB [Local_user]> grant insert,update,delete,select on Local_user.muser to 'postfix'@'%';
Query OK, 0 rows affected (0.00 sec)
创建用户
MariaDB [Local_user]> insert into muser values ('admin@sina.com','123','sina','/sina.com/muser');
Query OK, 1 row affected (0.00 sec)
MariaDB [Local_user]> select * from muser;
+----------------+----------+--------+-----------------+
| username | password | domain | maildir |
+----------------+----------+--------+-----------------+
| admin@qq.com | 123 | qq.com | qq.com/muser |
+----------------+----------+--------+-----------------
创建一个用户去管理
[root@mail-qq etc]# id virtual
uid=1112(virtual) gid=1112(virtual) groups=1112(virtual)
再配置文件中添加如下语句。
[root@mail-qq etc]# postconf -e virtual_mailbox_base=/home/virtual
[root@mail-qq etc]# postconf -e virtual_uid_maps=static:1112
[root@mail-qq etc]# postconf -e virtual_gid_maps=static:1112
[root@mail-qq etc]# postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-domains.cf
[root@mail-qq etc]# postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-mailboxs.cf
[root@mail-qq etc]#
看看main.cf会出现下面的语句
再编写postfix查看数据库的三段内容的文件。就是那mysql-alias.cf mysql-domains.cf mysql-mailboxs.cf
这三个文件。就在这个/etc/postfix目录下编写
mysql-alias.cf
mysql-domains.cf
mysql-mailboxs.cf
可以测试一下,postfix是否可以通过uid为1112的virtual这个用户去拿mariadb中的postfix这个用户去访问数据库
[root@mailserver postfix]# postmap -q "admin@qq.com" mysql:/etc/postfix/mysql-alias.cf
admin@qq.com
[root@mailserver postfix]# postmap -q "qq.com" mysql:/etc/postfix/mysql-domains.cf
qq.com
[root@mailserver postfix]# postmap -q "admin@qq.com" mysql:/etc/postfix/mysql-mailboxs.cf
qq.com/muser
在/home/virtual下创建目录qq.com。注意所有人要改成virtual。发一封信给admin。现在我在sina这台主机上
现在是sina主机上(给qq的mariadb中的虚拟用户admin发信)
再在qq的主机上看看
很明显。现在需要一个客户端去访问查看自己的信件
我选用雷鸟当做自己的客户端软件。
103 !include auth-sql.conf.ext
49 disable_plaintext_auth =no
48 login_trusted_networks = 0.0.0.0/0
24 protocols = imap pop3 lmtp
添加如上信息在/etc/dovecot/dovecot.conf文件中
要复制一个sql.conf文件到/etc/dovecot这个目录下
那个例子文件在share中
[root@mail-qq dovecot]# cp /usr/share/doc/dovecot-2.2.10/example-config/dovecot-sql.conf.ext .
[root@mail-qq dovecot]# mv dovecot-sql.conf.ext dovecot-sql.conf
编辑这个dovecot-sql.conf这个配置文件
32 driver = mysql
71 connect = host=localhost dbname=Local_user user=postfix password=123
78 default_pass_scheme = PLAIN
125user_query = SELECT maildir, 1112 AS uid, 1112 AS gid FROM muser WHERE us ername = '%u'
107 password_query = \
108 SELECT username, domain, password \
109 FROM muser WHERE username = '%n' AND domain = '%d'
编辑/etc/dovecot/conf.d/10-mail.conf 设置邮件存储目录
30 mail_location = maildir:/home/virtual/%d/%n
安装驱动
[root@mail-qq dovecot]# yum -y install dovecot-mysql.x86_64
安装雷鸟。在应用商店里搜一下就出来了