如何使用smtplib库在Python中伪造电子邮件发件人?

3

我在浪费生命中的另一天,瞎折腾Python,思考如何使用Python中的smtplib伪造电子邮件地址。我认为可以通过使用下面的代码来伪造发件人地址,但它不起作用。我看过GitHub上的项目,似乎能够实际伪造电子邮件,但如果我要创建自己的程序来执行此操作,它会如何工作?有什么想法吗? 代码:

import smtplib

username = (mygmailusername)
password = (mypassword)
fakefrom = "donaldtrump@gmail.com"
toEmail = (toAddress)

server = smtplib.SMTP("smtp.gmail.com",587)
server.starttls()
server.login(username,password)
server.sendmail(fakefrom,toEmail,"this is the fbi. OPEN UP")
server.close()

原则上你的代码应该可以工作。但实际上,我怀疑大多数大规模商业电子邮件提供商不会允许它存在,因为他们不想被视为帮助垃圾邮件发送者。 - snakecharmerb
2个回答

0

抱歉我有点晚了。问题在于倒数第二行:

server.sendmail(fakefrom,toEmail,"this is the fbi. OPEN UP")

您正在尝试使用“伪造发件人”地址来实际发送电子邮件,这不是您想要做的。您只想“欺骗”它,并使收件人认为电子邮件来自不同的地址。您可以通过在消息正文中定义发件人详细信息来实现此目的。

要使此功能正常工作所需使用的代码如下:

import smtplib

username = (mygmailusername)
password = (mypassword)

fake_from = "donaldtrump@gmail.com"
fake_name = "Donald Trump"

to_email = (toAddress)
to_name = (toName)

subject = "Bonjour"
content = "This is the fbi. OPEN UP"

message = f"From: {fake_name} <{fake_from}>\nTo: {to_name} <{to_email}>\nSubject: {subject}\n\n{content}"

server = smtplib.SMTP("smtp.gmail.com", 587)
server.starttls()
server.login(username, password)
server.sendmail(username, to_email, message.encode())
server.close()

0

大多数提供商会使用发件人地址检查帐户,如果发件人地址与发送方不匹配,则禁止。如果您有一个设置框网络,请尝试在SMTP 25端口上在未经身份验证的情况下使用您的提供商网络SMTP服务器,并且大多数时间可以发送邮件。但是,使用该方法,许多接收服务器将直接将此邮件标记为垃圾邮件/危险邮件。您可以在消息工具(Outlook等)中直接尝试此操作,这与您的代码行为相同。


你的意思是通过 Telnet 吗? - johnny old boy
您也可以使用telnet smtp_server 25 rcpt from:email_sender rcpt to:email_receiver your text and . to finish来复制此操作。 - Patrice G

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接