站点图标 Linux-技术共享

postfix&dovecot搭建邮件服务器

一个电子邮件系统应具有的三个主要组成构件,这就是用户代理、邮件服务器 ,以及邮件发送协议(如SMTP)和邮件读取协议(如POP3)。POP3是邮局协议 (Post Office Protocol)版本3

用户代理 UA(User Agent)就是用户与电子邮件系统的接口,在大多数情况下它就是运行在用户电脑中的一个程序。因此用户代理又称为电子邮件客户端软件 。用户代理向用户提供一个很友好的接口(目前主要是窗口界面)来发送和接收邮件。现在可供大家选择的用户代理有很多种。例如,微软公司的Outlook Express和我国张小龙制作的Foxmail,都是很受欢迎的电子邮件用户代理。

邮件传输过程

➊发件人调用计算机中的用户代理撰写和编辑要发送的邮件。

➋ 发件人点击屏幕上的“发送邮件”按钮,把发送邮件的工作全都交给用户代理来完成。用户代理把邮件用SMTP协议发给发送方邮件服务器,用户代理充当SMTP客户,而发送方邮件服务器充当SMTP服务器。用户代理所进行的这些工作,用户是看不到的。有的用户代理可以让用户在屏幕上看见邮件发送的进度显示。用户所使用的邮件服务器究竟在什么地方,用户并不知道,也不必要知道。实际上,用户在把写好的信件交付给用户代理后,就什么都不用管了。

➌ SMTP服务器收到用户代理发来的邮件后,就把邮件临时存放在邮件缓存队列中,等待发送到接收方的邮件服务器(等待时间的长短取决于邮件服务器的处理能力和队列中待发送的信件的数量。但这种等待时间一般都远远大于分组在路由器中等待转发的排队时间)。

➍ 发送方邮件服务器的SMTP客户与接收方邮件服务器的SMTP服务器建立TCP连接,然后就把邮件缓存队列中的邮件依次发送出去。邮件不会在互联网中的某个中间邮件服务器落地 。如果SMTP客户还有一些邮件要发送到同一个邮件服务器,那么可以在原来已建立的TCP连接上重复发送。如果SMTP客户无法和SMTP服务器建立TCP连接(例如,接收方服务器过负荷或出了故障),那么要发送的邮件就会继续保存在发送方的邮件服务器中,并在稍后一段时间再进行新的尝试。如果SMTP客户超过了规定的时间还不能把邮件发送出去,那么发送邮件服务器就把这种情况通知用户代理。

➎ 运行在接收方邮件服务器中的SMTP服务器进程收到邮件后,把邮件放入收件人的用户邮箱中,等待收件人进行读取。

➏ 收件人在打算收信时,就运行计算机中的用户代理,使用POP3(或IMAP)协议读取发送给自己的邮件。

以上摘录于《计算机网络》

邮件服务器的搭建

centos7下使用postfix+dovecot搭建邮件服务器(防火墙关闭,SELinux关闭下)


DNS服务器搭建

yum install bind bind-utils

查看是否安装成功

[root@localhost ~]# rpm -qa|grep bind

编辑主配置文件

[root@localhost ~]# vim /etc/named.conf

新建区域配置文件,新建的文件名要与include包含的文件名一至,且权限一至

编辑配置文件

配置正向查找区域,配置文件/var/named/named.mail.com,复制后的权限必须一至

配置反向查询文件

开启服务

如果报错请检查配置文件及权限

测试DNS

设置域名解析服务器为自己

搭建邮件服务器

配置服务器主机名称,需要保证服务器主机名称与发信域名保持一致

重启生效,记得重启域名服务及关闭防火墙

postfix

介绍:postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件

安装

yum install postfix

配置配置文件

vim /etc/postfix/main.cf

第83行,修改保存邮件的域名称

第99行,修改寄出邮件的域名称

第116、119行,修改定义的网卡监听地址

第164行,修改定义的可接收邮件的主机名或域名列表

新建两个用户用于测试

dovecot

介绍:dovecot是一款能够为Linux系统提供IMAP和POP3电子邮件服务的开源软件程序

yum install dovecot

编辑配置文件

vim /etc/dovecot/dovecot.conf

设置dovecot服务程序支持的电子邮件协议

允许用户使用明文进行密码验证

设置允许登录的网段地址

配置邮件格式和储存路径

vim /etc/dovecot/conf.d/10-mail.conf

开启服务

[root@mail ~]# systemctl start postfix
[root@mail ~]# systemctl start dovecot

可以看到邮件的存放位置,这是未发邮件前

发件测试

[root@mail mail]# telnet mail.com 25
Trying 127.0.0.1...
Connected to mail.com.
Escape character is '^]'.
220 mail.com ESMTP Postfix
helo mail.com             声名本机
250 mail.com
mail from:user1@mail.com  声明发件人
250 2.1.0 Ok
rcpt to:user2@mail.com     声明收件人
250 2.1.5 Ok
data                       写正文
354 End data with <CR><LF>.<CR><LF>
user1
.                           正文结束标记
250 2.0.0 Ok: queued as 12A27206C86E
quit                        退出
221 2.0.0 Bye
Connection closed by foreign host.

发件后,可以看到user2已经收到邮件

看一下内容

也可以登录查看邮件

[root@mail mail]# telnet mail.com 110
Trying 127.0.0.1...
Connected to mail.com.
Escape character is '^]'.
+OK Dovecot ready.
user user2             用户
+OK
pass 54321             密码
+OK Logged in.
list                   列表查看邮件
+OK 1 messages:
1 380
.
retr 1                  读取编号为1的邮件

遇到的问题

1、账号密码正确因权限问题被拒绝

报错

-ERR [SYS/PERM] Permission denied
Connection closed by foreign host.

解决

[root@mail mail]# chmod 0600 /var/spool/mail/*

端口介绍

SMTP 简单邮件传输协议 TCP 25端口 ,加密时使用TCP 456端口
POP3 第三版邮局协议  TCP  110端口 ,加密时使用955端口
IMAP4 第四版互联网消息访问协议 TCP 143端口 , 加密时使用993端口

防火墙开启情况下允许端口通过

firewall-cmd  -add-port 25/tcp --permanent
firewall-cmd  -add-port 465/tcp --permanent
firewall-cmd  -add-port 110/tcp --permanen
firewall-cmd  -add-port 995/tcp --permanent
firewall-cmd  -add-port 143/tcp --permanent
firewall-cmd  -add-port 993/tcp --permanent
firewall-cmd  --reload 重启防火墙 

SMTP相关命令

helo
客户端为标识自己的身份而发送的命令(通常带域名)
mail from
标识邮件的发件人;以 mail from: 的形式使用
rcpt to 
标识邮件的收件人;以 rcpt to: 的形式使用
data
客户端发送的,用于启动邮件内容传输的命令
turn
允许客户端和服务器交换角色,并在相反的方向发送邮件,而不必建立新的连接
退出移动版