7월 23, 2021

Ghost 메일 보내기 - AWS SES 설정

Ghost 메일 보내기 - AWS SES 설정

AWS Lightsail 에 고스트 블로그를 올렸습니다.

관리자 페이지에서 테마도 업로드하고, 글도 쓰고.. 이제 얼추 블로그 느낌이 납니다. 하지만 회원가입을 하고 싶어도 메일 전송이 안되서 회원 가입을 할 수 없는 상황입니다.

처음에는 고스트에서 안내하는대로 Mailgun 을 사용하려고 했습니다만 (추후 뉴스레터 발송도 고려하고 있습니다), 도메인으로 이메일 계정 하나 만드려고 했더니 월 35달러 요금제를 사용해야 하네요. ㅠㅠ

Why do I have to set up Mailgun for newsletters?
Sending bulk email to many recipients using SMTP is not supported. In order to send newsletters from Ghost you’ll need to setup Bulk Mail with Mailgun.
고스트 뉴스레터 발송을 위해서는 Mailgun 을 사용하세요.

할 수 없습니다. 저는 돈이 없으므로, 사용이 간단한 Mailgun 을 뒤로 하고 AWS SES 를 선택했습니다.


1. 지역 선택

AWS SES(Amazon Simple Email Service) 메뉴로 이동합니다. SES에서 메일 보내기만 사용한다면 지역(Region)이 서울이어도 괜찮지만, 메일 받기를 사용하려면 아래 3개 지역 중 하나를 선택해야 합니다.

US East (N. Virginia)
US West (Oregon)
Europe (Ireland)

Regions and Amazon SES - Amazon Simple Email Service
Provides information about Regions and endpoints in Amazon SES.
AWS SES 지역에 대한 안내 문서

저는 도메인으로 이메일 계정을 만들어 사용할 것이기 때문에 지역을 미국 버지니아로 정하겠습니다. SES 홈 오른쪽 상단 지역을 버지니아로 변경해주세요.


2. 이메일 주소 확인

아마존 SES 을 거쳐 이메일을 보내기 위해서는, 먼저 발신자의 이메일이 본인 것이 맞는지 인증을 해야 합니다.  

[그림3] Email Addresses 메뉴 선택

왼쪽 메뉴 중 Email Addresses 를 선택 > 상단의 [Verify a New Email Address] 버튼을 클릭합니다.

[그림4] 이메일 입력 팝업

사용하실 이메일 주소를 입력하세요. 저는 제가 사용 중인 gmail을 입력하고 인증을 요청했습니다.

[그림5] 인증 대기 중

인증을 요청하면 위와 같이 pending 상태가 됩니다. 그럼 입력한 메일로 들어가셔서 Amazon Web Services 에서 이메일이 왔는지 확인하세요. 해당 이메일에서 링크를 클릭하시면 인증이 완료됩니다.

[그림6] 인증 완료

3. 도메인 확인

도메인 역시 이메일과 마찬가지로 본인 소유임을 확인하여, 다른 사람이 무단으로 사용할 수 없게 합니다(라고 AWS 안내 문서에 적혀있네요).

[그림7] Domains 메뉴 선택

왼쪽 메뉴 중 Domains 를 선택 > 상단의 [Verify a New Domain] 버튼을 클릭합니다.

[그림8] 도메인 입력 팝업

도메인 주소를 입력하세요. 팝업에 도메인 입력 후 [Verify This Domain] 버튼을 누르면 아래와 같이 DNS 세팅을 위한 레코드 값들이 출력됩니다.

[그림9] DNS Record 잔치

이 레코드 값들을 Lightsail 의 DNS 영역에 등록하기 위하여 새 창을 띄워 Lightsail 홈 > 네트워킹 > 내 도메인의 DNS영역으로 들어가세요.

[그림10] 내 도메인 DNS 영역

DNS 영역에서 레코드 추가 버튼을 눌러 SES 도메인 인증 화면에서 얻은 레코드들을 그대로 추가해줍니다. 저는 TXT 레코드, CNAME 레코드, 메일 수신을 위한 MX 레코드를 아래와 같이 등록해주었습니다.

[그림11] 메일 송수신을 위한 레코드 추가

이렇게 추가하고 잠시 후 SES Domain 화면을 새로고침 하면 도메인 인증이 완료된 것을 볼 수 있습니다.

[그림12] 도메인 인증 완료

4. SMTP 자격 증명 얻기

Amazon 메일 전송 프로토콜을 사용하려면, SES SMTP 인터페이스 접근을 위한 사용자 이름과 암호가 필요합니다. 이 자격 증명을 얻기 위하여 SES 왼쪽 메뉴 중 SMTP Settings 로 이동 > [Create My SMTP Credentials] 버튼을 클릭합니다.

[그림13] SMTP Settings 메뉴 선택

SMTP Credentials 를 생성하시면, SMTP 사용 권한 관리를 위한 IAM(AWS Identity and Access Management)가 자동으로 함께 생성됩니다. 여기서는 이 IAM 유저 이름을 지정합니다. 이렇게 생성되는 IAM 유저의 권한은 아래 json 형태로 표시되고 있습니다.

[그림14] IAM 유저 이름 지정

SMTP 자격 증명을 얻었습니다. 이렇게 얻은 SMTP 사용자 이름과 비밀번호는 이메일 발송시 사용할 것이므로 꼭 다운로드하여 잘 관리해주세요. 앞으로는 이 정보를 다시 볼 수 없습니다.

[그림15] 사용자가 성공적으로 생성되었습니다.

5. Ghost 메일 세팅 변경

Lightsail 에 올린 후 먹통 상태로 있던 회원가입, 로그인 문제를 해결하기 위하여 고스트 메일 환경 세팅을 변경합니다.

고스트가 설치된 디렉토리에 있는 config.production.json 파일을 수정합니다.

"mail": {
	"transport": "Direct"
},

이렇게 되어있는 메일 설정을 아래와 같이 변경해주세요. host 에는 SES 서버명을 적으시고, port 에는 465 또는 587 을 사용합니다. 그리고 user, pass 부분에는 바로 윗 단계에서 SMTP Credentials 를 생성하고 얻은 Smtp Username, Smtp Password 값을 적어줍니다.

"mail": {
    "transport": "SMTP",
    "options": {
    	"service": "SES",
        "host": "email-smtp.신청한SES지역 시스템명.amazonaws.com",
        "port": 465,
        "auth": {
        	"user": "smtp user name 값을 적어주세요.",
            	"pass": "smtp password 값을 적어주세요."
        }
    }
},

저장 후 ghost restart 명령어로 변경사항을 적용합니다.

Configuration - Adapt your publication to suit your needs
Find out how to configure your Ghost publication or override Ghost’s default behaviour with robust config options, including mail, storage, scheduling and more!
[참고] 고스트 메일 설정 문서

* 만약 Mailgun을 사용하는 경우, 고스트 문서에는 아래 설정이 함께 들어가있지만 secureConnection 을 빼야 오류없이 사용 가능합니다. secureConnection: true 설정은 25번 port를 사용하는 경우에만 넣어주세요. 함께 넣었다가 알 수 없는 오류로 고생한 1인 여기 있습니다;

"port": 587,
"secureConnection": true,

여기까지 적용 후 회원가입, 로그인을 시도해보면..  메일 전송이 안되는 것을 확인할 수 있습니다. (AWS SES 화면에서 인증받은 이메일 주소로만 메일을 보낼 수 있습니다.)

AWS SES 에서 처음 계정을 만들면 sandbox 라는 테스트용 상자에 갇혀있는 상태가 됩니다. 이 상태에서는 인증받은 이메일로만 메일을 보낼 수가 있습니다. 한마디로 테스트만 가능한 상태입니다. 따라서 sandbox 에서 나가게 해달라고 AWS에 요청을 해야 합니다.


6. Sandbox 에서 나가기

Sandbox에서 벗어나기 위하여 AWS 에 요청 메시지를 보내겠습니다. SES 왼쪽 메뉴에서 Sending Statistics 선택 > [Edit your account details] 버튼을 클릭합니다.

[그림16] Sending Statistics 메뉴

그럼 아래와 같은 신청서 팝업이 뜹니다.

[그림17] 

Production Access: 정확히 어떤 의미인지 모르겠으나, 테스트(혹은 개인적 사용)의 반대 의미로 이해했습니다. 아마존 SES 개발자 문서에서 샌드박스 밖으로 이동하려면 예를 클릭하라고 하여 Yes를 선택했습니다.

Mail Type: 단건으로 보내는 메일 / 대량으로 보내는 메일 이렇게 두 종류가 있던 것으로 기억합니다. 저는 주로 회원가입, 로그인 링크 용도로 사용할 것이므로 Transactional을 선택했습니다.

Website URL: 내 웹사이트 URL 입력

Use case description: 가장 중요한 부분입니다. 어떤 용도로 메일 서비스를 사용할 것인지 상세히 적어주세요.

Additional contact addresses: 연락받을 이메일 주소

Preferred contact language: 연락시 선호하는 언어. 영어/일본어 중 선택할 수 있습니다. 한국어가 없다는 점이 슬프네요.

마지막으로 약관 동의에 체크하고 [Submit] 버튼을 눌렀습니다. 얼마 지나지 않아 바로 접수되었다는 메일이 왔는데, 동시에 설명이 부족하니 좀 더 상세히 사유를 작성하여 보내달라는 메일이 한통 더 왔습니다. 이렇게 바로? 응답 메일이 오다니.. 이 사람들이 과연 내 요청 사항을 읽은 것이 맞나.. 의심이 들었지만 요구대로 링크를 눌러 다시 상세하게 아래 내용을 적었습니다.

  • SES 서비스 사용 이유
  • 어떤 사람들에게 이메일을 보내는지, 그 이메일 주소는 어떻게 수집하는지
  • 반송되는 메일 및 구독 중지, 회원 탈퇴 요청을 어떻게 처리할 것인지
  • 예상하는 메일 전송량

+ 테스트 전송한 이메일 캡쳐 화면 첨부

아마존에서 가장 걱정하는 것은 사용하지 않는 이메일 주소로 메일이 발송되어 반송되는 메일 처리라는 느낌이 들어서, 이 부분에 가장 중점을 두고 재요청을 작성했습니다. '구독을 원하는 회원들에게서 수집한 이메일 주소로 메일 전송을 하는 것이며, 반송 메일은 주기적으로 체크하여 삭제할 것이다, 구독 중지 및 회원 탈퇴는 이메일로 언제든 요청 가능하다'는 내용으로 썼습니다.

그리고 다음날, 샌드박스 밖으로 제 계정이 이동되었다는 메일을 받았습니다. 회원가입, 로그인 테스트를 해보니 메일이 잘 들어옵니다.

그럼 다음 포스트에서는 도메인으로 메일 계정을 만들고, 해당 계정으로 메일을 받는 과정을 진행해보겠습니다.