본문 바로가기

워드프레스

[워드프레스] POST SMTP 플러그인 (wp_mail()이 아닌, SMTP로 메일 보내기)

 

 

워드프레스 사이트에서 이메일을 발송할 수 있게 해주는 SMTP 플러그인인 POST SMTP는, 

기본 워드프레스 메일 함수인 wp_mail()을 보완해 줄 수 있는 플러그인이다.

 

wp_mail()이란?

 

wp_mail()은 워드프레스 기본 메일 함수로, 간단히 메일을 보내는데에는 편리하지만, 웹 호스팅 서버 설정 문에, 스팸 차단, 인증 미비 등으로 인해 이메일이 제대로 전송되지 않는 경우가 많다. 

 

이 때 POST SMTP 같은 SMTP 플러그인을 사용하면, 외부의 안정적인 SMTP 서버를 통해 메일을 안정적으로 보낼 수 있다.

https://wordpress.org/plugins/post-smtp/

 

Post SMTP – WP SMTP Plugin with Email Logs and Mobile App for Failure Notifications – Gmail SMTP, Office 365, Brevo, Mailgun

Improve WordPress email deliverability. Connect Gmail SMTP, Microsoft 365, Brevo, SendGrid, Mailgun, Zoho, Amazon SES, etc. #1 WordPress SMTP Plugin.

wordpress.org

 

 

설정은 간단한데 복잡하다.

 

플러그인 설치 -> 활성화 후, Post SMTP 플러그인의 설정 탭으로 이동한다.

 

POST SMTP 설정

 

 

유형의 경우 여러가지 API가 있는데, 내가 설정해야 하는 전송 서버는 그룹웨어였기 때문에 Other SMTP로 설정했다.

 

Other SMTP로 설정하고 나면 아래에 전송 설정 입력 칸들이 나타나는데, 여기서 각각 발신 서버에 대한 정보를 입력해 주면 되는 것 같다.

 


(1) 보내는 메일 서버 호스트 이름: 실제 메일을 발송할 SMTP 서버의 주소. 

** 즉, 인증 서버의 SMTP 주소.

   자체 서버라면 해당 서버의 SMTP 주소, 메일 호스팅을 이용하고 있다면, 메일 호스팅 회사의 SMTP 주소가 필요하다.

** 나는 메일플러그 메일을 이용하고 있어서 테스트를 위해 메일플러그의 SMTP 주소를 입력했다.

   (faq에 나와있었다. 다른 호스팅 회사도 faq에 있을 수 있으니 확인하고 입력하시길. 없다면 문의해야한다)


(2) 보내는 메일 서버 포트 및 보안

 ** 이 또한 자체 서버라면 문의가 필요하고, 메일 호스팅을 이용하고 있다면 faq를 확인하던가 문의해야 한다.

 ** SSL의 경우는 465 / TLS의 경우는 587이다.

 ** 포트 번호에 따라서 보안 Select 박스의 값이 달라진다.


 

(3) 봉투 발신자 이메일 주소: SMTP 서버를 통해 실제로 메일을 발송하는 사람의 이메일 주소

 ** 이 값은 반드시 (4)번의 SMTP 인증에 쓰는 메일 주소와 동일해야한다.


(4) [인증] 사용자 이름: SMTP 서버 로그인에 사용하는 메일 계정 아이디

 ** 폼메일을 보낼 때, 웹사이트가 인증을 거치는 아이디 

 ** 실제 사용하는 메일 주소가 아니어도 되나, 작성한 아이디와 비밀번호로 로그인이 가능해야만 한다.

 --> 쉽게 말하면 메일을 보내야 하는 SMTP 서버한테 나 이 사람 맞아요! 하고 인증을 거치는 것이라고 보면 된다. 

 

 

우선 이것만 설정하면 SMTP 설정은 완료되는 것 같다. 

그러나 메일을 테스트 할 때 오류가 나면 워드프레스 관리자 이메일로 매번 알람이 간다.

나의 경우는 관리자 이메일을 다른 사람으로 설정해 두었기 때문에, 얼른 내 이메일로 변경했다.

 

 

화살표가 가르키는 입력창에다 이메일을 입력하면 된다.

알림이 안가게 하고 싶으면 없음 으로 설정하면 된다.

 

 

메시지 탭으로 가면, 이메일 주소이름을 설정할 수 있는데, 이 내용은 폼메일이 수신되었을 때, 보낸사람에 나오게 된다.

 

(예시) 보낸사람 : 이름(이메일주소)

(받는사람) 받는 메일로 설정한 주소

본문 내용: 

 

 

이런식으로 나오게 된다.

 

 

설정이 완료되면, Post SMTP 의 대시보드로 넘어오면 테스트 이메일을 보낼 수 있는데, 여기서 테스트 이메일을 보내보면 된다.

 

 

 

위 내용을 작성하면서 내가 헷갈리는 부분에 대해서 챗지피티 도움을 받은 내용을 공유하려고 한다.

내용이 너무 길어질까봐 필요한사람만 볼 수 있도록 접어두었다.

더보기


Q1. 3번의 봉투 발신자 이메일 주소는 왜 4번의 SMTP 인증 아이디와 동일해야 하는가?

    (인증에 쓰이는 아이디는 4번에만 있으면 되지 왜 굳이 봉투 발신자 이메일 주소와 동일해야 하는가?)

 

A1. (챗지피티 답변)

    대부분의 SMTP 서버가 "SMTP 인증에 사용한 이메일(To)"과 "봉투 발신자 이메일 주소(From)"이 다를 경우

    발송을 제한하거나 거부 또는 스팸 처리하게 됩니다.

 

 

 

Q2. 3번의 봉투 발신자 이메일 주소 아래에는 작게 아래 내용과 같이 쓰여있는데, 이게 무슨 말인가?

봉투에 인쇄된 반품 주소와 같은 이 주소는 SMTP 서버에 대한 계정 소유자를 식별합니다.


A2. (챗지피티 답변)

     이 문구를 쉽게 풀어서 설명하면 봉투 발신자 이메일 주소는 SMTP 서버 입장에서는 "메일을 실제로 보내는 사람이 누구인지 명확하게 알고 싶다"라는 의미입니다.

      봉투 발신자 이메일 주소에 A가 입력되어 있으면, 메일 서버는 A가 우리 서버에 있는 계정인가?를 확인 한 다음 계정이 있다면 "실제로 이 사람이 메일 보낼 권리가 있다"고 인정해 줍니다. 

      즉, 반품 주소/봉투발신자이메일은 "진짜 우리 서버의 계정 조인임을 보여주는 정보" 라는 뜻입니다.

      → 즉, 이 주소는 “내가 메일을 보내는 서버의 실제 계정 소유자”여야 보안상 안전하고, 스팸 오해를 안 산다.

 

 

 

그러나 나는 이 말을 듣고 정확하게 이해가 가지 않았다.

 

 

Q3. 그럼 네 말은 봉투 발신자 이메일 주소와 인증의 사용자 이름은 완전히 동일한 기능이라는거야?

 

A3. 기능적으로 완전히 동일한 값이어야 하는 것은 아니지만, 목적과 역할이 다릅니다.

    다만, 보안 및 정책 상 대부분의 경우 동일하게 입력하는 것을 ‘권장’하는 것입니다.

 

     [봉투 발신자 이메일 주소(Envelope-From)의 기능]

     실제로 메일을 받는 사람이 보게 되는 보내는 사람(From, Return-Path) 주소입니다.

     SMTP 통신 과정에서 반품 주소로도 쓰입니다.

 

 

이 말을 보고도 이해가 가지 않았다.

보내는 사람 주소를 왜 내가 미리 설정하지? 홈페이지 사용자의 메일 주소가 보내는 사람 주소여야 하는 것 아닌가?

 

 

 

Q4. 메일을 받는 사람이 나라고 가정하면, 내가 받은 메일에 쓰여있는 보내는 사람 이라는거야?

    보내는 사람은 내 홈페이지 사용자가 나에게 보낼텐데, 왜 보내는 사람을 내가 적어?

    그 사람이 보내는 사람이어야 하는거 아니야?

 

A4. 대부분의 폼에는 "이름" "이메일" "메시지" 같은 입력 란이 있음.

    그런데 메일은 "누구 명의"로 발송이 되어야 할까?

    일반적으로 기술적으로는 SMTP 인증에 성공한 계정으로 메일을 보내야 메일 서버가 허락합니다.

    즉, 봉투 발신자도 인증에 쓴 메일이어야 정상적으로 도착합니다. (대부분의 서버 정책)

    만약 방문자 이메일 자체를 From에 넣게 되면 대부분의 SMTP 서버/스팸필터가 "이메일 위조"로 판단해서

    발송 실패 / 스팸 처리합니다.

 

 

 

위 내용에서는 명의에 대해서 얘기했다. 그러나 여전히 궁금했던 점.

메일은 인증된 이메일 명의로 발송된다고 했다. 그럼 봉투 발신자의 의미가 무엇인가?

 

 

Q5. 봉투 발신자는 왜 의미가 있는거야?

     인증은 이미 받았는데, 봉투 발신자는 왜 이메일을 적어야 하며, 왜 같은 이메일이여해?

     이 필드의 존재 이유가 뭐야?

 

여기서는 챗지피티가 SMTP의 동작 원리를 설명해 주었다.

 

봉투 발신자는 이메일을 보낼 때, 메일의 겉봉투에 적는 실제 반송 주소이다.

메일이 실패해서 반송 될 때, 이 주소로 돌아가게 된다.

 

[이 필드가 꼭 필요한 이유]

(1) 실제 반송 처리

     -> 메일이 수신자에게 전달되지 못하면 (수신자 주소 오류 등) 시스템이 실패 통보를 봉투 발신자에 적힌 메일로 보낸다.

         진짜 발신자가 누구인지 식별하고, 제대로 알리려면 정확하고 신뢰할 수 있는 주소가 필요하다.

         만약 누구나 설정할 수 있게 되면 (내가 미리 설정을 안해두면) 스팸/피싱/사칭의 통로가 되어버린다.

         그래서 대부분의 SMTP 서버는, SMTP인증 받은 계정이 자기것임을 증명한 주소만

         봉투 발신자(Envelope-Frome)으로 허락한다.

         Gmail, 네이버, 아웃룩 등 대형 서비스의 스팸 필터는 Envelope-From 주소가 실제 인증받은 계정과 다르면 스팸/발송거부 

         

         인증에 적힌 이메일과 동일해야 하는 이유는 인증 받은 메일 주소는 이미 신뢰 받고 있기 때문에, 봉투 발신자도

         그 인증 계정과 같으면 신뢰성이 유지된다. 

 

 

어느정도 이해가 갔다.

 

즉, 인증은 메일 서버에서 나한테 메일을 안정적으로 보내주기 위한 수단이고

봉투 발신자는 SMTP 통신 에서 메일을 보내는 발송자.

SMTP는 보안이 중요하다. 인증 계정으로 메일 서버에 로그인은 했는데, 이 폼메일을 나한테 전달해 주어야 한다.

수신자는 나, 그럼 발신자는 누구인가?

여기서 발신자를 폼메일을 보낸 사용자의 이메일로 하면 스팸/피싱/사칭의 통로가 된다. 

 

근데 여기서 한가지 더,

폼 사용자의 이메일이 실제로 존재하고 신뢰받는 주소라면 봉투발신자에 써도 되는 것 아닌가?

라는 궁금증이 생겨 한 번 더 질문

 

답변: 존재 여부와 무관하게 아래와 같은 이유 때문에 절대 하면 안 됩니다.

         인증 받지 않은 계정의 명의로 메일을 보내면 '사칭' 입니다.

        메일 서버는 SMTP 인증 계정만 "내가 이 명의의 주인이다"라고 증명할 수 있다. (로그인 했기 때문에)

        폼 사용자의 이메일은 서버에 로그인 한 적도, 인증한 적도 없는 계정인데 그 명의로 메일을 보내게 되면?

        내가 폼 사용자의 이메일을 위조해서 메일을 보내는 것이 됩니다.

        폼 사용자가 아무리 이메일을 등록했더라도 그것은 "내 메일이 이거에요" 라고 알려주는 것 뿐이지 인증이 아님

        인증된 이메일은 오직 내가 위에서 입력한 이메일만이 인증된 이메일임

        따라서 폼에서 아무나 메일 주소를 적은다고, 그 명의로 메일을 발송할 권한이 생기는 것은 아님(사칭)

 

 

이제 이해가 됐다.

근데 나는 실 사용할 때,  발신자 이메일 주소 인증에 들어간 이메일을 다르게 했다. (메일 서버는 메일플러그 동일)

근데 정상적으로 메일 발송이 됐다. 

그렇다면 이것은 왜 그랬던 것일까?

 

챗지피티 답변: 

현재 사용 중인 smtp.mailplug.co.kr의 SMTP 서버가 "봉투 발신자 이메일 주소"와 "인증 계정"이 달라도

일정 조건에서 발송을 허용하고 있다는 뜻입니다.

--> 일부 호스팅 / 메일서버는 같은 도메인 계정 끼리는 인증 계정과 봉투 발신자가 달라도 허용해 준다.