Twilio SendGrid를 사용하여 Python Flask 애플리케이션에서 이메일 보내기

게시 됨: 2020-06-30

이메일 인프라 구축 또는 구매 여부를 결정하는 것은 결코 쉬운 일이 아닙니다. 전달 가능성 문제를 지원할 대역폭이 있습니까? 성장에 따라 계속 보낼 수 있습니까? 무엇이 더 비용 효율적입니까? 고려해야 할 여러 요소가 있지만 이는 다른 가이드(예: Build it 또는 Buy It 가이드 )에 대한 대화입니다.

대신 이 튜토리얼에서는 전용 이메일 서비스를 통해 이메일을 보내는 것이 얼마나 쉬운지 보여줄 것입니다. Flask 프레임워크와 Flask-Mail 확장 을 사용하여 Twilio SendGrid를 통해 이메일을 전달하는 방법을 살펴보겠습니다 .

튜토리얼 도구

이 자습서를 따르려면 다음 항목이 필요합니다.

  • 파이썬 3.6 이상. 운영 체제에서 Python 3.6+ 인터프리터를 제공하지 않는 경우 python.org 로 이동 하여 설치 프로그램을 다운로드할 수 있습니다.
  • 무료 Twilio SendGrid 계정. Twilio SendGrid를 처음 사용하는 경우 평가판 계정에 등록하십시오 . 평가판 계정을 사용하면 30일 동안 40,000개의 이메일을 보낸 다음 하루에 100개의 이메일을 영원히 보낼 수 있습니다.

SendGrid로 설정하기

SendGrid를 통해 이메일을 보내려면 먼저 SendGrid 서비스에 대한 액세스를 인증하는 데 사용할 API 키를 만들어야 합니다. SendGrid 계정에 로그인 한 다음 왼쪽 사이드바를 클릭하고 "설정"을 선택한 다음 API 키 를 선택 합니다. "API 키 생성"을 클릭합니다.

API 키에 친숙한 이름을 지정하십시오(참조하는 내용을 기억할 수 있도록 간단하고 간단하게 유지하십시오!). 이 튜토리얼에서는 Flask-Mail 이라는 이름을 선택했습니다. 필요한 모든 이메일 전송 기능(GET, PATCH, PUT, DELETE 및 POST 끝점에 대한 액세스)을 수행할 수 있는 기능을 키에 부여하는 권한에 대해 "전체 액세스"를 선택했습니다. 매우 구체적인 권한이 있는 키를 생성하려는 경우 "제한된 액세스"를 선택하고 필요에 따라 액세스를 구성하십시오.

"만들기 및 보기" 버튼을 클릭하면 키가 표시됩니다. 이 키는 다시 표시되지 않으므로 클릭하여 클립보드에 복사해야 합니다. 그런 다음 나중에 사용할 수 있도록 보안 문서에 붙여넣습니다. 키를 분실한 경우 새 키를 생성해야 합니다. 키를 저장했으면 "완료" 버튼을 클릭할 수 있습니다.

Python 환경 구축

이제 설정이 완료되었으므로 Python Flask 애플리케이션에서 이메일을 보내는 방법에 대해 알아볼 수 있습니다. 컴퓨터에 *twilio-sendgrid-tests*(또는 이와 유사한 것)라는 새 디렉터리를 만든 다음 그 안에 새 Python 가상 환경을 만드는 것으로 시작하겠습니다.

Mac 및 Unix 사용자의 경우 명령은 다음과 같습니다.

Windows 사용자의 경우 명령은 다음과 같습니다.

다음으로 가상 환경에 Flask, Flask-Mail 및 python-dotenv를 설치합니다.

Flask 애플리케이션 설정

app.py 파일에 시작 Flask 및 Flask-Mail 응용 프로그램을 빌드해 보겠습니다 .

여기에서 SendGrid의 SMTP 서비스를 사용하도록 Flask-Mail을 올바르게 구성하는 방법을 볼 수 있습니다. 중요한 설정은 다음과 같습니다.

  • 메일 서버는 `smtp.sendgrid.net`이어야 합니다.
  • 메일 포트는 587이어야 합니다. (언제 어떤 포트를 사용해야 하는지 아시나요? 이 블로그 게시물을 확인하세요. )
  • TLS를 활성화해야 합니다. ( SSL과 TLS 의 차이점은 무엇입니까 ?)
  • 인증이 필요합니다. 사용자 이름은 'apikey'를 사용해야 합니다(모든 SendGrid 계정에서 동일). 비밀번호는 이전 섹션에서 생성한 SendGrid API 키입니다.

이 Flask 응용 프로그램의 경우 Flask-Mail 확장에 대한 적절한 구성 키에 위의 설정을 추가했습니다. 보안상의 이유로 'SENDGRID_API_KEY'라는 환경 변수에서 API 키를 가져왔습니다. 또한 환경 변수에서 기본 발신자 이메일 주소를 설정합니다. 이것은 기본적으로 모든 이메일의 "보낸사람" 필드에 표시되는 이메일 주소입니다.

두 개의 필수 변수를 사용하여 .env 파일을 만듭니다 .

Flask는 .env 파일 에 정의된 변수를 자동으로 가져 오므로(python-dotenv 패키지가 설치되어 있는 한) 이 두 변수를 Flask 애플리케이션 구성으로 가져오기에 충분합니다.

테스트 이메일 보내기

Python 셸에서 테스트 이메일을 보내는 방법을 살펴보겠습니다.

우리는 'flask shell' 명령으로 Python 셸을 시작했음을 주목하세요. 이렇게 하면 app.py 에 빌드한 Flask 애플리케이션을 가져올 수 있습니다.

셸에서 app.py 에서 만든 `mail` 인스턴스 와 Flask-Mail에서 `Message` 클래스를 가져옵니다.

다음으로 `Message` 인스턴스를 만듭니다.

마지막 단계는 이 이메일을 보내는 것입니다.

그리고 그게 다야! 모든 것이 계획대로 진행된다면 이메일은 몇 초 안에 받은 편지함에 도착할 것입니다.

이 기능을 통합하는 Flask 경로 예제를 보려면 다음과 같이 app.py 하단에 추가할 수 있는 간단한 예제를 참조하세요 .

예제 애플리케이션을 완료하려면 index.html 템플릿 파일을 추가해야 합니다. 먼저 템플릿에 대한 디렉터리를 만듭니다.

그런 다음 템플릿/index.html 파일에 다음 내용을 작성합니다 .

다음을 사용하여 테스트 애플리케이션을 실행합니다.

그런 다음 웹 브라우저에서 http://localhost:5000 으로 이동하여 애플리케이션에 액세스합니다.

이제 수신자 이메일 주소를 입력할 수 있으며 버튼을 클릭하면 테스트 이메일이 해당 주소로 전송됩니다.

배달 문제 해결

위의 Flask 애플리케이션을 사용하면 이메일을 성공적으로 보낼 수 있습니다. 그러나 이메일이 배달되지 않을 가능성이 있습니다. SendGrid는 이메일을 비동기식으로 보내기 때문에 대부분의 배달 오류는 보낸 사람이 트랜잭션을 완료한 후에 발생하므로 애플리케이션에 오류가 있다는 표시가 없습니다. 이런 일이 발생하면 이메일이 수신자의 이메일 서버에서 거부되었을 수 있습니다.

다행히도 우리가 설명한 대로 이메일을 보내서 이 문제가 발생하면 Twilio SendGrid 대시보드를 사용하여 발생한 문제를 디버깅하는 데 도움을 받을 수 있습니다. SendGrid 대시보드 에서 Activity 를 클릭 한 다음 페이지 중앙에 있는 "Show All Activity" 버튼을 클릭합니다. 그러면 성공적으로 배달되었는지 여부를 나타내는 전송을 시도한 모든 이메일 목록이 표시됩니다.

위 그림에서 example.com 주소로 보낸 이메일이 제대로 전달되지 않은 것을 볼 수 있습니다. 배달되지 않은 이메일의 경우 이메일을 클릭하면 수신자의 이메일 서버에서 보낸 오류 응답을 비롯한 자세한 정보를 볼 수 있습니다.

이메일이 전송되지 않는 이유를 확인한 후에는 이러한 전송 문제를 해결할 수 있는 여러 가지 방법이 있습니다. 이메일에서 철자 오류가 많은 경우(예: @yaho.com 또는 @gmal.com) 이메일 확인 도구 를 탐색하여 이메일 연락처 목록에서 일반적인 철자 오류를 찾아내는 것이 좋습니다.

잘못된 전송 평판이나 차단된 IP 주소를 포함하여 배달 실패로 이어질 수 있는 다른 많은 문제가 있습니다. 2020년 이메일 전달 가능성 가이드 에서 이메일 전달 가능성에 대해 모두 알아보십시오 .

결론

자습서에서 볼 수 있듯이 Twilio SendGrid는 시작 Flask 이메일 전송 워크플로에 쉽게 통합되어 이메일을 보내는 작업을 간단하게 만듭니다.

이제 Python의 Flask Framework에서 이메일을 받는 방법이 궁금하시다면 걱정하지 마세요. 이 문서를 확인하십시오: Python용 Flask Framework로 이메일을 수신하는 방법 .

또한 Twilio SendGrid와 통합하거나 API를 통해 전송하는 방법에 대한 추가 리소스는 지식 센터 를 확인하십시오 .