Как я могу отправить электронное письмо с Python с двухфакторной аутентификацией?
Я создал файл python, который может отправлять электронную почту с использованием менее безопасных приложений, которые включены, но мне это нужно. Как я могу отправлять электронную почту с 2FA?
# 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)
Что нужно добавить, чтобы двухфакторная аутентификация работала?
3 ответа
Я считаю, что вам нужно будет настроить пароли приложений, чтобы вы могли входить в свою учетную запись Google из приложений на устройствах, которые не поддерживают двухэтапную аутентификацию. Учить больше
Это в основном то, что настраивается в учетной записи Google пользователей.
Еще одна вещь, на которую стоит обратить внимание, - это отображать капчу.
если это не сработает, вам может потребоваться изучить Xoauth2
если вам нужен 2fa
Если вы хотите поддерживать 2fa, вам не следует использовать SMTP-сервер, а следует использовать API Gmail и Oauth2, который предложит пользователю подключиться через свою учетную запись Google, а Google будет сам управлять 2fa. SMTP-серверы не предназначены для обработки 2fa
В целях безопасности вы должны сгенерировать пароль для своего приложения:
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')
как видите, вы вводите свой адрес электронной почты, но вместо ввода собственного пароля вы вводите пароль, сгенерированный Google для вашего приложения.
Попробуйте настроить пароль приложения для своего Gmail. и использовал этот пароль приложения для входа в smtp.
Это поможет настроить APP-пароль