[python] Authlib를 사용하여 애플리케이션에 인증된 사용자에게 이메일을 전송하는 방법은?

개요

Authlib는 OAuth 1.0, OAuth 2.0 및 OpenID Connect를 구현하기위한 파이썬 라이브러리입니다. 인증된 사용자에게 이메일을 보내려는 경우, Authlib를 사용하여 OAuth 또는 OpenID Connect을 통해 사용자의 이메일 주소를 얻고, 이메일을 전송하는 기능을 추가할 수 있습니다.

Authlib 설치

Authlib를 설치하려면 다음 명령어를 사용합니다:

pip install authlib

인증된 사용자의 이메일 주소 가져오기

Authlib를 사용하여 인증된 사용자의 이메일 주소를 가져오려면 다음 단계를 따릅니다:

  1. Authlib 클라이언트를 초기화하고 OAuth 또는 OpenID Connect 인증 플로우를 수행합니다. 이 단계는 해당 OAuth 또는 OpenID Provider에 따라 다를 수 있습니다. Authlib 문서를 참조하십시오.
  2. 인증 플로우가 완료되면, 인증된 사용자의 정보를 제공하는 응답을 받게 됩니다. 이 응답에서 이메일 주소를 추출합니다.

다음은 OAuth 2.0 인증을 예로 들어 설명합니다:

from authlib.integrations.flask_client import OAuth
from flask import Flask

app = Flask(__name__)
oauth = OAuth(app)

# OAuth 클라이언트 등록
oauth.register('provider_name',
    client_id='CLIENT_ID',
    client_secret='CLIENT_SECRET',
    api_base_url='https://example.com/api/',
    access_token_url='https://example.com/oauth/access_token',
    authorize_url='https://example.com/oauth/authorize',
    client_kwargs={'scope': 'email'}
)

# OAuth 플로우 시작
@app.route('/auth')
def login():
    redirect_uri = url_for('authorize', _external=True)
    return oauth.provider_name.authorize_redirect(redirect_uri)

# 사용자 정보 가져오기 및 이메일 주소 얻기
@app.route('/authorize')
def authorize():
    token = oauth.provider_name.authorize_access_token()
    response = oauth.provider_name.get('user', token=token)
    email = response.json().get('email')
    # 이메일 주소 사용하여 이메일 전송

if __name__ == '__main__':
    app.run()

위 코드는 Flask와 Authlib를 사용하는 예입니다. 다른 프레임워크에서도 비슷한 방식으로 작업할 수 있습니다.

이메일 전송 기능 추가하기

인증된 사용자의 이메일 주소를 얻었으면, 이메일을 보내는 기능을 추가할 수 있습니다. 여러 가지 방법이 있지만, 다음은 Python의 smtplib 모듈을 사용하여 Gmail을 통해 이메일을 전송하는 방법입니다:

import smtplib
from email.mime.text import MIMEText

def send_email(to, subject, body):
    gmail_user = 'your-email@gmail.com'
    gmail_password = 'your-password'

    msg = MIMEText(body)
    msg['Subject'] = subject
    msg['From'] = gmail_user
    msg['To'] = to

    try:
        server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
        server.ehlo()
        server.login(gmail_user, gmail_password)
        server.sendmail(gmail_user, [to], msg.as_string())
        server.close()
        print('Email sent successfully!')
    except Exception as e:
        print('Something went wrong...', e)

위 함수를 사용하여 이메일을 전송하려면 다음과 같이 수행합니다:

email = 'user@example.com'
subject = 'Hello, World!'
body = 'This is a test email.'

send_email(email, subject, body)

이렇게 하면 Authlib로 인증된 사용자의 이메일 주소를 가져와서 이메일을 보낼 수 있게 됩니다. 실제로 사용할 서드파티 이메일 서비스의 자격 증명을 사용하여 안전한 방식으로 이메일을 전송하도록 애플리케이션을 구성하는 것을 추천합니다.

참고 자료