繁体   English   中英

如何通过 2 因素身份验证从 python 发送 email?

[英]How can I send email from python with 2 Factor Authentication?

我创建了 python 文件,该文件可以使用打开的安全性较低的应用程序发送 email,但我需要将其关闭。 如何发送带有 2FA 的 email?

# import simple mail transfer protocol library
import smtplib 

# import EmailMessage method
from email.message import EmailMessage

contacts = ['<email@email.com>', '<email2@email.com>']
EMAIL_ADDRESS = '<my_gmail>'
EMAIL_PASSWORD = '<my_gmail_password>'

# Create empty Email Message object
msg = EmailMessage()
msg['Subject'] = 'Automated python email sender 5'
msg['From'] = EMAIL_ADDRESS
msg['To'] = contacts
msg.set_content('<sample_content>')

# contact manager we will make sure our connection is closed automatically without us doing it manually
# 465 is the port number for plain SMTP_SSL
# SMTP_SSL means you do not have to use ehlo() ans starttls()
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:

  smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
  smtp.send_message(msg)

我应该添加什么才能使 2FA 正常工作?

我相信您需要设置一个应用密码,以便您从不支持两步验证的设备上的应用登录您的 Google 帐户。 了解更多

它基本上是在用户 Google 帐户中设置的内容。

另一件事是显示验证码

如果这不起作用,您可能需要查看Xoauth2

如果你需要 2fa

如果你想支持 2fa,那么你不应该使用 SMTP 服务器,而应该通过 Gmail API 并使用 Oauth2,这将提示用户通过他们的谷歌帐户进行连接,谷歌将自己控制 2fa。 SMTP 服务器并非设计用于处理 2fa

尝试为您的 Gmail 设置应用密码。 并使用该应用程序密码进行 smtp 登录。

这将有助于设置 APP-Password

在安全性下,您必须为您的应用程序生成密码:

server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login('demo@gmail.com', 'password generated by google')

server.sendmail('demo@gmail.com', 'demo@icloud.com', 'Mail sent from program')
print('Mail Sent')

如您所见,您输入了 email 但不是输入您自己的密码,而是输入谷歌为您的应用程序生成的密码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM