1

Я работаю над простым скриптом для отправки электронных писем через API GMail, а старый скрипт, который я нашел для доступа к их интерфейсу 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) 

Я понимаю, из связанного вопроса, argparse должно помочь. Я мог бы добавить вызов к parser, который использует этот вопрос, но я бы не знал, какие аргументы передать в командной строке.

Кто-нибудь успешно реализовал что-то с этим, кто мог бы помочь?

+1

не уверен, что «они отключили их интерфейс SMTP» означает, но я уверяю вас, Google не отключил их SMTP-интерфейс. :) –

+0

Хмм, я устал, когда писал это: P Я думаю, что я хотел сказать, что старый скрипт Python, связанный с Google с использованием libsmtp, больше не работает. : P – icedwater

ответ

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

Смежные вопросы