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

问题描述 投票:1回答:2

我正在了解什么是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'] = '[email protected]'
message['To'] = '[email protected]'

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. 然后我开始用ports used by default检查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)上的代码片段,按照相同的步骤 - 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)到任何默认端口:端口25 - Connection refused,端口2525587465 - Operation timed out

问题是:

  1. 如何为代表特定域(MX查找返回的域)接收邮件的服务器找出正确的端口?我的理解是“默认”端口只是约定,事实上,服务器可以使用他们选择的任何自由端口。
  2. 我假设当电子邮件从一个电子邮件提供商发送到另一个电子邮件提供商时,提交给它的SMTP服务器(一个属于发送电子邮件的用户)做类似的事情(即MX查找=>连接到邮件接受服务器=>提交一个电子邮件)。这些“真实世界”的服务器如何找出合适的端口(或者它们只是强制通过默认端口)?
python email networking smtp
2个回答
2
投票

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

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

有一点需要注意的是,“接受邮件”实际上并不是一回事。有“邮件用户代理”执行“提交”和“邮件传输代理”进行“转移”。 “提交”和“转移”通常生活在不同的港口,这解释了你所看到的一些多样性。弄清楚您是在进行提交还是转移,并选择适当的端口组。

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

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

这些“真实世界”的服务器如何找出合适的端口(或者它们只是强制通过默认端口)?

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

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


1
投票

您获得的MX需要支持端口25,这是SMTP定义的一部分。如果您无法连接,则可能是阻塞在您自己的防火墙中 - 端口25出站被强制阻止来自消费级网络,以试图抑制直接注入垃圾邮件。

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

© www.soinside.com 2019 - 2024. All rights reserved.