일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- UX
- 프리토타이핑
- Pretotyping
- 구글애널리틱스4
- 프론트엔드
- JavaScript
- 그로스해킹
- 개발자
- 인터뷰
- 데이터분석
- 개발스터디
- 구글애즈
- 디자이너
- 컴포넌트
- 위어드섹터
- Weirdsector
- 피그마
- growthhacking
- 개발자인터뷰
- 마케팅
- 개발일지
- figma
- 데이터너겟
- Datanugget
- 프론트엔드개발자
- 구글애널리틱스
- GA4
- 개발공부
- 그로스해커
- LABBIT
- Today
- Total
위어드섹터 공식 블로그
[ 백엔드/PHP ] 네이버 Cloud Outbound Mailer 사용 방법 본문
사용자 정보를 폼에서 입력받아 전송버튼을 클릭하면 입력받은 정보를 메일로 받도록 하는 작업을 진행했습니다.
이 작업을 위해 네이버의 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. 참고했던 사이트
- https://api.ncloud-docs.com/docs/ai-application-service-cloudoutboundmailer
- https://qjadud22.tistory.com/37
- http://daplus.net/php-php-curl-%EC%BB%A4%EC%8A%A4%ED%85%80-%ED%97%A4%EB%8D%94/
- https://yoshikixdrum.tistory.com/195
블로그 구독자 문의 주소 : info@weirdsector.co.kr
'Developing > 백엔드' 카테고리의 다른 글
[백엔드 / PHP - Laravel] Eloquent ORM 을 사용하여 DB에 데이터 삽입, 조회 방법 (0) | 2022.10.18 |
---|