python3 imap gmail example




Gmail 연결을 위해 imaplib 및 oauth 사용 (2)

다음은 Google의 xoauth.py 있는 루틴을 사용하여 IMAP에 연결하는 예입니다. 디버그 정보를 출력 할 것이므로 실제 응용 프로그램을 위해 oauth 패키지를 사용하는 것으로 전환하고 싶을 것입니다. 최소한이 작업을 시작해야합니다.

import imaplib
import random
import time

import xoauth

MY_EMAIL = '[email protected]'
MY_TOKEN = # your token
MY_SECRET = # your secret

def connect():
    nonce = str(random.randrange(2**64 - 1))
    timestamp = str(int(time.time()))

    consumer = xoauth.OAuthEntity('anonymous', 'anonymous')
    access = xoauth.OAuthEntity(MY_TOKEN, MY_SECRET)
    token = xoauth.GenerateXOauthString(
        consumer, access, MY_EMAIL, 'imap', MY_EMAIL, nonce, timestamp)

    imap_conn = imaplib.IMAP4_SSL('imap.googlemail.com')
    imap_conn.authenticate('XOAUTH', lambda x: token)
    imap_conn.select('INBOX')

    return imap_conn

connect()

Oauth를 사용하여 Python으로 Gmail에 연결하고 싶습니다. 지금 나는 구글 ( 링크 )에서 xoauth.py 스크립트를 가지고 있고, 토큰을 생성하는 것은 모두 잘 작동하지만 어떻게 다른 스크립트에서 그것을 사용할 수 있습니까? 그것은 장고에있을 것입니다.

지금 내 스크립트는 다음과 같이 로그인합니다.

m = imaplib.IMAP4_SSL("imap.gmail.com")
m.login("[email protected]", "password")

하지만 나는 더 안전한 것을 원한다.


다음은 oauth2 모듈 을 사용하여 readme에서 가져온 oauth를 사용하여 인증하는 예제입니다.

import oauth2 as oauth
import oauth2.clients.imap as imaplib

# Set up your Consumer and Token as per usual. Just like any other
# three-legged OAuth request.
consumer = oauth.Consumer('your_consumer_key', 'your_consumer_secret')
token = oauth.Token('your_users_3_legged_token', 
    'your_users_3_legged_token_secret')

# Setup the URL according to Google's XOAUTH implementation. Be sure
# to replace the email here with the appropriate email address that
# you wish to access.
url = "https://mail.google.com/mail/b/[email protected]/imap/"

conn = imaplib.IMAP4_SSL('imap.googlemail.com')
conn.debug = 4 

# This is the only thing in the API for impaplib.IMAP4_SSL that has 
# changed. You now authenticate with the URL, consumer, and token.
conn.authenticate(url, consumer, token)

# Once authenticated everything from the impalib.IMAP4_SSL class will 
# work as per usual without any modification to your code.
conn.select('INBOX')
print conn.list()

xoauth 사용하는 것보다 훨씬 xoauth 합니다.





imaplib