簡體   English   中英

使用oauth2通過googleapi gmail python發送電子郵件

[英]Send a email through googleapi gmail python using oauth2

我正在嘗試使用OAuth 2以用戶身份發送電子郵件。在Google的網站上, 他們聲明

本文檔定義了與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字符串的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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM