slm*_*slm 14
不,您不需要邮件服务器来发送邮件。我最熟悉 Sendmail,有 3 类功能可以将电子邮件作为服务来实现。MDA(邮件传递代理)为 1,MTA(邮件传输代理)为 2,3 为 MUA(邮件用户代理)。
术语令人困惑,但您不需要一直运行 MTA。每次 MUA ( mail
) 想要“发送”邮件时都会调用 MTA 。
当您运行mail
并指定要发送邮件的地址时,sam@example.com
. 邮件客户端将调用 MTA ( /usr/bin/sendmail
),然后它将查询该主机/域 (example.com) 的 DNS,并找出为其 MX 记录指定的值。MX 代表邮件交换器。
您可以使用以下dig
命令查看:
$ dig gnu.org mx
; <<>> DiG 9.7.4-P1-RedHat-9.7.4-2.P1.fc14 <<>> gnu.org mx
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21053
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2
;; QUESTION SECTION:
;gnu.org. IN MX
;; ANSWER SECTION:
gnu.org. 299 IN MX 10 eggs.gnu.org.
;; ADDITIONAL SECTION:
eggs.gnu.org. 299 IN A 208.118.235.92
eggs.gnu.org. 299 IN AAAA 2001:4830:134:3::10
;; Query time: 218 msec
;; SERVER: 192.168.1.8#53(192.168.1.8)
;; WHEN: Thu Oct 3 17:27:22 2013
;; MSG SIZE rcvd: 90
Run Code Online (Sandbox Code Playgroud)
因此,客户端将尝试通过端口 25 连接到 egg.gnu.org 以发送此电子邮件。
@puk 问了以下后续问题:
这是我本地机器上的 DNS 吗?
我回答说:
@puk - 它可以采用与邮件服务器相同的方式,但通常不是。查看您的/etc/resolv.conf
文件,当您运行该dig
命令时,您会注意到SERVER: ...
底部的一行。那是为您的请求提供服务的 DNS 服务器。
我的/etc/resolv.conf
文件包含以下内容:
nameserver 192.168.1.8
Run Code Online (Sandbox Code Playgroud)
和这样的查询,使用dig
:
$ dig gnu.org mx
Run Code Online (Sandbox Code Playgroud)
结果在底部:
;; Query time: 259 msec
;; SERVER: 192.168.1.8#53(192.168.1.8)
;; WHEN: Thu Oct 3 17:46:13 2013
;; MSG SIZE rcvd: 90
Run Code Online (Sandbox Code Playgroud)
对于精明的读者,我要问一个问题,这是如何配置的?答案是/etc/nsswitch.conf
文件。特别是这一行:
hosts: files mdns4_minimal [NOTFOUND=return] dns
Run Code Online (Sandbox Code Playgroud)
也就是说,首先使用文件 ( /etc/hosts
),然后使用mdns4_minimal
. 那是一个多播DNS。它基本上是以前查找的缓存。最后,它使用文件中指定dns
的 IP 地址。nameserver
/etc/resolv.conf
这实际上取决于mail
您使用的是哪个版本。
所有版本都需要一个 MTA 来实际发送邮件,但有些版本能够使用 SMTP 与远程 MTA(“智能主机”,例如您的 ISP 的邮件服务器)通信,而有些版本只能通过管道将邮件/usr/sbin/sendmail
发送到本地 MTA。
在后一种情况下,本地 MTA 可以是成熟的 MTA,如sendmail或exim或postfix。或者它可以是一个简单的只发送 MTA,如nullmailer或ssmtp。或者稍微复杂一点的迷你 MTA,比如msmtp,它也支持排队邮件以供以后交付。
在自由软件和开源世界中,mailx
包(提供mail
命令)有两个主要变体:bsd-mailx
和heirloom-mailx
.
bsd-mailx不会说 SMTP,只能通过管道发送邮件/usr/sbin/sendmail
hierloom-mailx可以将 SMTP 与智能主机以及传统的“管道到发送邮件”方法进行通信。
所以,回答你的问题“你需要邮件服务器吗?”。是的,有点。您需要一个,但是,根据您安装的邮件版本,您可能不必在自己的系统上安装和配置它。
IMO,您最好使用最小的 MTA,而msmtp
不是仅仅依靠智能主机,heirloom-mailx
因为当您的互联网连接中断或您的智能主机无法访问时,您仍然需要排队邮件以供稍后交付。随着本地队列,mail
并crond
和其他程序只需发送和忘记任何邮件。如果没有本地队列,如果智能主机不可用,他们必须以某种方式处理错误情况。