我正在了解什么是的旅程从 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
):
-
完成 MX 查找3mail.rocks
领域:
-
然后我就开始检查默认使用的端口 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
) 到任何默认端口: port25
— Connection refused
, ports 2525
, 587
, 465
— Operation timed out
.
问题是:
- 如何确定代表特定域(由 MX 查找返回的域)接受邮件的服务器的正确端口?我的理解是“default“端口只是约定,事实上,服务器可以使用它们选择的任何空闲端口。
- 我假设当电子邮件从一个电子邮件提供商发送到另一个电子邮件提供商时,它提交到的 SMTP 服务器(属于发送电子邮件的用户的服务器)会执行类似的操作(即 MX 查找 => 连接到邮件接受服务器 => 提交电子邮件)。怎么办这样的“真实世界“服务器找出正确的端口(或者它们只是通过默认端口进行暴力破解)?