앱으로 전송된 이메일 메시지는 MIME 데이터가 포함된 HTTP 요청으로 구현됩니다. 수신 이메일 메시지를 처리하려면 이메일 주소를 앱 구성의 스크립트 핸들러와 연결한 다음 앱 코드에 핸들러를 포함합니다.
수신 이메일은 관련 스크립트로 전달되는 HTTP 요청을 생성합니다. 기본 서비스에 수신 이메일을 처리하는 스크립트가 있어야 합니다.
메일 서비스에 대한 자세한 내용은 메일 API 개요를 참조하세요.
이메일을 수신하도록 애플리케이션 구성
새로운 앱을 만들면 이메일 수신은 기본적으로 사용 중지되어 있습니다. 이메일 수신을 사용 설정하려면 기본 서비스에서 app.yaml
파일을 수정해야 합니다.
이메일 수신 서비스를 사용 설정하는
inbound_services
섹션을 추가합니다. 예를 들면 다음과 같습니다.구성 파일에 이 섹션을 포함하여 이메일 수신을 사용 설정하지 않으면 이메일 수신은 사용 중지되며 앱으로 전송되는 이메일 메시지는 무시됩니다.
URL 매핑 이메일 주소를 스크립트 핸들러와 연결하는 매핑을 추가합니다.
기본 서비스에서 이메일을 수신하는 이메일 주소의 형식은 다음과 같습니다.
[STRING]@[Google Cloud project ID].appspotmail.com
기본 외 서비스에서는 이메일 주소 형식이 다음과 같습니다.
[STRING]@[servicename]-dot-[Google Cloud project ID].appspotmail.com
이메일 메시지는 다음 URL을 사용하는 HTTP POST 요청으로 앱에 전송되며, 여기서 [ADDRESS]는 도메인 이름을 포함한 전체 이메일 주소입니다.
/_ah/mail/[ADDRESS]
앱에서 수신 이메일을 처리하려면 이메일 URL을
app.yaml
파일의 핸들러에 매핑합니다.위 예시에서
/_ah/mail/.+
은 앱으로 주소가 지정된 모든 이메일과 일치합니다. 원하는 경우 다음 예시와 같이 각 이메일 주소에 여러 핸들러를 설정할 수 있습니다.수신 이메일 메시지의 URL이 목록의 처음부터 끝까지 대응되므로 이메일 메시지 URL이 둘 이상의 패턴과 일치하면 첫 번째 일치하는 핸들러가 실행됩니다. 이렇게 하면 마지막 매핑으로 '포괄' 핸들러를 포함할 수 있습니다. 핸들러는 기본 모듈(또는 애플리케이션 버전)에서 실행됩니다.
수신 이메일 처리
Python SDK는 수신 이메일을 처리하기 위한 웹 앱 클래스인 InboundMailHandler
를 정의합니다. InboundMailHandler
는 google.appengine.ext.webapp.mail_handlers
패키지에 있습니다.
InboundMailHandler
를 사용합니다.
InboundMailHandler
의 서브클래스를 만들고receive()
메서드를 재정의합니다.- Python SDK에 정의된
InboundEmailMessage
클래스의 인수를 사용하여receive()
메서드를 호출합니다.
예를 들어 다음과 같이 InboundEmailMessage
의 인스턴스를 만들 수 있습니다.
InboundMailHandler
는 수신되는 모든 이메일 주소와 일치하는 결과 쌍을 메일 핸들러로 반환하는 편의 클래스 메서드인 mapping()
을 포함하며, 코딩한 InboundMailHandler
의 모든 서브클래스에서 이를 호출할 수 있습니다.
InboundEmailMessage
객체(이 예시의 mail_message
)에는 이메일 메시지가 포함됩니다. bodies()
메서드는 메시지 내의 본문을 반환합니다. 인수 없이 bodies()
를 호출하면 먼저 HTML 본문을 생성하고 그 후에 일반 텍스트 본문을 생성하는 반복기를 반환합니다. HTML 또는 일반 텍스트만 원하는 경우 bodies()
에 인수를 전달합니다.
InboundEmailMessage
객체에는 다른 메시지 필드에 액세스할 수 있는 속성이 포함되어 있습니다.
subject
에는 메시지 제목이 포함됩니다.sender
는 발신자 주소입니다(예:"Nobody <nobody@example.com>"
).to
는 메시지의 기본 수신자를 쉼표로 구분한 목록입니다(예:"Joe <joe@example.com>, Bill <bill@example.com>"
).cc
에는 참조 수신자를 쉼표로 구분한 목록이 포함됩니다(예:"Joe <joe@example.com>, Bill <bill@example.com>"
).date
는 메시지 날짜를 반환합니다.attachments
는Attachment
객체 목록이며 비어 있을 수 있습니다.original
은 나머지 필드(예: 이메일 헤더)에 의해 노출되지 않은 데이터가 포함된 전체 메시지입니다(형식: Pythonemail.message.Message
).
로컬 개발 서버에서 수신 메시지 시뮬레이션
수신 이메일을 처리하도록 앱을 설정한 후 개발 서버 콘솔을 사용하여 수신 이메일 메시지를 시뮬레이션할 수 있습니다.
- http://localhost:8080/console로 이동한 다음 관리자로 로그인을 선택하여 개발 서버에 관리자로 액세스합니다.
- 개발 서버의 탐색 메뉴에서 수신 메일을 클릭합니다.
나타나는 양식을 작성한 다음 이메일 보내기를 클릭합니다.
개발 서버를 실행하는 방법을 비롯한 자세한 내용은 Python 개발 서버를 참조하세요.