위어드섹터 공식 블로그

[ 백엔드/PHP ] 네이버 Cloud Outbound Mailer 사용 방법 본문

Developing/백엔드

[ 백엔드/PHP ] 네이버 Cloud Outbound Mailer 사용 방법

위어드섹터 2022. 7. 8. 11:06

사용자 정보를 폼에서 입력받아 전송버튼을 클릭하면 입력받은 정보를 메일로 받도록 하는 작업을 진행했습니다.

이 작업을 위해 네이버의 Cloud Outbound Mailer API를 사용하였는데, 공식문서와 블로그를 참고해도 메일이 발송되지 않았습니다.

 

이번 글에는 Cloud Outbound Mailer API를 적용하는 방법 및 오류해결을 위해 제가 시도했던 방법을 공유해보려 합니다.

 

 

1. Cloud Outbound Mailer란?

Cloud Outbound Mailer는 개인화 콘텐츠 메일을 빠르고 안정적으로 전송할 수 있는 서비스입니다. 알림, 정보, 마케팅 대량 메일을 UI를 통해서 쉽게 전송하거나 운영하고 있는 서비스에 연결해 전송할 수 있습니다. 또한 운영 중인 서비스에 Cloud Outbound Mailer를 연결하면 제공되는 API를 이용하여 메일을 전송할 수 있습니다.
[ 참고 ] https://guide.ncloud-docs.com/docs/email-email-1-1

 


2. PHP를 이용하여 작업하기


2-1. 공통 헤더 작성
 공통 인증 헤더에는 아래와 같은 내용을 작성합니다.      

 

x-ncp-apigw-timestamp 1970년 1월 1일 00:00:00 협정 세계시(UTC)부터의 경과 시간을 밀리초(Millisecond)로 나타내며 API Gateway 서버와 시간 차가 5분 이상 나는 경우 유효하지 않은 요청으로 간주
x-ncp-apigw-timestamp:{Timestamp}
x-ncp-iam-
access-key
NAVER Cloud Platform 포털에서 발급받은 Access Key ID 값
x-ncp-iam-access-key:{Account Access Key}
x-ncp-apigw-signature-v2 Access Key ID 값 과 Secret Key 로 암호화한 서명
x-ncp-apigw-signature-v2:{API Gateway Signature}

 

  • 인증키 생성 방법
    • NAVER Cloud Platform 포털의 마이페이지 > 계정관리 > 인증키 관리 메뉴에서 신규 API 인증키 생성을 클릭하여 Access Key ID, Secret Key를 생성합니다
    • 만약 Access Key ID, Secret Key가 있다면 해당 키를 사용합니다.

 

 

       공통 헤더를 아래와 같이 작성합니다.

 

  $headers = array(
            "Content-Type: application/json; charset=UTF-8",
            "x-ncp-apigw-timestamp: " . $time . "",
            "x-ncp-iam-access-key: " . $access_key . "",
            "x-ncp-apigw-signature-v2: " . makeSignature() . ""
     );

 

 

2-2. 메일 본문 내용 작성

 

메일 본문을 아래와 같이 작성합니다.

수신자는 배열을 통해 여러명에게 전송 할 수 있고,

type을 통해 수신자 유형을 바꿀 수 있습니다. 

* R : 수신자, C : 참조, B : 숨은 참조

 

폼에서 입력받은 정보를 받아와 HTML 형식으로 변경 후, $data에 넣어주었습니다.

 

    $mailContentsDataSet["senderAddress"] = "test@weirdsector.co.kr"; //보내는 메일 주소
    $mailContentsDataSet["senderName"] = "위어드섹터"; //보내는이 이름
    $mailContentsDataSet["title"] = "test"; //메일 제목


    $mailContentsDataSet["body"] = stripslashes(htmlspecialchars_decode($data)); //본문내용 HTML 형식
    $mailContentsDataSet["recipients"][] = array("address" => "test2@weirdsector.co.kr", "name" => "test", "type" => "R"); //받는 메일 주소 (R : 수신자)
    $mailContentsDataSet["recipients"][] = array("address" => "test2@weirdsector.co.kr", "name" => "test", "type" => "C"); //받는 메일 주소 (C : 참조)

 

위에 작성한 파라미터 외에 필요한 파라미터는 아래 링크에서 자세히 확인 할 수 있습니다.

https://api.ncloud-docs.com/docs/ai-application-service-cloudoutboundmailer-createmailrequest



2-3. 메일 전송

이제 메일만 전송하면 끝입니다.

 

 

    $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://mail.apigw.ntruss.com/api/v1/mails");
        curl_setopt($ch, CURLOPT_HEADER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //원격 서버의 인증서가 유효한지 검사 안함
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //요청 결과를 문자열로 반환
        curl_setopt($ch, CURLOPT_POST, true); //true시 post 전송
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($mailContentsDataSet)); //POST data

    $response = curl_exec($ch);
    curl_close($ch);

    return $response;

 

 

3. 오류 및 해결방법

 

3-1. 송/수신자가 같은 메일을 쓰는 경우

폼 전송버튼을 클릭하였는데 메일이 보내지지않아 네이버측에 문의해본 결과, 송신자와 수신자의 메일주소가 같으면 때때로 스팸메일로 분류되는 상황이 발생한다고 합니다.

 

3-2. 수신자의 type => R 을 여러개 사용 하는 경우

수신자는 배열을 통해 여러개를 입력 할 수 있다고 공식문서에 적혀있어 저도 여러 메일을 입력하였습니다. 그런데 메일 전송이 되지않아 골머리를 앓고 있었는데 혹시나 하고 type => R (수신자)을 하나만 적고, 나머지 메일을 type => C (참조)로 넣었더니 작동하였습니다.

 

 

4. 참고했던 사이트

 

 

 

 

블로그 구독자 문의 주소 : info@weirdsector.co.kr

그로스 해킹 파트너, LABBIT 바로가기

LABBIT을 운영하는 Team 위어드섹터 만나러 가기