본문 바로가기
카테고리 없음

네이버 Cloud Outbound Mailer 예제 - 파이썬

by 이혁진 2021. 3. 31.

사내 대용량 메일 또는 메일 대량 보내기 위하,

네이버 클라우드 서비스 중 Mailer 서비스를 예제입니다.

기본 샘플코드는 파이썬 샘플 입니다.

- https://github.com/NaverCloudPlatform/outbound_mailer_python_sample

- 네이버클라우드 플랫폼이 운영하는 github로 보이네요

서비스를 사용하기 위한 순서는 다음과 같습니다.

1. 네이버 Cloud Outbound Mailer 서비스 신청

- 그냥 캠쳐된 그림대로 누르시면 됩니다.

- URL 입니다. : https://www.ncloud.com/product/applicationService/cloudOutboundMailer 

1-1. 네이버 Cloud Outbound Mailer 서비스 신청

- 위 이용신청을 하면, 네이버 Cloud Outbound Mailer 콘솔로 이동하는데요.

- 그냥 캠쳐된 그림대로 누르시면 됩니다.

- URL는 https://console.ncloud.com/dashboard 이긴한데,

2. 인증 KEY를 획득해야 합니다.

- 그냥 캠쳐된 그림대로 누르시면 됩니다.

- https://www.ncloud.com 로 이동 하셔서, 마이페이지 > 인증키 관리 메뉴입니다.

- 이 중 access key 하고 Secret key를 메모 해두심 됩니다.

2-1. 인증 KEY를 획득해야 합니다.

- 다시 네이버 Cloud 콘솔로 이동 하여, 아래 메뉴대로 발급받으시면 됩니다.

- API KEY > Primary Key 를 적어 두시면 됩니다.

- 파이선 예제에서는 해당 키를 사용하는 코드부분은 없는데, 예제에서 시키니까 그냥 아무생각없이 발급 받습니다.

3. 샘플 코드

- 파이선 샘플코드로 - https://github.com/NaverCloudPlatform/outbound_mailer_python_sample 여기서 mail_sender.py 파일을 조금 만저 봤습니다.

- 셜명은 코드 주석으로 합니다.

- 자세한 메일내용포맷 등은 API 메뉴얼 https://apidocs.ncloud.com/ko/ai-application-service/cloud_outbound_mailer/ 을 참조하시면 될듯 합니다.

 

import hashlib
import hmac
import base64
import time
import urllib.parse
import urllib.request
import ssl
import json
from base_auth_info import BaseAuthInfo


class MailSender(BaseAuthInfo):

    # BaseAuthInfo 은 위에서 발급 받은 인증키 및 API URL 정보만 있는 클래스입니다. 
    auth_info = BaseAuthInfo()

    # API 호출 경로
    ep_path = auth_info.get_mail_ep_path()

    # API KEY 
    api_key = auth_info.get_api_key()

    # 인증 KEY
    access_key = auth_info.get_access_key()
    access_secret = auth_info.get_access_secret()

    def req_email_send(self, mail_info):
        context = ssl._create_unverified_context()

        req = urllib.request.Request(self.ep_path)

        timestamp = self.get_timestamp()

        # 해당 시간이 5분이상 차이나면 안간다고 합니다. 서버나 머신 시간에 유의해야 될 듯하네요 
        req.add_header('x-ncp-apigw-timestamp', timestamp)

        # 아래 두줄이 헤서 인증 부분이네요 
        req.add_header('x-ncp-iam-access-key', self.access_key)
        req.add_header('x-ncp-apigw-signature-v1', self.make_signature(timestamp))
        req.add_header('Content-Type', 'application/json')

        # 메일 제목, 내용 등은 포멧은 무조건 json 형태를 사용하나 봅니다. 
        json_data = json.dumps(mail_info)
        json_data_bytes = json_data.encode('utf-8')

        response = urllib.request.urlopen(req, json_data_bytes, context=context)

        return response

    @staticmethod
    def get_timestamp():
        timestamp = int(time.time() * 1000)
        timestamp = str(timestamp)
        return timestamp

    def make_signature(self, timestamp):

        access_secret_bytes = bytes(self.access_secret, 'UTF-8')

        method = "POST"
        uri = "/api/v1/mails"

        message = method + " " + uri + "\n" + timestamp + "\n" + self.access_key
        message = bytes(message, 'UTF-8')
        signing_key = base64.b64encode(hmac.new(access_secret_bytes, message, digestmod=hashlib.sha256).digest())

        return signing_key


if __name__ == '__main__':

    mail_info = {
        "senderAddress": "보내는 사람 이메일 주소",
        "title": "${customer_name}님 반갑습니다. ",
        "body": "귀하의 등급이 ${BEFORE_GRADE}에서 ${AFTER_GRADE}로 변경되었습니다.",
        "recipients": [
            {
                "address": "받는사람 이메일 주소",
                "name": "홍길동",
                "type": "R",
                "parameters": {
                    "customer_name": "홍길동",
                    "BEFORE_GRADE": "SILVER",
                    "AFTER_GRADE": "GOLD"
                }
            }
        ],
        "individual": True,
        "advertising": False
    }

    res = MailSender().req_email_send(mail_info)

   # 결과 코드를 보여주네요 상세 내용
    result = res.getcode()

    print(result)

 

 

기타 참조 : 그냥 서비스 소개서

https://docs.ncloud.com/ko/email/email-1-1.html

이상입니다.