Gmail을 Ghost의 메일 서비스로 사용하는 법

Ghost의 최신버전에서는 예전처럼 구독 할 때 이메일을 등록하면 되는게 아니고, 스펨방지를 위해 실존하는 이메일인지 확인메일을 보내는 과정이 추가되었다.

구독 서비스를 제공하거나 Ghost의 자체 코멘트 기능을 사용하기 위해서는 확인메일 전송이 필수이며, 그러기 위해서는 메일서비스를 필수적으로 설정해야한다.

Ghost에서 권장하고 있는건 Mailgun인 듯 하지만, Mailgun은 일단 무료 티어가 없어졌고, Mailgun이 필수인건 뉴스레터 기능을 사용 할 때 뿐이다. 단순히 구독 확인 메일을 보내는 "transactional" 메일은 SMTP 서비스를 사용 할 수 있다.

Ghost에서 메일 서비스를 설정한다는 건 이 "transactional" 메일 부분에 해당되고, 뉴스레터 용 "bulk send"를 위한 Mailgun 설정은 Admin UI에서 따로 설정해야 한다.

Bulk send에 SMTP를 사용할 수 없는 이유는, 공식 공지사항에 따르면 각종 이메일 프로바이더들에게 스팸업자로 낙인 찍히기 때문이라고 한다. Mailgun사용하기 싫고 구독자들에게 뉴스레터는 보내고 싶으면 각자의 이메일 서비스에서 직접 보내면 되는 그만이기 때문에, 개인적으로는 크게 문제 될 건 아니라고 생각한다.

이번 포스트는 이전 포스트인 Gmail을 자기가 가진 도메인 주소로 사용하기 를 보고 오는 것을 권장한다.


메일 서비스 설정

Ghost를 설정 하기에 앞서 먼저 noreply@<자기도메인> 의 이메일 주소를 사용 할 수 있게 만들어 두어야 한다. Ghost에서는 기본설정으로 noreply@<자기도메인>으로 이메일을 보내게 설정되어 있는 부분이 있기 때문에 반드시 해주는 것이 좋다. 방법은 이전 포스트 참조.

이메일 설정이 끝났으면 대부분은 공식 문서에 있는 방법을 참조하면 된다.

config.production.json에 추가해야 할 부분은 아래와 같다.

"mail": {
  "from": "자신의 도메인에 연결된 이메일 주소"
  "transport": "SMTP",
  "options": {
    "service": "gmail",
    "auth": {
      "user": "Gmail 주소",
      "pass": "App password"
    }
  }
}

참 쉽죠? Docker의 경우는 아래와 같이 환경 변수를 추가해주면 된다.

  mail__transport = "SMTP"
  mail__from = "자신의 도메인에 연결된 이메일 주소"
  mail__options__service = "gmail"
  mail__options__auth__user = "Gmail 주소"
  mail__options__auth__pass = "App password"

이렇게 설정해주면 된다.


Ghost는 nodemailer를 이용하여 메일 발송 기능을 구현하고 있고, 이전에 nodemailer를 개인적으로 사용한 적이 있기 때문에, 메일 기능에 관한 설정 자체는 큰 어려움 없이 바로 할 수 있었다.

문제가 되는건 언어적인 부분인데, 구독 알림창과 확인메일이 영어로 되어있고, 이 둘은 소스코드에 하드코딩이 되어 있기 때문에 한글로 바꿔주기 위해서는 소스 코드를 직접 수정해줘야 한다는 번거로움이 있다... 공식 포럼을 보면 3년전쯤부터 번역 관련 리퀘가 올라와 있는데 Ghost팀에서는 업데이트 할 생각이 아직까지는 없는 모양이다. 답변 조차 없는 듯 하다.

가입이랑 로그인 관련부분은 Portal이라는 서드파티 서비스 (React로 만들어진 듯). 이메일 메세지 부분은 Ghost의 소스코드에 하드코딩. 이 두가지를 일단 알았으니 시간 날 때 천천히 수정 해 보도록 한다.