Computer Engineering/Python

파이썬 SMTP Gmail app password 설정하기

jordan.bae 2022. 5. 18. 01:18

오랜만에 간단하게Gmail Email Client코드를 작성하려는데 예전에 해놓은 설정이 곧 있으면 지원하지 않는 것을 발견했다.

보안 수준이 낮은 앱의 액세스를 2022년 5월 30일부터 막아서, 2-Step auth를 켜고 App password를 사용해야 Python smtp client로 이메일을 보낼 수 있게된다. (기업용 Google workspace는 계속 지원한다고 한다. 개인 메일만 해당된다.)

 

 

이전 설정

그 전에 해놓은 설정은 크게 두 가지 였다.

1) Gmail settings -> Forwarding and POP/IMAP 에서 다른 client들에서 IMAP을 이용해서 메일을 보낼 수 있도록 IMAP을 홝성화.

 

 2) 보안 수준이 낮은 앱을 액세스할 수 있도록 설정.

Account의 Security(보안) Tab에서 보안 수준이 낮은 액의 액세스를 사용함으로 변경.

->

하지만, 구글에서 2022년 5월 30일 부터 개인계정은 이를 사용 중지 한다고 한다. (기업용 Google Workspace는 가능하다고 한다.)

계정을 안전하게 보호하기 위해 2022년 5월 30일부터 Google은 사용자 이름과 비밀번호만 사용하여 Google 계정에 로그인하도록 요청하는 서드 파티 앱 또는 기기의 사용을 더 이상 지원하지 않습니다. Google Workspace 또는 Google Cloud ID 고객에게는 이 기한이 적용되지 않습니다. 이러한 고객을 대상으로 한 시행일은 추후 Workspace 블로그에 공지될 예정입니다. 자세한 내용은 아래를 참고하시기 바랍니다. Apple 기기 로그인에 관한 특별 참고사항 최근에 사용자 이름과 비밀번호만 사용하여 Google 계정에 로그인한 적이 없는 사용자는 2022년 2월 28일부터 Google 계정 정보로는 새로운 로그인만 시도할 수 있습니다. 기존 사용자는 2022년 5월 30일까지 사용자 이름과 비밀번호를 사용하여 Google 계정에 로그인할 수 있습니다.

돈도 안내는데 부지런히 업데이트 해야지...

참고: https://support.google.com/accounts/answer/6010255?hl=ko&utm_source=google-account&utm_medium=profile-less-secure-apps-card

 

 

해당 업데이트를 피하기 위해서 필요한 설정

계속 사용하려면 2factor를 enable하고 App password를 발급해서 사용해야 한다.

 

1.  Google Accounts Page 로 이동.

2. 2-Step verification 활성화. phone text나 google 2factor app이용. (아래 그림 처럼 On이 되어야 함.)

 

3. App Passoword 설정

App은 Mail을 선택하고 device는 other를 설정. 

아래와 같이 되어 있어야 함.

이제 준비는 끝났다.

 

 

Sample code

아래와 같은 코드를 이용해서 테스트 하면 된다.

import smtplib
from email.mime.text import MIMEText


class GMailClient:
    def __init__(self, username: str, password: str) -> None:
        self.port = 587
        # ex. example@gmail.com
        self.username = username
        # 16digit app password
        self.password = password

    def send_email(self, email: str, subject: str, content: str) -> None:
        # login
        with smtplib.SMTP("smtp.gmail.com", self.port) as smtp:
            smtp.starttls()
            smtp.login(self.username, self.password)

            # send_email
            msg = MIMEText(content)
            msg['From'] = self.username
            msg['To'] = email
            msg['Subject'] = subject
            smtp.sendmail(self.username, email, msg.as_string())

 

 

오랜만에 실생활에 필요한 올공 테니스장 빈자리 알림 script를 만들면서, 개인 이메일을 사용하시는 다른 분들도 곧 업데이트를 하셔야 될텐데 도움이 될 것 같아서 정리해봤는데 도움이 되시면 좋겠네요!

 

 

반응형