[英]How do I now (since June 2022) send an email via Gmail using a Python script?
我有一个 Python 脚本可以做到这一点。 我必须在 Gmail 帐户中启用某些东西。 大概 3 年的时间里,脚本然后像这样运行:
import smtplib, ssl
...
subject = 'some subject message'
body = """text body of the email"""
sender_email = 'my_gmail_account_name@gmail.com'
receiver_email = 'some_recipient@something.com'
# Create a multipart message and set headers
message = MIMEMultipart()
message['From'] = 'Mike'
message['To'] = receiver_email
message['Subject'] = subject
# Add body to email
message.attach(MIMEText(body, 'plain'))
# Open file in binary mode
with open( client_zip_filename, 'rb') as attachment:
# Add file as application/octet-stream
# Email client can usually download this automatically as attachment
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
# Encode file in ASCII characters to send by email
encoders.encode_base64(part)
# Add header as key/value pair to attachment part
part.add_header(
'Content-Disposition',
f'attachment; filename={subject}',
)
# Add attachment to message and convert message to string
message.attach(part)
text = message.as_string()
# Log in to server using secure context and send email
context = ssl.create_default_context()
with smtplib.SMTP_SSL('smtp.gmail.com', 465, context=context) as server:
print( 'waiting to login...')
server.login(sender_email, password)
print( 'waiting to send...')
server.sendmail(sender_email, receiver_email, text)
print( 'email appears to have been sent')
今年 5 月左右,我收到了来自 Google 的消息,称使用脚本电子邮件的权限将被收紧。 “哦,亲爱的”,我想。
六月的某个时候,我发现上面的脚本不再起作用,并引发了一个异常,特别是在server.login(sender_email, password)
行:
...
File "D:\My documents\software projects\operative\sysadmin_py\src\job_backup_routine\__main__.py", line 307, in main
server.login(sender_email, password)
File "c:\users\mike\appdata\local\programs\python\python39\lib\smtplib.py", line 745, in login
raise last_exception
File "c:\users\mike\appdata\local\programs\python\python39\lib\smtplib.py", line 734, in login
(code, resp) = self.auth(
File "c:\users\mike\appdata\local\programs\python\python39\lib\smtplib.py", line 657, in auth
raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted.
Learn more at\n5.7.8 https://support.google.com/mail/?p=BadCredentials p14-20020aa7cc8e000000b00435651c4a01sm8910838edt.56 - gsmtp')
...因此,我对此并不完全感到惊讶,现在已经开始寻找解决方案。
我有这样的想法,前进的道路是所谓的“OAuth同意”(我不知道这是什么......)
我找到了这个答案并尝试按照那里的步骤进行操作。 这是我尝试执行第 1 步的说明:
我去了这个谷歌配置页面并选择了“my_gmail_account_name”,我想从中发送电子邮件的帐户......
新“项目”,名称:test-project-2022-07-18
位置:默认(“无组织”)
单击创建
点击下一步
点击启用
单击该图标以启用“Google Developer Console”
在汉堡菜单(左上角)有一个项目“APIs and services”...一个项目有“Credentials” - 点击
左侧列表中的一项是“OAuth 同意屏幕”
另一个项目是“凭据”。 点击这个:然后,在顶部,“+ CREATE CREDENTIALS”
在下拉菜单中,选择“OAuth 客户端 ID”
点击“配置同意屏幕”
单选按钮:“内部”和“外部”。 选择了后者。
点击“创建”
在“应用信息”下:
“应用程序名称”:sysadmin_py
“用户支持电子邮件”:my_gmail_account_name@gmail.com
“开发者联系方式”:my_gmail_account_name@gmail.com
点击“保存并继续”
然后在有关“范围”的页面上找到自己,并带有“添加或删除范围”按钮...
在这一点上,我打算按照“步骤 1”指令“d. Select 应用程序类型其他,输入名称“Gmail API 快速入门”并单击“创建”按钮”......但这种类型的视图中没有任何内容!
该答案的更新是在 2021 年 4 月完成的。 一年后,谷歌的界面似乎发生了根本性的变化。 或者,也许我走错了路,消失在一个兔子洞里。
我不知道该怎么做。 任何人都可以帮忙吗?
谷歌最近对不太安全的应用程序的访问进行了更改(在此处阅读: https://myaccount.google.com/lesssecureapps )。
为了使您的脚本再次工作,您需要为其设置一个新的应用程序密码。 这样做的指导如下:
(这里是同一页面的快速链接: https://myaccount.google.com/apppasswords )
(来源: https://www.emailsupport.us/blog/gmail-smtp-not-working/ )
只需切换脚本用于这个新生成的应用程序密码的密码。 这对我有用,我希望你也一样。
我希望这有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.