邮件服务器工作原理
首先,看一下电子邮件在互联网上的投递流程:
- 发件人调用用户代理编辑要发送的邮件。
- 发件人点击”发送邮件“按钮,把发送邮件的工作全部交给用户代理来完成。用户代理通过SMTP协议将邮件发送给发送方的邮件服务器(在这个过程中,用户代理充当SMTP客户,而发送方的邮件服务器则充当SMTP服务器)。
- 发送方的邮件服务器收到用户代理发来的邮件后,就把收到的邮件临时存放在邮件缓存队列中,等待时机成熟的时候再把邮件发送到接收方的邮件服务器(等待时间的长短取决于邮件服务器的处理能力和队列中待发送的信件的数量 )。
- 若时机成熟了,发送方的邮件服务器则向接收方的邮件服务器发送邮件缓存中的邮件。在发送邮件之前,发送方的邮件服务器的SMTP客户与接收方的邮件服务器的SMTP服务器需要事先建立TCP连接,之后再将队列中的邮件发送出去。值得注意的是,邮件不会在因特网中的某个中间邮件服务器落地 。
- 接收邮件服务器中的SMTP服务器进程在收到邮件后,把邮件放入收件人的用户邮箱中,等待收件人进行读取。
- 收件人在打开收信时,运行在PC机中的用户代理,使用POP3(或IMAP)协议读取发送给自己的邮件。 注意,在这个过程中,收件人是POP3(或IMAP)客户,而接收邮件服务器则是POP3(或IMAP)服务器,箭头的方向是从邮件服务器指向接收用户,因为这是一个“拉 ”的操作 。
https://blog.csdn.net/suhuaiqiang_janlay/article/details/78765613
# Mail server与DNS之间的关系
当一封邮件要发送出去时,邮件主机会先分析那封邮件的目标主机的DNS,先取得MX(Mail eXchanger,邮件交换)标志(其中,MX标志可能会有多部主机),然后以最优先MX主机为准将邮件发送出去。所以,若要为用户提供指定testmail域的电子邮件系统,需要先在DNS服务器中增加A记录和MX记录。 @IN MX 10 mail.testmail.com mail IN A 192.168.200.20 配置解析记录后,主机名即为mail.testmail.com,而邮件域为@testmail.com。
# 邮件传输所需要的组件以及相关协议
(1)工作流程 邮件的正常传输是需要很多接口的,比如必须要先向某台邮件服务器注册,以取得一个合法的电子邮件权限后,才能够发送邮件出去。传输过程中包含了多个邮件重要组件。 (2)相关组件 MUA(Mial User Agent)邮件用户代理人 收取邮件主机的电子邮件,以及提供用户浏览与编写邮件 MTA(Mail Transfer Agent)邮件发送代理人 使用简单邮件传输协议(SMTP);转发邮件 MDA(Mail Delivery Agent)邮件传送代理人 分析由MTA所收到的邮件表头或内容等数据,来决定这封邮件的去向。 (3)邮件应用协议 简单邮件传输协议(SMTP): 用于发送或中转发出的电子邮件,占用tcp 25端口 第三版邮件协议(POP3): 用于把服务器上的邮件存储到本地主机,占用tcp110端口 第四版互联网信息访问协议(IMAP4): 用于再本地主机上访问邮件,占用tcp143端口
# 常用的邮件系统框架
一个最基础的电子邮件系统肯定要能提供发件服务和收件服务,为此需要使用基于SMTP协议的Postfix服务程序提供发件服务功能,并使用基于POP3协议的Dovecot服务程序提供收件服务功能,这样一来,用户就可以使用Outlook Express或Foxmail等客户端服务程序正常收发邮件了。 1、MTA服务器:Postfix 2、MRA服务器:Dvecot 3、MUA软件:客户端的收发邮件软件 应用Mail sever有两种主要方式:直接登录Linux主机来操作MTA,或者通过客户端的MUA软件来收发邮件。
# 安装和配置 Dovecot IMAP 和 POP3 服务器
Dovecot 是一个高性能邮件发送代理(MDA),专注于安全性。您可以使用 IMAP 或 POP3 兼容电子邮件客户端连接到 Dovecot 服务器,并读取或下载电子邮件。
# 安装 Dovecot
yum -y install dovecot
https://doc.dovecot.org/installation_guide/ (opens new window)
# 配置 Dovecot
dovecot
软件包提供主配置文件 /etc/dovecot/dovecot.conf
和 /etc/dovecot/conf.d/
目录中的多个配置文件。Dovecot 会在您启动服务时组合文件来构建配置。
多个配置文件的主要优点是对设置进行分组并提高可读性。如果您希望使用单个配置文件,可以维护 /etc/dovecot/dovecot.conf
中的所有设置,并从 该文件
中删除所有 include_try
语句。
https://doc.dovecot.org/configuration_manual/config_file/ (opens new window)
https://doc.dovecot.org/configuration_manual/basic_configuration/ (opens new window)
# 参考资料
- https://doc.dovecot.org/ (opens new window)
- https://docs.redhat.com/zh_hans/documentation/red_hat_enterprise_linux/9/html/deploying_mail_servers/index (opens new window)
# 名词解释
PAM(Pluggable Authentication Module)可插拔认证模块。
用Postfix构建的邮件系统至少有两种工作模式:
- 利用本地Linux账号进行邮件收发,比如本地系统有用户root或someone,那么就有root@example.com和someone@example.com两个email地址。
- 为了管理的方便和系统安全,Postfix的用户管理采用了虚拟用户方式,即Postfix单独设立了许多用户,他们各自在系统中映射有独立的硬盘空间。但同时这些用户又跟本地Linux系统内固有的真实账号没有关联。
以下是在CentOS上搭建邮件服务器的基本步骤和示例配置:
安装Postfix和Dovecot:
sudo yum -y install postfix dovecot
1配置Postfix(主配置文件位于
/etc/postfix/main.cf
):# 设置您的域名 myhostname = mail.example.com mydomain = example.com myorigin = $mydomain # 设置邮件存储路径 home_mailbox = Maildir/ # 指定允许的邮件大小 mailbox_size_limit = 0 message_size_limit = 104857600 # 用于发送邮件的网络接口 inet_interfaces = all # 允许的邮局协议 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain # 要转发的邮件域 relay_domains = * # 设置网络范围以允许接收邮件 mynetworks = 127.0.0.0/8 [::1]/128 # 启用SMTP认证 smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination # 重载配置 sudo postfix reload
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配置Dovecot(主配置文件位于
/etc/dovecot/dovecot.conf
):# 使POP3和IMAP可用 protocols = imap pop3 lmtp # 基于SASL的认证 disable_plaintext_auth = no # 设置邮件存储路径 mail_location = maildir:~/Maildir # 重启Dovecot服务 sudo systemctl restart dovecot
1
2
3
4
5
6
7
8
9
10
11确保Postfix和Dovecot服务开机自启:
sudo systemctl enable postfix sudo systemctl enable dovecot
1
2
3配置防火墙允许SMTP和IMAP服务:
sudo firewall-cmd --permanent --add-service=smtp sudo firewall-cmd --permanent --add-service=imap sudo firewall-cmd --reload
1
2
3测试邮件服务器:
使用如
telnet
或swaks
等工具来测试邮件服务器的发送和接收功能。使用telnet测试SMTP:
telnet localhost 25 helo mail.example.com mail from:<from@example.com> rcpt to:<to@example.com> data Subject: test test email . quit
1
2
3
4
5
6
7
8
9使用telnet或其他邮件客户端测试IMAP/POP3。