解析gmail.com邮件服务器



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

通论

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

虽然这两个功能仍然使用相同的SMTP协议,但在相同端口上执行的情况越来越少(因为系统管理员通过阻止发送端口25的流量来防止他们的客户发送垃圾邮件)。目前,SMTP提交通常使用SSL加密,而在两个不同的网络之间传输邮件仍然是纯文本的。鉴于谷歌网络的复杂性,如果这两个功能在不同的机器上执行,我不会感到惊讶。(免责声明:我为谷歌工作,但我不了解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进行测试的结果。

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

你想做什么。

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

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

最新更新