【问题标题】:Resolving gmail.com mail server解析 gmail.com 邮件服务器
【发布时间】:2012-01-28 05:37:46
【问题描述】:

我正在尝试使用 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 输出时的理解出错了。

【问题讨论】:

    标签: networking smtp dns telnet dig


    【解决方案1】:

    一般理论

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

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

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

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

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

    你试图做什么。

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

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

    【讨论】:

    • 我想你误解了我的端口验证服务器的事情(也许我应该明确提到我已经测试了开放端口的服务器名称)。我没有检查“gmail.com”中的开放端口。我检查了“alt1.gmail-smtp-in.l.google.com”端口 25 和 587,它们被 dig 报告为 gmail.com 的邮件服务器。我不打算从 gmail.com 发送电子邮件。假设我必须编写一个必须向 "username@gmail.com" 发送电子邮件的邮件客户端。我必须找到的第一件事是 gmail.com 的邮件服务器是什么。如何找到它。
    • 感谢您更新答案。我对 ISP 的端口阻塞几乎没有任何疑问。我可以连接到“smtp.gmail.com”的端口 25,但我无法连接到“alt1.gmail-smtp-in.l.google.com”的端口 25。那么,为什么 ISP 会阻止“alt1.gmail-smtp-in.l.google.com”的端口 25 而不是“smtp.gmail.com”。有什么方法可以查明 ISP 是否阻塞了某个端口(我怀疑“alt1.gmail-smtp-in.l.google.com”的端口 25 是否真的开放)。还有一个问题是,为什么MX记录中没有“smtp.gmail.com”的信息。
    • 您对 ISP 端口阻塞问题的看法是正确的。我尝试使用不同的 ISP 提供商连接到“alt1.gmail-smtp-in.l.google.com”服务器的 25 端口并且它是开放的。然而,一个问题仍然存在,为什么 MX 记录中不存在“smtp.gmail.com”。
    • @Talespin_Kit: smtp.gmail.com 不存在于 MX 记录中,因为 smtp.gmail.com 仅执行功能 #1,而 gmail.com 的 MX 记录仅包含有关执行功能的服务器的信息 # 2.
    猜你喜欢
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多