"less secure app" 删除后如何使用 imaplib 阅读 gmail。 (或替代方案)在 AWS 上托管时
How to read gmail with imaplib after "less secure app" removed. (or alternatives) when hosted on AWS
我正在使用一个简单的脚本,它使用 imaplib 读取我的 gmail,使用我的用户名和密码以及“不太安全的应用程序”Gmail 选项。 Gmail 将于 5 月 20 日禁用“不太安全的应用程序”选项,因此我需要在此之前修复登录凭据。
我已经关注 this tutorial 关于使用 Oauth2,但问题是脚本不是 运行ning 在本地(运行ning 在 AWS ubuntu 20.04 上) , 所以我无法在有运行ning脚本的机器上打开web认证,登录失败
更准确地说,当我 运行 教程代码时,我得到以下内容:
Please visit this URL to authorize this application: https://accounts.google.com/o/oauth2/...
我无法在 AWS 命令行上打开那个 URL,并且无法在我的本地计算机上登录(它使用凭据重定向到本地主机)。
我相信以下代码获得了带有凭据的 google 响应:
flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
我认为一种选择是在本地获取凭据 运行在脚本中或使用本地服务器捕获它们,然后将它们发送到 AWS,但如果它们过期,我将需要再次这样做可能这无论如何都行不通。
我的直觉告诉我这不是要走的路。有什么想法吗?
如果您想继续使用 imaplib,那么描述安全性较低的应用程序的最简单解决方法是切换到使用 apps pasword
这可能会继续工作,也可能不会继续工作,我们无法真正知道。
那个教程。
教程的工作方式是将用户的凭据存储在文件 token.pickle 中。如果该文件不存在,它会提示您对其进行授权。
# The file token.pickle contains the user access token.
# Check if it exists
if os.path.exists('token.pickle'):
# Read the token from the file and store it in the variable creds
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
# If credentials are not available or are invalid, ask the user to log in.
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
# Save the access token in token.pickle file for the next run
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
您可以做的是 运行 您的代码一旦获得 token.pickle 并确保在将其上传到 AWS 时包含该文件。
确保您的应用程序已投入生产,否则您的刷新令牌只会有效 7 天,届时它会停止工作。
My intuition says thats not the path to take. Any ideas?
除非这是 Google 工作区域电子邮件,否则真的没有其他选择。
我正在使用一个简单的脚本,它使用 imaplib 读取我的 gmail,使用我的用户名和密码以及“不太安全的应用程序”Gmail 选项。 Gmail 将于 5 月 20 日禁用“不太安全的应用程序”选项,因此我需要在此之前修复登录凭据。
我已经关注 this tutorial 关于使用 Oauth2,但问题是脚本不是 运行ning 在本地(运行ning 在 AWS ubuntu 20.04 上) , 所以我无法在有运行ning脚本的机器上打开web认证,登录失败
更准确地说,当我 运行 教程代码时,我得到以下内容:
Please visit this URL to authorize this application: https://accounts.google.com/o/oauth2/...
我无法在 AWS 命令行上打开那个 URL,并且无法在我的本地计算机上登录(它使用凭据重定向到本地主机)。
我相信以下代码获得了带有凭据的 google 响应:
flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
我认为一种选择是在本地获取凭据 运行在脚本中或使用本地服务器捕获它们,然后将它们发送到 AWS,但如果它们过期,我将需要再次这样做可能这无论如何都行不通。
我的直觉告诉我这不是要走的路。有什么想法吗?
如果您想继续使用 imaplib,那么描述安全性较低的应用程序的最简单解决方法是切换到使用 apps pasword
这可能会继续工作,也可能不会继续工作,我们无法真正知道。
那个教程。
教程的工作方式是将用户的凭据存储在文件 token.pickle 中。如果该文件不存在,它会提示您对其进行授权。
# The file token.pickle contains the user access token.
# Check if it exists
if os.path.exists('token.pickle'):
# Read the token from the file and store it in the variable creds
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
# If credentials are not available or are invalid, ask the user to log in.
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
# Save the access token in token.pickle file for the next run
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
您可以做的是 运行 您的代码一旦获得 token.pickle 并确保在将其上传到 AWS 时包含该文件。
确保您的应用程序已投入生产,否则您的刷新令牌只会有效 7 天,届时它会停止工作。
My intuition says thats not the path to take. Any ideas?
除非这是 Google 工作区域电子邮件,否则真的没有其他选择。