在Python中使用smtplib和Gmail的SMTP来发送电子邮件时,为什么不能更改发件人地址?

时间:2018-08-19 23:25:43

标签: python email smtp message smtplib

我目前正在尝试通过smtplib使用以下代码发送电子邮件:

import smtplib
import email.utils
from email.mime.text import MIMEText

smtpserver = smtplib.SMTP("smtp.gmail.com",587)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo()
smtpserver.login('username@gmail.com', 'pwd')
msg['Subject'] = "subject line"
msg['From'] = 'newusername@gmail.com'
msg['To'] = 'friend@gmail.com'
smtpserver.sendmail(sender, recipients, msg.as_string())

当我这样做时,收件人没有从newusername@gmail.com收到电子邮件,而是从username@gmail.com收到了电子邮件,这是我用于身份验证的电子邮件。

有办法改变吗?

1 个答案:

答案 0 :(得分:1)

这是gmail和其他名为SMTP AUTH的公共邮件服务器中的有意安全功能。

没有此功能,具有gmail地址的任何人都可以发送模拟其他人的gmail地址的邮件。我可以发送一条声称来自您的消息,而收件人将无法知道它不是您发出的,您也无法证明它不是您发出的。

但是无论如何都没关系,因为垃圾邮件发送者使用您的地址发送的电子邮件比您发送的电子邮件多得多,因此电子邮件地址实际上是毫无意义的,整个电子邮件系统将崩溃。这在90年代后期几乎发生了。只有协调一致的活动才能在所有打开的提交服务器上要求SMTP AUTH,包括将不符合要求的服务器(甚至包括使用POP-SMTP前,IMAP-SMTP,IP / MAC验证或其他方法的服务器)中的所有邮件都列入黑名单SMTP AUTH的替代方法)设法阻止垃圾邮件发送者破坏一切。

后来,又添加了另一种称为DKIM的安全/反垃圾邮件措施,gmail也使用了该措施:大多数服务器都会丢弃未由原始服务器签名的任何消息,表明该服务器信任该消息已到来它说的是谁的。显然,gmail不会证明邮件实际上来自newusername时是来自username的消息。 1 而且,如果确实如此,则管理其他服务器的人会只是黑名单的gmail签名是没有意义的。


1。除非他们有理由相信username有权以newusername的身份发送邮件,否则企业邮件服务器有时 do 具有这样的功能,允许您进行配置,例如,秘书可以从其老板的地址发送邮件而无需提供其老板的密码。