是否可以从MX查找中获取端口?

时间:2019-04-29 07:53:53

标签: python email networking smtp

我正在了解the proper way to send an email from Python code是什么。不过,我在understanding of MX lookup方面取得了一些进步:“ 知识之岛越大,奇观的海岸线越长”。

由于this answer,我可以使用以下代码段发送电子邮件(尽管发送到disposable mailbox):

import smtplib

from email.message import EmailMessage

message = EmailMessage()
message.set_content('Content of the message here.')
message['Subject'] = 'Mail sent from code'
message['From'] = 'whoever@whatever.com'
message['To'] = 'aloun36zmzazyxd3tyop@3mail.rocks'

smtplib.SMTP('mail.3mail.rocks:2525')
smtp_server.send_message(message)
smtp_server.quit()

这是我提供SMTP地址和端口(mail.3mail.rocks:2525)的方法:

  1. 3mail.rocks域的MX查找:

    • host -t mx 3mail.rocks

      3mail.rocks mail is handled by 10 mail.3mail.rocks.
      
  2. 然后我刚开始使用telnet mail.3mail.rocks xxx检查ports used by default,得出以下结果:

    • telnet mail.3mail.rocks 25

      Trying 89.38.99.80...
      telnet: connect to address 89.38.99.80: Connection refused
      telnet: Unable to connect to remote host
      
    • telnet mail.3mail.rocks 465

      Trying 89.38.99.80...
      telnet: connect to address 89.38.99.80: Operation timed out
      telnet: Unable to connect to remote host
      
    • telnet mail.3mail.rocks 587

      Trying 89.38.99.80...
      telnet: connect to address 89.38.99.80: Operation timed out
      telnet: Unable to connect to remote host
      
    • telnet mail.3mail.rocks 2525

      Trying 89.38.99.80...
      Connected to mail.3mail.rocks.
      Escape character is '^]'.
      220 node1 ESMTP Haraka 2.8.16 ready
      

    所以,这就是我找出所需端口的方式(本质上是通过蛮力)。

按照相同的步骤,我继续在另一个一次性邮件服务(mailforspam.com)上测试了我的代码段-返回了MX查找(host -t mx mailforspam.com):

mailforspam.com mail is handled by 10 mail2.mailforspam.com.
mailforspam.com mail is handled by 10 mail1.mailforspam.com.

尽管我无法通过telnet连接(我已经尝试将服务器mail2.mailforspam.commail1.mailforspam.com都连接到任何默认端口:端口25Connection refused,端口2525587465-Operation timed out

问题是:

  1. 如何确定服务器代表特定域(MX查找返回的域)接收邮件的正确端口?我的理解是“ default ”端口只是约定,实际上,服务器可以使用他们选择的任何可用端口。
  2. 我假设,当电子邮件从一个电子邮件提供商发送到另一电子邮件提供商时,它所提交的SMTP服务器(属于正在发送电子邮件的用户)执行类似的操作(即MX查找=>与邮件接收服务器的连接= >提交电子邮件)。这样的“ 真实世界”服务器如何确定正确的端口(或者它们只是通过默认端口强行强制使用)?

2 个答案:

答案 0 :(得分:2)

  

我如何找出服务器代表特定域(MX查找返回的域)接收邮件的正确端口?

您在问题中显示的内容或多或少是正确的。您可能想以其他顺序尝试端口。此外,从我所知的任何标准来看,端口2525都不是官方端口,但似乎是绕过阻止提交端口587的防火墙的惯例。

要注意的一件事是“接受邮件”实际上不是一件事。有执行“提交”的“邮件用户代理”和执行“传输”的“邮件传输代理”。 “提交”和“传输”通常位于不同的端口上,这解释了您所看到的一些多样性。确定您要提交还是进行传输,然后选择适当的端口组。

  

我在这里的理解是“默认”端口仅是约定,实际上,服务器可以使用他们选择的任何可用端口。

这不是真的,至少如果服务器希望任何人都能找到它们,至少不是这样,因为...

  

这样的“真实”服务器如何找出正确的端口(或者它们只是通过默认端口强行强制使用)?

实际上希望能够接收邮件的邮件服务器必须在标准端口号上运行。对于MTA,这意味着端口25可能会回退到465(尽管这也没有标准化)。对于MUA而言,这意味着端口587可能会回退到2525(也未标准化,但显然通常用作阻止MUA的解决方法)。

特别是,MX记录不包含任何端口信息,也不包含与SMTP相关的任何其他DNS记录类型。

答案 1 :(得分:1)

您获得的MX需要支持端口25,这是SMTP定义的一部分。如果您无法连接,则可能是该阻塞位于您自己的防火墙中—端口25出站端口已从消费级网络中被积极阻止,以遏制直接注入垃圾邮件。

授权服务器之间的端口25没有被阻塞,服务器没有理由或不需要找出其他端口号。