1

我正在處理一個簡單的腳本通過GMail API發送電子郵件,而我發現訪問其SMTP接口的舊腳本無法正常工作。run_flow抱怨獲取其最少三個參數

所以我用下面的腳本從他們quickstart page與閱讀首先啓動:

#! /usr/bin/env python 
# 

import httplib2 

from apiclient.discovery import build 
from oauth2client.client import flow_from_clientsecrets 
from oauth2client.file import Storage 
from oauth2client.tools import run 

CLIENT_SECRET = '.client.json' 
OAUTH_SCOPE = 'https://www.googleapis.com/auth/gmail.readonly' 
STORAGE = Storage('gmail.storage') 

flow = flow_from_clientsecrets(CLIENT_SECRET, scope=OAUTH_SCOPE) 
http = httplib2.Http() 

credentials = STORAGE.get() 
if credentials is None or credentials.invalid: 
    credentials = run(flow, STORAGE, http=http) 

http = credentials.authorize(http) 

gmail_service = build('gmail', 'v1', http=http) 
threads = gmail_service.users().threads().list(userId='me').execute() 

if threads['threads']: 
    for thread in threads['threads']: 
     print 'Thread ID: %s' % (thread['id']) 

運行這一點讓NotImplementedError如圖this question

所以我導入並調用run_flow而不是run,因爲我沒有安裝gflags繼續。不過,我得到以下錯誤:

TypeError: run_flow() takes at least 3 arguments (3 given) 

我從鏈接的問題是​​應該幫助理解。我可以添加該問題使用的parser調用,但我不知道在命令行上傳遞什麼參數。

任何人都可以成功實施這個誰可以給予一些幫助?

+1

不知道「他們已停用SMTP接口」的意思,但我向你保證,谷歌還沒有禁用的SMTP接口。 :) – 2014-10-20 16:15:15

+0

嗯,當我寫這篇文章的時候,我感到很疲倦:P我想我的意思是說使用libsmtp連接到Google的舊Python腳本不再工作。 :P – icedwater 2014-10-21 01:30:52

回答

3

使用run_flow python時,不需要將額外的參數傳遞給命令行。

import argparse 
... 
from oauth2client import tools 
... 
from oauth2client.tools import run_flow 
... 
parser = argparse.ArgumentParser(parents=[tools.argparser]) 
flags = parser.parse_args() 
.... 
credentials = run_flow(flow, STORAGE, flags, http=http) 

然後你可以運行

python quickstart.py 
+0

這使我在登錄後出現了400錯誤,但至少這是進步。看起來我需要匹配'redirect_uri's。謝謝! – icedwater 2014-10-21 01:39:03