我试图从我的web应用程序启用Gmail IMAP访问。目前,用户可以授予对Web应用程序的访问权,成功检索并存储用户的令牌和秘密。但是,当我尝试检索电子邮件的IMAP连接进行身份验证,它提供了以下错误:Gmail IMAP身份验证 - imaplib.authenticate只需3个参数(4个给定)
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/[email protected]/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字符串是否可以解释为多个字符串,即不能正确转义?他们有斜线,下划线,加号,但没有逗号。
还有其他想法吗?
您是否尝试过使用oauth2 imaplib包装? '输入oauth2.clients.imap作为imaplib' – Acorn
'authenticate'是'conn'的一种方法,'self'是第一个参数,我想。 – kev
@Acorn似乎已经做到了。我仍然在玩这个游戏,不过无论出于何种原因,它并没有抛出同样的错误。 – tchaymore