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

我正在尝试使用OAuth 2以用户身份发送电子邮件.在Google的网站上they state

This document defines the SASL XOAUTH2 mechanism for use with the IMAP AUTHENTICATE and SMTP AUTH commands. This mechanism allows the use of OAuth 2.0 Access Tokens to authenticate to a user’s Gmail account.

使用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字符串的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))

转载注明原文:使用oauth2通过googleapi gmail python发送电子邮件 - 代码日志