메일이 안보내진다!
아무도 안볼 줄 알았는데... 의외로 검색어에 블로그가종종 노출되는 것 같다. 매우 적긴 하지만 방문하는 사람들이 있고, 댓글을 남겨 주신 분들도 계시다. 그런데 이상하게도 포스트에 댓글이 달렸는데 메일이 오지 않은 탓에 며칠이 지나고 나서야 댓글을 확인할 수 있었다.
분명히 누군가가 포스트에 댓글을 남기면 바로 메일이 오도록 해놨는데? 맞다. WordPress에는 설정을 해 두었다. 그럼 뭐하나... 서버에서 막는데...! 혹시나 해서 찾아보니 WordPress에서 메일을 보내면 WordPress의 wp_mail() 함수 또는 PHP의 mail() 함수가 port 25를 통해 메일을 보내게 되는데 GCP의 compute engine에서는 보안상의 이유로 port 25가 차단되어 있다고 한다(GCP 문서 / stack overflow). 그럼 port를 바꾸면 되지 않을까?
찾아보니 같은 문제를 겪고 있는 사람들이 많고, 해결 방법도 여러 가지가 있는 것 같다. 나는 아래 포스트를 참고해 Gmail SMTP를 이용해 해결했다.

Gmail SMTP를 이용해 메일 보내기
- 먼저 WP Mail SMTP by WPForms 플러그인을 설치, 활성화 한다.
- WP Mail SMTP 설정 창에서 From Email, From Name을 작성하고 각각 바로 아래의 체크박스를 체크해 준다. 사실 Gmail에 연결하면 해당 계정에서 메일을 보내게 되기 때문에 From Email란은 크게 의미가 있는 것 같지는 않다.
From Email 바로 밑에 있는 문구 (If you using an email provider ...) 를 읽었지만 그래도 혹시나 하고 저렇게 메일 주소를 입력해 봤는데, 별 소용 없었다. Gmail에 연결하는 것이니 생각해보면 당연한 결과이긴 하다.
- Mailer는 Gmail을 선택해주고, Set the return-path to match the From Email을 체크해 준다.
조금 아래로 스크롤을 내리면 있는 Authorized Redirected URI는 미리 메모장에 복사해 주자.
- WP Mail SMTP 설정 창은 잠시 두고, Gmail API 콘솔로 이동한다. 연결할 Gmail계정에 미리 로그인되어 있어야 한다. 아래 그림처럼 드롭다운 목록에 기본으로 설정되어 있는 프로젝트 만들기를 그대로 두고 [계속]을 클릭한다.
- API가 설정되었다! 아래쪽의 [사용자 인증 정보로 이동]을 클릭한다. 이때 OAuth 동의 화면을 설정해야 한다고 안내가 뜬다. [동의 화면 설정] / [외부] 선택 및 [만들기] 순으로 각각 진행한 뒤에 뜨는 창에 적절히 정보를 입력해 주자. 어차피 외부 공개용 앱을 만드는 것이 아니기 때문에 크게 중요한 과정은 아닌 것 같다.
사용자 인증 정보로 이동을 클릭하면 아래와 같이 OAuth 동의 설정 창이 열린다.
NOT NOW를 선택하고 넘어갈 수도 있는데, 어차피 다음 단계 진행하다가 막힌다.
'외부'만 선택 가능하다.
- 다시 사용자 인증 정보로 추가 창으로 돌아와서, 아래와 같이 작성한 뒤 [어떤 사용자 인증 정보가 필요한가요?]를 클릭한다.
- 어떤 API를 사용 중이신가요? > Gmail API
- API를 호출할 위치가 어디인가요? > 웹 서버(예: node.js, Tomcat)
- 액세스할 데이터는 무엇인가요? > 사용자 데이터
- OAuth 설정 창이 뜬다. Oauth는 Open Authentication의 약자로, 곧 연결할 Gmail 계정에서 인증된 메일을 발송할 수 있는 권한을 부여해 준다고 한다.
아래 내용들을 입력한 뒤 아래의 [새로고침] 또는 [Client ID 생성]을 클릭한다.
- 이름: 적당히 마음에 드는 이름을 만들어 주자.
- 승인된 자바스크립트 원본: 블로그 주소를 입력해 준다.
- 승인된 리디렉션 URI: 조금 전에 복사해 뒀던 Authorized Redirected URI를 입력한다.
뒤이어 나오는 창도 적당히 클릭해서 끝내면...
- 아래와 같이 사용자 인증 정보 창이 뜬다. 조금 전에 생성한 Oauth 2.0 클라이언트 오른쪽의 편집 버튼을 누르면 화면 오른쪽에서 클라이언트 ID 및 클라이언트 보안 비밀을 확인할 수 있다. 메모장에 복사해 두자.
- 다시 WP Mail SMTP 설정 창으로 돌아와서, 아래쪽의 Client ID 및 Client Secret 란에 조금 전에 복사해 둔 값들을 입력하고 [Save Settings]를 클릭한다.
- Authorize 섹션에 Allow plugin to send email using your Google account 버튼이 활성되된다. 클릭하고 안내되는 페이지에서 구글 로그인 및 권한 부여를 진행해 준다.
- 메일 설정이 끝났다! [Email Test] 메뉴에서 테스트 메일도 보내 보고, 아무 포스트에 댓글을 하나 달아서 메일이 보내지는지 확인하자.
사실 원하는 것은 Gmail을 경유하는 것이 아니라 서버에서 바로 메일을 보내는 것이긴 한데([email protected]), 일단은 이 정도로 만족해야겠다.
덧. 검색하다 보니 재미있는 글들이 보인다 ( GCP uservoice #1 / #2). 원래는 465, 587 포트도 모두 막혀 있다가 비교적 최근에 third party service에 개방이 된 듯하다.