我尝试使用OAuth 2以用户身份发送电子邮件。在Google的网站上they state:
本文档定义了与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')
答案 0 :(得分:1)
在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))