我正在尝试使用 Ruby 中的 XOAUTH2 通过 IMAP 访问我的 Gmail 电子邮件。
oauth2
通过使用 OAuth 2.0 和gem进行身份验证,我成功生成了访问令牌(和刷新令牌) 。我将使用gmail_xoauth
通过 IMAP 访问 Gmail。所以我现在需要根据Gmail XOAuth2 文档生成 SASL 初始客户端响应:
The SASL XOAUTH2 initial client response has the following format:
base64("user=" {User} "^Aauth=Bearer " {Access Token} "^A^A")
using the base64 encoding mechanism defined in RFC 4648.
^A represents a Control+A (\001).
我不清楚我如何在我的字符串中表示“Control+A”。我只是使用^A
吗?
key = Base64.encode64("user=#{email}^Aauth=Bearer #{access_token_obj.token}^A^A")
此 python 脚本用于\1
代替^A
. 我也试过了\001
。无论我尝试什么,在验证(在 irb 中)时,我得到的结果是:
>> imap = Net::IMAP.new('imap.gmail.com', 993, usessl=true, certs=nil, verify=false)
>> imap.authenticate('XOAUTH2', email, key)
OpenSSL::SSL::SSLError: SSL_write:: bad write retry
该错误可能完全不相关,但我不相信我尝试过的任何选项都是正确的。