不久前,我开始使用yagmail通过GMail使用OAuth2发送邮件。
我使用的代码很简单:
def send_with_yagmail(self):
yag = yagmail.SMTP(self.our_email, oauth2_file="/<path_to>/credentials.json")
yag.send(self.to_email, self.message_subject, contents=self.message_body)
有几天一切都很好,但突然Gmail停止发送邮件,堆栈跟踪显示以下内容:
...
return get_oauth_string(user, oauth2_info)
File "/usr/local/lib/p│ython3.9/site-packages/yagmail/oauth2.py", line 96, in get_oauth_string
access_token, expires_in = refresh_authorization(**oauth2_info)
File "/usr/local/lib/python3.9/site-packages/yagmail/oauth2.py", line 91, in refresh_authorization
response = call_refresh_token(google_client_id, google_client_secret, google_refresh_token)
File "/usr/local/lib/python3.9/site-packages/yagmail/oauth2.py", line 71, in call_refresh_token
response = urlopen(request_url, encoded_params).read().decode('UTF-8')
File "/usr/local/lib/python3.9/urllib/request.py", line 214, in urlopen
return opener.open(url, data, timeout)
File "/usr/local/lib/python3.9/urllib/request.py", line 523, in open
response = meth(req, response)
File "/usr/local/lib/python3.9/urllib/request.py", line 632, in http_response
response = self.parent.error(
File "/usr/local/lib/python3.9/urllib/request.py", line 561, in error
return self._call_chain(*args)
File "/usr/local/lib/python3.9/urllib/request.py", line 494, in _call_chain
result = func(*args)│Ju
File "/usr/local/lib/python3.9/urllib/request.py", line 641, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 400: Bad Request
我已经解决了这个问题,在我的机器上重新生成了credentials.json
,并上传到服务器,认为这是一个一次性的事件。它工作了几天,现在又停止工作了。所以我想知道:我应该怎么做才不用每隔几天就重新生成一次凭证?我的credentials.json看起来如下所示:
{
"email_address": "my.team@gmail.com",
"google_client_id": "74<blabla>0e1feov.apps.googleusercontent.com",
"google_client_secret": "GOCSP<blabla<kOz",
"google_refresh_token": "1//09<blabla>-2_dxZH8"
}
库使用刷新令牌的目的不是为了使我不必手动重新生成这个东西吗?
有谁能推荐一些可以做的事情吗?谢谢!
1条答案
按热度按时间umuewwlo1#
我遇到了同样的问题,你的应用程序是在“测试”模式与谷歌API?测试令牌有7天到期,这就是为什么你必须重新生成你的令牌。我找到了this answer,但在我改变我的状态为“生产中”后,它现在给我一个验证错误。根据这个页面,如果你使用Gmail,生产应用程序需要由谷歌验证,但我的凭据显示不需要验证,并且我没有看到请求验证的选项。是否需要创建新凭据?