Я пытаюсь включить доступ к Gmail IMAP из моего веб-приложения. Прямо сейчас пользователи могут предоставлять доступ к веб-приложению, успешно извлекая и сохраняя токен и секрет пользователя. Но когда я пытаюсь аутентифицировать соединение IMAP для получения электронной почты, выдается следующее сообщение:
TypeError: authenticate() takes exactly 3 arguments (4 given)
Вот код (очень простой):
import oauth2 as oauth
import imaplib
consumer = oauth.Consumer('token','secret')
token = oauth.Token('token','secret')
url = "https://mail.google.com/mail/b/username@gmail.com/imap/"
conn = imaplib.IMAP4_SSL('imap.googlemail.com')
conn.debug = 4
conn.authenticate(url,consumer,token)
Я попытался немного отступить, чтобы избежать действительной функции authenticate
, но безрезультатно:
imaplib.IMAP4_SSL.authenticate(conn,'XOAUTH',lambda x: oauth.build_xoauth_string(url,consumer,token))
Это дает мне похожий вывод:
29:03.17 > CMIK6 AUTHENTICATE XOAUTH
29:03.27 < CMIK5 BAD Too many arguments provided s68if10067716yhm.26
29:03.27 BAD response: Too many arguments provided s68if10067716yhm.26
Я не уверен, в чем может быть проблема. Почему функция authenticate
считает, что было 4 аргумента? Могут ли строки oauth быть интерпретированы как несколько строк, то есть не экранированы должным образом? У них есть косая черта, знак подчеркивания, знак плюс, но нет запятых.
Есть еще идеи?