6

我正在尝试使用 dig 命令查找 gmail.com 邮件服务器,并使用 telnet 验证 dig 命令返回的结果。

$ dig gmail.com MX

; <<>> DiG 9.7.3 <<>> gmail.com MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54145
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;gmail.com.         IN  MX

;; ANSWER SECTION:
gmail.com.      800 IN  MX  10 alt1.gmail-smtp-in.l.google.com.
gmail.com.      800 IN  MX  20 alt2.gmail-smtp-in.l.google.com.
gmail.com.      800 IN  MX  30 alt3.gmail-smtp-in.l.google.com.
gmail.com.      800 IN  MX  40 alt4.gmail-smtp-in.l.google.com.
gmail.com.      800 IN  MX  5 gmail-smtp-in.l.google.com.

;; Query time: 14 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Tue Dec 27 02:09:50 2011
;; MSG SIZE  rcvd: 150

Dig 命令说“alt1.gmail-smtp-in.l.google.com”是邮件服务器之一。链接“alt1.gmail-smtp-in.1.google.com”的 smtp 端口 25 或 587 未打开(使用 telnet 验证)。但是链接http://support.google.com/mail/bin/answer.py?hl=en&answer=13287表示 smtp.gmail.com 是 gmail.com 的邮件服务器,端口 587 为它打开。为什么 dig 提供错误的电子邮件服务器,或者我在阅读 dig 输出时的理解出错了。

4

1 回答 1

17

一般理论

一般来说,SMTP 服务器有两个不同的功能,它们经常被混淆:发送邮件提交和接收来自其他网络的邮件。这两个功能使用相同的 SMTP 协议执行。通常这两个功能由同一台机器执行,历史上它们甚至可以在同一个端口上执行。所以很容易理解为什么人们将这两个功能混为一谈。

尽管这两个功能仍然使用相同的 SMTP 协议,但在同一个端口上执行这些功能变得越来越不真实(因为系统管理员通过阻止传出端口 25 流量来防止他们的客户发送垃圾邮件)。如今,SMTP 提交通常使用 SSL 加密,而在两个不同网络之间传输邮件仍以纯文本形式完成。由于 Google 网络的复杂性,如果这两个功能在不同的机器上执行,我不会感到惊讶。(免责声明:我在谷歌工作,但我对 GMail 的运作一无所知。)

  1. 外发邮件提交。当您从 GMail 发送电子邮件时,尤其是当您将 Evolution 等电子邮件客户端配置为从您的 gmail 帐户发送时,您必须配置一个 SMTP 服务器以用于发送您的邮件。您的电子邮件客户端直接与该 SMTP 服务器连接,该 SMTP 服务器负责将邮件发送到 Internet 上其他地方的正确位置。这通常使用特殊端口进行配置,并且需要登录信息,以便只有授权用户才能发送电子邮件。这是上面的支持链接正在处理的功能。您将电子邮件客户端配置为使用端口 587 上的域名smtp.gmail.com,我认为您的电子邮件客户端通过使用 DNSA记录进行普通域名查找来找到该服务器。

  2. 接收来自其他网络的电子邮件。将您的消息中继到其他网络的 SMTP 服务器查找MX记录gmail.com(在您的情况下,发现发送消息的位置是alt1.gmail-smtp-in.l.google.com)并将消息发送到该主机上的端口 25。这是您在 DIG 中查找的内容,并使用 telnet 进行了测试。

    alt1.gmail-smtp-in.l.google.com现在,当您尝试从消费者 Internet 连接进行远程登录时,为什么没有看到25 端口?gmail.com答案是,为了防止外发垃圾邮件,您的 ISP 会阻止端口 25 上的外发流量。因此,如果不通过 ISP 的 SMTP 服务器或其他需要登录并在端口 587 上提交的 SMTP 服务器,您就无法向端口 25 发送任何内容.

你试图做什么。

所以你正在尝试执行功能#2。您自己进行了 The MX 查找gmail.com,发现它对应于 server alt1.gmail-smtp-in.l.google.com。然后你尝试远程登录到 587 端口alt1.gmail-smtp-in.l.google.com。这不起作用,因为alt1.gmail-smtp-in.l.google.com没有在该端口上侦听(它只需要在端口 25 上侦听才能执行功能 #2)。然后你尝试远程登录到 25 端口alt1.gmail-smtp-in.l.google.com。这不起作用,因为您的 ISP 阻止了端口 25 上的传出连接。

要向 gmail.com 发送电子邮件,您需要做的是找到一个执行功能 #1 的服务器并通过那里发送您的电子邮件。或者,找一个不介意成为垃圾邮件天堂并且不阻止端口 25 上的传出流量的 ISP。(实际上,请不要。)

于 2011-12-27T00:34:22.967 回答