사내 대용량 메일 또는 메일 대량 보내기 위하,
네이버 클라우드 서비스 중 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
이상입니다.