我正在了解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
)的方法:
对3mail.rocks
域的MX查找:
host -t mx 3mail.rocks
3mail.rocks mail is handled by 10 mail.3mail.rocks.
然后我刚开始使用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.com
和mail1.mailforspam.com
都连接到任何默认端口:端口25
— Connection refused
,端口2525
,587
,465
-Operation timed out
。
问题是:
答案 0 :(得分:2)
我如何找出服务器代表特定域(MX查找返回的域)接收邮件的正确端口?
您在问题中显示的内容或多或少是正确的。您可能想以其他顺序尝试端口。此外,从我所知的任何标准来看,端口2525
都不是官方端口,但似乎是绕过阻止提交端口587
的防火墙的惯例。
要注意的一件事是“接受邮件”实际上不是一件事。有执行“提交”的“邮件用户代理”和执行“传输”的“邮件传输代理”。 “提交”和“传输”通常位于不同的端口上,这解释了您所看到的一些多样性。确定您要提交还是进行传输,然后选择适当的端口组。
我在这里的理解是“默认”端口仅是约定,实际上,服务器可以使用他们选择的任何可用端口。
这不是真的,至少如果服务器希望任何人都能找到它们,至少不是这样,因为...
这样的“真实”服务器如何找出正确的端口(或者它们只是通过默认端口强行强制使用)?
实际上希望能够接收邮件的邮件服务器必须在标准端口号上运行。对于MTA,这意味着端口25
可能会回退到465
(尽管这也没有标准化)。对于MUA而言,这意味着端口587
可能会回退到2525
(也未标准化,但显然通常用作阻止MUA的解决方法)。
特别是,MX记录不包含任何端口信息,也不包含与SMTP相关的任何其他DNS记录类型。
答案 1 :(得分:1)
您获得的MX需要支持端口25,这是SMTP定义的一部分。如果您无法连接,则可能是该阻塞位于您自己的防火墙中—端口25出站端口已从消费级网络中被积极阻止,以遏制直接注入垃圾邮件。
授权服务器之间的端口25没有被阻塞,服务器没有理由或不需要找出其他端口号。