是否可以通过 MX 查找获取端口?

2024-04-30

我正在了解什么是的旅程从 Python 代码发送电子邮件的正确方法 https://stackoverflow.com/questions/50695188/what-is-the-proper-way-to-actually-send-mail-from-python-code。我在这方面有了一些进步对MX查找的理解 https://stackoverflow.com/questions/55863162/what-addresses-are-exactly-returned-by-mx-lookup, 尽管: ”知识之岛越大,奇迹的海岸线就越长".

谢谢这个答案 https://stackoverflow.com/a/55865055/8554766,我能够发送电子邮件(至一次性邮箱 https://en.wikipedia.org/wiki/Disposable_email_address不过),使用以下代码片段:

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'] = '[email protected] /cdn-cgi/l/email-protection'
message['To'] = '[email protected] /cdn-cgi/l/email-protection'

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

以下是我如何得出 SMTP 地址和端口(mail.3mail.rocks:2525):

  1. 完成 MX 查找3mail.rocks领域:

    • host -t mx 3mail.rocks

      3mail.rocks mail is handled by 10 mail.3mail.rocks.
      
  2. 然后我就开始检查默认使用的端口 https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol#Ports, with telnet mail.3mail.rocks xxx,这给了我以下结果:

    • 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 https://www.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.com and mail1.mailforspam.com) 到任何默认端口: port25Connection refused, ports 2525, 587, 465Operation timed out.

问题是:

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

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

您在问题中所显示的内容或多或少是正确的。您可能想以不同的顺序尝试端口。另外,端口2525不是我所知道的任何标准的官方端口,但似乎是绕过阻止提交端口的防火墙的约定587.

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

我的理解是,“默认”端口只是约定,事实上,服务器可以使用它们选择的任何空闲端口。

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

这样的“现实世界”服务器如何找出正确的端口(或者它们只是通过默认端口进行暴力破解)?

真正希望能够接收邮件的邮件服务器必须在标准端口号上运行。对于 MTA 来说,这意味着端口25也许可以回退到465(尽管这也没有标准化)。对于 MUA 来说,这意味着端口587也许可以回退到2525(也没有标准化,但显然普遍用作阻止 MUA 的解决方法)。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以通过 MX 查找获取端口? 的相关文章

随机推荐