5

OAuth 2 を使用してユーザーとしてメールを送信しようとしています。Google の Web サイトでは、次のように述べられています。

このドキュメントでは、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 ステートメントのキャッチで再認証すると、うまくいくようです。

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')
4

1 に答える 1

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))
于 2012-10-17T04:29:03.653 に答える