使用oauth2通过googleapi gmail python发送电子邮件



我正试图以用户身份使用OAuth 2发送电子邮件。在谷歌的网站上,他们声明:

本文档定义了用于IMAP AUTHENTICATE和SMTP AUTH命令的SASL XOAUTH2机制。该机制允许使用OAuth 2.0访问令牌对用户的Gmail帐户进行身份验证。

使用oauth2.py中提供的测试

smtp_conn = smtplib.SMTP('smtp.gmail.com', 587)
smtp_conn.set_debuglevel(True)
smtp_conn.ehlo('test')
smtp_conn.starttls()
smtp_conn.docmd('AUTH', 'XOAUTH2 ' + base64.b64encode(auth_string))

在那里,你可以测试是否可以使用提供的访问令牌连接到他们的smtp服务器,它成功了,但当我尝试使用sendmail发送电子邮件时,我失败了。

如果我添加smtp_conn.sendmail('from@test.com', 'to@test.com', 'msg'),它表示我需要进行身份验证。

在文档中,当我发送带有所需身份验证字符串的AUTH命令时,我是否没有进行身份验证?

谢谢。

更新*

所以很明显,如果我在try-catch语句的catch中重新进行身份验证,它会起作用。。有什么想法吗?

try:
smtp_conn.sendmail('fromt@test.com', 'to@test.com', 'cool')
except:
smtp_conn.docmd('AUTH', 'XOAUTH2 ' + base64.b64encode(auth_string))
smtp_conn.sendmail('from@test.com', 'to@test.com', 'cool')

在starttls之后需要另一个ehlo调用。因此:

smtp_conn = smtplib.SMTP('smtp.gmail.com', 587)
smtp_conn.set_debuglevel(True)
smtp_conn.ehlo()
smtp_conn.starttls()
smtp_conn.ehlo()
smtp_conn.docmd('AUTH', 'XOAUTH2 ' + base64.b64encode(auth_string))

相关内容

  • 没有找到相关文章

最新更新