{"id":2654,"date":"2024-03-25T02:18:40","date_gmt":"2024-03-24T17:18:40","guid":{"rendered":"https:\/\/manvscloud.com\/?p=2654"},"modified":"2024-03-25T02:22:20","modified_gmt":"2024-03-24T17:22:20","slug":"ncloud-sub-account-%ed%9a%a8%ec%9c%a8%ec%a0%81%ec%9c%bc%eb%a1%9c-%ea%b4%80%eb%a6%ac%ed%95%98%ea%b8%b0-2%ed%8e%b8","status":"publish","type":"post","link":"https:\/\/manvscloud.com\/?p=2654","title":{"rendered":"[NCLOUD] Sub Account \ud6a8\uc728\uc801\uc73c\ub85c \uad00\ub9ac\ud558\uae30 [2\ud3b8]"},"content":{"rendered":"\n<p>\uc548\ub155\ud558\uc138\uc694 MANVSCLOUD \uae40\uc218\ud604\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc9c0\ub09c [1\ud3b8]\uc5d0\uc11c\ub294 Sub Account\uc758 API\ub97c \uc774\uc6a9\ud558\uc5ec \uc811\uc18d \ucd5c\uc885 \uc77c\uc2dc\uac00 \ud2b9\uc815 \uae30\uac04\uc774 \ucd08\uacfc\ub420 \uacbd\uc6b0 \ube44\ud65c\uc131\ud654\ud558\ub294 Python \ucf54\ub4dc\ub97c \uc791\uc131\ud558\uace0 \uc790\ub3d9\ud654\ud560 \uc218 \uc788\ub294 \ubc29\ubc95\uc744 \uacf5\uc720\ub4dc\ub838\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<ul>\n<li><strong>[NCLOUD] Sub Account \ud6a8\uc728\uc801\uc73c\ub85c \uad00\ub9ac\ud558\uae30 [1\ud3b8] :<\/strong> <a href=\"https:\/\/manvscloud.com\/?p=2646\">https:\/\/manvscloud.com\/?p=2646<\/a><\/li>\n<\/ul>\n\n\n\n<p>\uc774\ubc88 \ud3ec\uc2a4\ud305\uc5d0\uc11c\ub294 [1\ud3b8]\uc5d0\uc11c \uc870\uae08 \ub354 \uc5c5\uadf8\ub808\uc774\ub4dc\ub41c \uae30\ub2a5\uc744 \ud568\uaed8 \ub9cc\ub4e4\uc5b4\ubcf4\ub294 \uc2dc\uac04\uc744 \uac00\uc838\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. <\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\">1) \ub124\uc774\ubc84 \ud074\ub77c\uc6b0\ub4dc\uc758 Cloud Outbound Mailer\ub97c \uc0ac\uc6a9\ud558\uc5ec \ube44\ud65c\uc131\ud654\ub41c \uc0ac\uc6a9\uc790\uc758 \uc774\uba54\uc77c\ub85c \ube44\ud65c\uc131\ud654\uac00 \ub418\uc5c8\uc73c\ub2c8 \ub2e4\uc2dc Sub Account \uc0ac\uc6a9\uc774 \ud544\uc694\ud55c \uacbd\uc6b0 \uad00\ub9ac\uc790\uc5d0\uac8c \ubb38\uc758\ud558\ub77c\ub294 \uba54\uc77c\uc744 \ubcf4\ub0b4\ubcfc \uac83\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\">2) \ubaa8\ub4e0 \ucf54\ub4dc\ub97c Cloud Functions\uc5d0\uc11c \ub3d9\uc791\ud558\ub3c4\ub85d \uad6c\uc131\ud574\ubcfc \uac83\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc704 \ub450 \uacfc\uc815\uc744 \uc5b4\ub5bb\uac8c \uc801\uc6a9\ud560 \uc218 \uc788\ub294\uc9c0 \uc9c0\uae08\ubd80\ud130 \uc54c\uc544\ubd05\uc2dc\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading has-white-color has-vivid-green-cyan-background-color has-text-color has-background\"> Cloud Outbound Mailer<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"896\" height=\"512\" src=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/24185158\/ncloud-com.png\" alt=\"\" class=\"wp-image-2664\" srcset=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/24185158\/ncloud-com.png 896w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/24185158\/ncloud-com-300x171.png 300w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/24185158\/ncloud-com-768x439.png 768w\" sizes=\"(max-width: 896px) 100vw, 896px\" \/><\/figure>\n\n\n\n<p>\uc774 \ud3ec\uc2a4\ud305\uc5d0\uc11c\ub294 Cloud Outbound Mailer \uc0dd\uc131 \ubc29\ubc95\uc740 \uc548\ub0b4\ud558\uace0 \uc788\uc9c0\uc54a\uc2b5\ub2c8\ub2e4. Cloud Outbound Mailer\ub294 \uc544\ub798 \uac00\uc774\ub4dc\ub97c \ucc38\uace0\ud558\uc5ec \uc0dd\uc131\ud574\uc8fc\uc138\uc694.<\/p>\n\n\n\n<ul>\n<li><strong>Cloud Outbound Mailer \uc0ac\uc6a9 \uac00\uc774\ub4dc :<\/strong> <a href=\"https:\/\/guide.ncloud-docs.com\/docs\/email-email-1-1\">https:\/\/guide.ncloud-docs.com\/docs\/email-email-1-1<\/a><\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"465\" src=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/24185712\/ncloud-com2-1024x465.png\" alt=\"\" class=\"wp-image-2665\" srcset=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/24185712\/ncloud-com2-1024x465.png 1024w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/24185712\/ncloud-com2-300x136.png 300w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/24185712\/ncloud-com2-768x349.png 768w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/24185712\/ncloud-com2-1536x697.png 1536w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/24185712\/ncloud-com2-2048x930.png 2048w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/24185712\/ncloud-com2-1080x490.png 1080w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\uc704\uc640 \uac19\uc774 \ub3c4\uba54\uc778 \ub4f1\ub85d\uc774 \ub418\uc5b4\uc788\ub2e4\uba74 Cloud Outbound Mailer\uc758 API\ub97c \uc774\uc6a9\ud558\uc5ec \uba54\uc77c \ubc1c\uc1a1 \ud14c\uc2a4\ud2b8\ub97c \uc544\ub798\uc640 \uac19\uc774 \uc9c4\ud589\ud574\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import hashlib\nimport hmac\nimport base64\nimport requests\nimport time\n\ndef main():\n\n    timestamp = int(time.time() * 1000)\n    timestamp = str(timestamp)\n\n    access_key = \"YOUR_ACCESS_KEY\"\n    secret_key = \"YOUR_SECRET_KEY\"\n    secret_key = bytes(secret_key, 'UTF-8')\n\n    method = \"POST\"\n\n    api_server = \"https:\/\/mail.apigw.ntruss.com\"\n    uri = \"\/api\/v1\/mails\"\n    uri = uri + \"?responseFormatType=json\"\n\n    message = method + \" \" + uri + \"\\n\" + timestamp + \"\\n\" + access_key\n    message = bytes(message, 'UTF-8')\n    signingKey = base64.b64encode(hmac.new(secret_key, message, digestmod=hashlib.sha256).digest())\n\n    http_header = {\n        'Content-Type': 'application\/json',\n        'x-ncp-apigw-signature-v1': signingKey,\n        'x-ncp-apigw-timestamp': timestamp,\n        'x-ncp-iam-access-key': access_key\n        }\n\n    payload = {\n        \"senderAddress\" : \"\ubc1c\uc2e0\uc790 \uc774\uba54\uc77c\",\n        \"senderName\" : \"\ubc1c\uc2e0\uc790 \uc774\ub984\",\n        \"title\" : \"\uc81c\ubaa9\",\n        \"body\" : \"\uba54\uc77c \ub0b4\uc6a9\",\n        \"recipients\" : [{\"address\" : \"\uc218\uc2e0\uc790 \uc774\uba54\uc77c\", \"type\" : \"R\"}]\n    }\n\n    response = requests.post(api_server + uri, headers=http_header, json=payload)\n\n\nif __name__ == '__main__':\n    main()\n<\/pre>\n\n\n\n<p>\ucd94\uac00\ub41c  Access Key\uc5d0\ub294 \ub2f9\uc5f0\ud788 \uba54\uc77c\uc744 \ubc1c\uc1a1\ud560 \uc218 \uc788\ub294 \uad8c\ud55c\uc774 \ubd80\uc5ec\ub418\uc5b4\uc788\uc5b4\uc57c \ud558\uba70, payload\uc5d0 \ubc1c\uc2e0\uc790 \uc774\uba54\uc77c, \ubc1c\uc2e0\uc790 \uc774\ub984, \uc81c\ubaa9, \uba54\uc77c \ub0b4\uc6a9, \uc218\uc2e0\uc790 \uc774\uba54\uc77c\uc744 \uac01\uac01 \ucd94\uac00\ud574\uc90d\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc774\uc81c [NCLOUD] Sub Account \ud6a8\uc728\uc801\uc73c\ub85c \uad00\ub9ac\ud558\uae30 [1\ud3b8]\uc5d0\uc11c \ub9cc\ub4e0 \ucf54\ub4dc\uc640 \uc704 Cloud Outbound Mailer API\ub85c \uba54\uc77c\uc744 \ubc1c\uc1a1\ud558\ub294 \ucf54\ub4dc\ub97c \ud558\ub098\ub85c \ud569\uccd0\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import requests\nimport json\nimport base64\nimport hashlib\nimport hmac\nimport time\nfrom datetime import datetime, timedelta\n\nclass SubAccountAPI:\n    def __init__(self, access_key, secret_key, api_server, mail_server):\n        self.access_key = access_key\n        self.secret_key = bytes(secret_key, 'UTF-8')\n        self.api_server = api_server\n        self.mail_server = mail_server\n\n    def generate_signature(self, method, uri, timestamp):\n        message = f\"{method} {uri}\\n{timestamp}\\n{self.access_key}\"\n        signing_key = base64.b64encode(hmac.new(self.secret_key, bytes(message, 'UTF-8'), digestmod=hashlib.sha256).digest())\n        return signing_key\n\n    def make_request(self, method, uri, body=None, is_mail=False):\n        timestamp = str(int(time.time() * 1000))\n        signature = self.generate_signature(method, uri, timestamp)\n\n        headers = {\n            'Content-Type': 'application\/json',\n            'x-ncp-apigw-timestamp': timestamp,\n            'x-ncp-iam-access-key': self.access_key,\n            'x-ncp-apigw-signature-v1' if is_mail else 'x-ncp-apigw-signature-v2': signature\n        }\n\n        full_uri = self.mail_server + uri if is_mail else self.api_server + uri\n        response = requests.request(method, full_uri, headers=headers, data=json.dumps(body))\n        return response.json()\n\n    def get_sub_accounts(self):\n        response_data = self.make_request(\"GET\", \"\/api\/v1\/sub-accounts\")\n        ninety_days_ago = datetime.now() - timedelta(days=90)\n        return [\n            item for item in response_data['items']\n            if item['canConsoleAccess'] and item.get('active', True) and item.get('lastLoginTime') and\n            datetime.strptime(item.get('lastLoginTime'), \"%Y-%m-%dT%H:%M:%SZ\") &lt; ninety_days_ago\n        ]\n\n\n    def modify_sub_account(self, sub_account_id, body_data):\n        self.make_request(\"PUT\", f\"\/api\/v1\/sub-accounts\/{sub_account_id}\", body_data)\n\n    def send_email(self, recipient_email):\n        payload = {\n            \"senderAddress\": \"\ubc1c\uc2e0\uc790 \uc774\uba54\uc77c\",\n            \"senderName\": \"\ubc1c\uc2e0\uc790 \uc774\ub984\",\n            \"title\": \"\uc81c\ubaa9\",\n            \"body\": \"\uba54\uc77c \ub0b4\uc6a9\",\n            \"recipients\": [{\"address\": recipient_email or \"\uad00\ub9ac\uc790 \uc774\uba54\uc77c\", \"type\": \"R\"}]\n        }\n        self.make_request(\"POST\", \"\/api\/v1\/mails?responseFormatType=json\", body=payload, is_mail=True)\n\ndef main():\n    api = SubAccountAPI(\"YOUR_ACCESS_KEY\", \"YOUR_SECRET_KEY\", \"https:\/\/subaccount.apigw.ntruss.com\", \"https:\/\/mail.apigw.ntruss.com\")\n    for account in api.get_sub_accounts():\n        api.modify_sub_account(account['subAccountId'], {\"active\": False, \"name\": account.get('name')})\n        api.send_email(account.get('email', \"\uad00\ub9ac\uc790 \uc774\uba54\uc77c\"))\n\nif __name__ == '__main__':\n    main()\n<\/pre>\n\n\n\n<p>Sub Account\uc5d0\uc11c \ucd5c\uc885 \uc811\uc18d \uc77c\uc2dc\uac00 90\uc77c\uc774 \ucd08\uacfc\ub41c \uacbd\uc6b0 \ud574\ub2f9 \uacc4\uc815\uc744 \ube44\ud65c\uc131\ud654 \uc2dc\ud0a4\uace0 Outbound Mailer\ub97c \uc774\uc6a9\ud558\uc5ec \uc774\uba54\uc77c\uc744 \ubc1c\uc1a1\ud558\ub294 \ucf54\ub4dc\uc785\ub2c8\ub2e4. \uae30\uc874 \ucf54\ub4dc\uc5d0\uc11c \ucd94\uac00\ub85c \ub354 \uc5c5\uadf8\ub808\uc774\ub4dc\ub41c \ubd80\ubd84\uc740 \uc774\ubbf8 \ube44\ud65c\uc131\ud654\ub41c \uacc4\uc815\uc758 \uacbd\uc6b0 \ucd94\uac00\uc801\uc73c\ub85c \uba54\uc77c\uc774 \ubc1c\uc1a1\ub418\uba74 \uc548\ub418\uae30\ub54c\ubb38\uc5d0 \uae30\uc874\uc5d0 \ube44\ud65c\uc131\ud654\uc600\ub358 Sub Account\ub294 \uba54\uc77c\uc744 \ubc1c\uc1a1\ud558\uc9c0 \uc54a\uace0 90\uc77c\uc774 \ucd08\uacfc\ub41c \ud65c\uc131\ud654 \uacc4\uc815\uc774 \ube44\ud65c\uc131\ud654\ub41c \uacbd\uc6b0\uc5d0\ub9cc \uba54\uc77c\uc774 \ubc1c\uc1a1\ub418\ub3c4\ub85d \ubcc0\uacbd\ud558\uc600\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading has-white-color has-vivid-cyan-blue-background-color has-text-color has-background\"> Cloud Functions<\/h3>\n\n\n\n<p>\uc774\uc81c \ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc704\uc5d0\uc11c \ub9cc\ub4e0 \ucf54\ub4dc\ub97c Cloud Functions\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ucd5c\uc885 \ub9ac\ud329\ud1a0\ub9c1 \uc791\uc5c5\uc744 \uc9c4\ud589\ud574\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"131\" src=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/25015954\/image-1-1024x131.png\" alt=\"\" class=\"wp-image-2669\" srcset=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/25015954\/image-1-1024x131.png 1024w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/25015954\/image-1-300x38.png 300w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/25015954\/image-1-768x98.png 768w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/25015954\/image-1-1536x197.png 1536w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/25015954\/image-1-1080x138.png 1080w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/25015954\/image-1.png 1622w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import requests\nimport json\nimport base64\nimport hashlib\nimport hmac\nimport time\nfrom datetime import datetime, timedelta\n\ndef generate_signature(secret_key, access_key, method, uri, timestamp):\n    message = f\"{method} {uri}\\n{timestamp}\\n{access_key}\"\n    signing_key = base64.b64encode(hmac.new(bytes(secret_key, 'UTF-8'), bytes(message, 'UTF-8'), digestmod=hashlib.sha256).digest())\n    return signing_key\n\ndef make_request(args, method, uri, body=None, is_mail=False):\n    timestamp = str(int(time.time() * 1000))\n    signature = generate_signature(args[\"NCLOUD_SECRET_KEY\"], args[\"NCLOUD_ACCESS_KEY\"], method, uri, timestamp)\n\n    headers = {\n        'Content-Type': 'application\/json',\n        'x-ncp-apigw-timestamp': timestamp,\n        'x-ncp-iam-access-key': args[\"NCLOUD_ACCESS_KEY\"],\n        'x-ncp-apigw-signature-v1' if is_mail else 'x-ncp-apigw-signature-v2': signature\n    }\n\n    full_uri = args[\"MAIL_SERVER\"] + uri if is_mail else args[\"SUBACCOUNT_SERVER\"] + uri\n    response = requests.request(method, full_uri, headers=headers, data=json.dumps(body))\n    return response.json()\n\ndef get_sub_accounts(args):\n    response_data = make_request(args, \"GET\", \"\/api\/v1\/sub-accounts\")\n    ninety_days_ago = datetime.now() - timedelta(days=int(args[\"DAYS\"]))\n    return [\n        item for item in response_data['items']\n        if item['canConsoleAccess'] and item.get('active', True) and item.get('lastLoginTime') and\n        datetime.strptime(item.get('lastLoginTime'), \"%Y-%m-%dT%H:%M:%SZ\") &lt; ninety_days_ago\n    ]\n\ndef modify_sub_account(args, sub_account_id, body_data):\n    make_request(args, \"PUT\", f\"\/api\/v1\/sub-accounts\/{sub_account_id}\", body_data)\n\ndef send_email(args, recipient_email):\n    payload = {\n        \"senderAddress\": args[\"SENDER_EMAIL\"],\n        \"senderName\": args[\"SENDER_NAME\"],\n        \"title\": args[\"TITLE\"],\n        \"body\": args[\"BODY\"],\n        \"recipients\": [{\"address\": recipient_email or args[\"ADMIN_EMAIL\"], \"type\": \"R\"}]\n    }\n    make_request(args, \"POST\", \"\/api\/v1\/mails?responseFormatType=json\", body=payload, is_mail=True)\n\ndef main(args):\n    accounts = get_sub_accounts(args)\n    for account in accounts:\n        modify_sub_account(args, account['subAccountId'], {\"active\": False, \"name\": account.get('name')})\n        send_email(args, account.get('email', args[\"ADMIN_EMAIL\"]))\n\n    return {\"message\": \"Process completed\"}\n\n<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\"ADMIN_EMAIL\":\"\uad00\ub9ac\uc790\uc774\uba54\uc77c\",\"BODY\":\"Sub Account\uac00 \ube44\ud65c\uc131\ud654 \ucc98\ub9ac\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc7ac\uc0ac\uc6a9\uc774 \ud544\uc694\ud558\uc2e4 \uacbd\uc6b0 \uad00\ub9ac\uc790\uc5d0\uac8c \ubb38\uc758\uc8fc\uc138\uc694.\",\"SENDER_EMAIL\":\"\ubc1c\uc1a1\uc790 \uc774\uba54\uc77c\",\"MAIL_SERVER\":\"https:\/\/mail.apigw.ntruss.com\",\"TITLE\":\"[\uc54c\ub9bc] Sub Account \ube44\ud65c\uc131\ud654 \ucc98\ub9ac\",\"NCLOUD_ACCESS_KEY\":\"YOUR_ACCESS_KEY\",\"NCLOUD_SECRET_KEY\":\"YOUR_ACCESS_KEY\",\"SENDER_NAME\":\"\ubc1c\uc1a1\uc790 \uc774\ub984\",\"SUBACCOUNT_SERVER\":\"https:\/\/subaccount.apigw.ntruss.com\",\"DAYS\":\"90\"}<\/pre>\n\n\n\n<p>\ub514\ud3f4\ud2b8 \ud30c\ub77c\ubbf8\ud130\ub294 \uc704\uc640 \uac19\uc774 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud30c\ub77c\ubbf8\ud130 \uac12\uc744 \uc6d0\ud558\ub294\ub300\ub85c \uc9c0\uc815\ud574\uc8fc\uc138\uc694.<\/p>\n\n\n\n<ul>\n<li><strong>ADMIN_EMAIL : <\/strong>Sub Account\uc5d0 \uc774\uba54\uc77c\uc774 \ub4f1\ub85d\ub418\uc9c0 \uc54a\uc744 \uacbd\uc6b0 \ub300\ud45c\ub85c \ubc1b\uc744 \uad00\ub9ac\uc790 \uc774\uba54\uc77c\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694. ex) admin@manvscloud.com<\/li>\n\n\n\n<li><strong>BODY : <\/strong>\uba54\uc77c \ubc1c\uc1a1 \uc2dc \uba54\uc77c\uc758 \ub0b4\uc6a9\uc785\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>SENDER_EMAIL :<\/strong> \ubc1c\uc2e0\uc790 \uc774\uba54\uc77c\uc785\ub2c8\ub2e4. Cloud Outbound Mailer\uc5d0 \ub4f1\ub85d\ub41c \ub3c4\uba54\uc778\uc744 \uc0ac\uc6a9\ud574\uc8fc\uc138\uc694. ex) noti@manvscloud.com<\/li>\n\n\n\n<li><strong>TITLE : <\/strong>\uba54\uc77c \ubc1c\uc1a1 \uc2dc \uba54\uc77c\uc758 \uc81c\ubaa9\uc785\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>NCLOUD_ACCESS_KEY :<\/strong> Sub Account \uc870\ud68c \ubc0f \ube44\ud65c\uc131\ud654 \uad8c\ud55c \uadf8\ub9ac\uace0 Cloud Outbound Mailer\uc758 \uba54\uc77c \ubc1c\uc1a1 \uad8c\ud55c\uc774 \uc788\ub294 Access Key<\/li>\n\n\n\n<li><strong>NCLOUD_SECRET_KEY : <\/strong>Sub Account \uc870\ud68c \ubc0f \ube44\ud65c\uc131\ud654 \uad8c\ud55c \uadf8\ub9ac\uace0 Cloud Outbound Mailer\uc758 \uba54\uc77c \ubc1c\uc1a1 \uad8c\ud55c\uc774 \uc788\ub294 Access Key\uc758 Secret Key<\/li>\n\n\n\n<li><strong>SENDER_NAME : <\/strong>\ubc1c\uc2e0\uc790 \uc774\ub984<\/li>\n\n\n\n<li><strong>DAYS : <\/strong>\ucd5c\uc885 \uc811\uc18d \uc77c\uc2dc \ud0d0\uc9c0 \uae30\uac04 ex) 90 \uc73c\ub85c \uc124\uc815 \uc2dc 90\uc77c<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"840\" height=\"226\" src=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/25020946\/image-2.png\" alt=\"\" class=\"wp-image-2670\" srcset=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/25020946\/image-2.png 840w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/25020946\/image-2-300x81.png 300w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/25020946\/image-2-768x207.png 768w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/><\/figure>\n\n\n\n<p>\uc2e4\ubb34\uc5d0\uc11c \uc0ac\uc6a9 \uc2dc KMS(Key Management Service)\ub97c \uc0dd\uc131\ud558\uc5ec \ubc18\ub4dc\uc2dc NCLOUD_ACCESS_KEY\uc640 NCLOUD_SECRET_KEY\ub294 \uc554\ud638\ud654 \uc124\uc815\uc744 \ud574\uc8fc\uc138\uc694.<\/p>\n\n\n\n<p>\uc704 Action\uc5d0 Cron\uacfc \uac19\uc740 Trigger\ub97c \uc5f0\uacb0\ud558\uc5ec \uc0ac\uc6a9\ud55c\ub2e4\uba74 \ud558\ub8e8\ub9c8\ub2e4 Cloud Functions\uc774 \ud55c \ubc88\uc529 \uc624\ub798\ub41c Sub Account \uacc4\uc815\uc774 \uc788\ub294\uc9c0 \uccb4\ud06c\ud558\uace0 \ube44\ud65c\uc131\ud654 \ucc98\ub9ac \ubc0f \uba54\uc77c\ub85c \uc54c\ub9bc\uc744 \uc8fc\uac8c \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"365\" src=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/25021135\/image-3-1024x365.png\" alt=\"\" class=\"wp-image-2671\" srcset=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/25021135\/image-3-1024x365.png 1024w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/25021135\/image-3-300x107.png 300w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/25021135\/image-3-768x273.png 768w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/25021135\/image-3-1080x384.png 1080w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/25021135\/image-3.png 1163w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\uc5ec\uae30\uae4c\uc9c0 \uc798 \ub530\ub77c\uc654\ub2e4\uba74 \uc0dd\uc131\ub41c Action\uc744 [\uc2e4\ud589]\ud55c \ud6c4 Sub Account\uac00 \ube44\ud65c\uc131\ud654 \ub418\uc5c8\ub294\uc9c0, \uc774\uba54\uc77c\uc774 Sub Account\uc5d0 \ub4f1\ub85d\ub41c \uc774\uba54\uc77c\ub85c \uc798 \ubc1c\uc1a1\ub418\uc5c8\ub294\uc9c0, Sub Account\uc5d0 \uc774\uba54\uc77c\uc774 \ub4f1\ub85d\ub418\uc5b4\uc788\uc9c0 \uc54a\ub2e4\uba74 \uad00\ub9ac\uc790 \uc774\uba54\uc77c\ub85c \uc804\uc1a1\uc774 \ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud574\ubcf4\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"634\" height=\"263\" src=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/25021444\/image-4.png\" alt=\"\" class=\"wp-image-2672\" srcset=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/25021444\/image-4.png 634w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2024\/03\/25021444\/image-4-300x124.png 300w\" sizes=\"(max-width: 634px) 100vw, 634px\" \/><\/figure>\n\n\n\n<p>\ucd5c\uc885 \uc811\uc18d \uc77c\uc2dc\uac00 \uc124\uc815\ud55c DAYS\ub97c \ucd08\uacfc\ud55c Sub Account\uac00 \ube44\ud65c\uc131\ud654\ub418\uace0 \uc704 \uc0ac\uc9c4\uacfc \uac19\uc774 \uba54\uc77c\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc654\ub2e4\uba74 \uc774 \uacfc\uc815\uc744 \uc131\uacf5\uc801\uc73c\ub85c \ub05d\ub9c8\uce5c \uac83\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading has-white-color has-cyan-bluish-gray-background-color has-text-color has-background\"> Personal Comments<\/h3>\n\n\n\n<p>\uc774\ubc88 &#8220;[NCLOUD] Sub Account \ud6a8\uc728\uc801\uc73c\ub85c \uad00\ub9ac\ud558\uae30 [2\ud3b8]&#8221;\uc744 \ub9c8\uc9c0\ub9c9\uc73c\ub85c \ub124\uc774\ubc84 \ud074\ub77c\uc6b0\ub4dc\uc758 Sub Account\ub97c \ub354\uc6b1 \ud6a8\uc728\uc801\uc73c\ub85c \uad00\ub9ac\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc870\uae08 \ub354 \uae4a\uac8c \uc54c\uc544\ubcf4\uc558\uc2b5\ub2c8\ub2e4.<br>\ucd5c\uc885 \uc811\uc18d \uc77c\uc2dc\uac00 90\uc77c\uc744 \ucd08\uacfc\ud55c Sub Account\ub97c \uc790\ub3d9\uc73c\ub85c \ube44\ud65c\uc131\ud654\ud558\uace0 Cloud Outbound Mailer API\ub97c \ud65c\uc6a9\ud558\uc5ec \ud574\ub2f9 \uacc4\uc815\uc758 \uc0ac\uc6a9\uc790\uc5d0\uac8c \uacc4\uc815\uc774 \ube44\ud65c\uc131\ud654\ub418\uc5c8\uc74c\uc744 \uc54c\ub9ac\ub294 \uc548\ub0b4 \uba54\uc77c\uc744 \ubc1c\uc1a1\ud558\ub294 \uacfc\uc815\uc744 \uc138\ubc00\ud558\uac8c \ub2e4\ub8e8\uc5b4 \ubcf4\uc558\ub294\ub370\uc694.<br>\ub610\ud55c \uc774 \ubaa8\ub4e0 \uacfc\uc815\uc744 Cloud Functions\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc11c\ubc84\ub9ac\uc2a4 \ud658\uacbd\uc5d0\uc11c \uad6c\ud604\ud568\uc73c\ub85c\uc368 \uc11c\ubc84 \uc6b4\uc601\uc5d0 \ub530\ub978 \ucd94\uac00 \ube44\uc6a9 \uc5c6\uc774 \uc774\ub7ec\ud55c \uc790\ub3d9\ud654\ub97c \uc2e4\ud604\ud560 \uc218 \uc788\uc74c\uc744 \uc54c \uc218 \uc788\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc774\ub7ec\ud55c \uc811\uadfc \ubc29\uc2dd\uc740 \uad00\ub9ac\uc790\uac00 \uc218\ub3d9\uc73c\ub85c Sub Account\ub97c \uac80\ud1a0\ud558\uace0 \uc870\uce58\ub97c \ucde8\ud558\ub294 \ubc88\uac70\ub85c\uc6c0\uc744 \ud06c\uac8c \uc904\uc5ec\uc8fc\uba70 \ub124\uc774\ubc84 \ud074\ub77c\uc6b0\ub4dc \ub9ac\uc18c\uc2a4\uc758 \ud6a8\uc728\uc801 \uc0ac\uc6a9\uc744 \uac00\ub2a5\ud558\uac8c \ud569\ub2c8\ub2e4.<br>\ub610 \uc548\ub0b4 \uba54\uc77c \ubc1c\uc1a1\uc744 \ud1b5\ud574 \uacc4\uc815\uc758 \uc0c1\ud0dc \ubcc0\uacbd\uc5d0 \ub300\ud55c \ud22c\uba85\uc131\uc744 \uc81c\uacf5\ud558\uba70 \ud544\uc694\uc2dc \uc801\uc808\ud55c \uc870\uce58\ub97c \ucde8\ud560 \uc218 \uc788\ub3c4\ub85d \uc0ac\uc6a9\uc790\uc5d0\uac8c \uc54c\ub9bd\ub2c8\ub2e4.<br>\uc774\ub294 \ud074\ub77c\uc6b0\ub4dc \ud658\uacbd\uc758 \ubcf4\uc548\uacfc \uad00\ub9ac \ud6a8\uc728\uc131\uc744 \ub3d9\uc2dc\uc5d0 \uac15\ud654\ud558\ub294 \uc911\uc694\ud55c \ub2e8\uacc4\ub85c \uc2e4\ubb34\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uae34 \uae00 \uc77d\uc5b4\uc8fc\uc154\uc11c \uac10\uc0ac\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"773\" height=\"133\" src=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2021\/08\/12204137\/Ncloud_Master_logo.png\" alt=\"\" class=\"wp-image-1229\" srcset=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2021\/08\/12204137\/Ncloud_Master_logo.png 773w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2021\/08\/12204137\/Ncloud_Master_logo-300x52.png 300w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2021\/08\/12204137\/Ncloud_Master_logo-768x132.png 768w\" sizes=\"(max-width: 773px) 100vw, 773px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\uc548\ub155\ud558\uc138\uc694 MANVSCLOUD \uae40\uc218\ud604\uc785\ub2c8\ub2e4. \uc9c0\ub09c [1\ud3b8]\uc5d0\uc11c\ub294 Sub Account\uc758 API\ub97c \uc774\uc6a9\ud558\uc5ec \uc811\uc18d \ucd5c\uc885 \uc77c\uc2dc\uac00 \ud2b9\uc815 \uae30\uac04\uc774 \ucd08\uacfc\ub420 \uacbd\uc6b0 \ube44\ud65c\uc131\ud654\ud558\ub294 Python \ucf54\ub4dc\ub97c \uc791\uc131\ud558\uace0 \uc790\ub3d9\ud654\ud560 \uc218 \uc788\ub294 \ubc29\ubc95\uc744 \uacf5\uc720\ub4dc\ub838\uc2b5\ub2c8\ub2e4. \uc774\ubc88 \ud3ec\uc2a4\ud305\uc5d0\uc11c\ub294 [1\ud3b8]\uc5d0\uc11c \uc870\uae08 \ub354 \uc5c5\uadf8\ub808\uc774\ub4dc\ub41c \uae30\ub2a5\uc744 \ud568\uaed8 \ub9cc\ub4e4\uc5b4\ubcf4\ub294 \uc2dc\uac04\uc744 \uac00\uc838\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. 1) \ub124\uc774\ubc84 \ud074\ub77c\uc6b0\ub4dc\uc758 Cloud Outbound Mailer\ub97c \uc0ac\uc6a9\ud558\uc5ec \ube44\ud65c\uc131\ud654\ub41c \uc0ac\uc6a9\uc790\uc758 \uc774\uba54\uc77c\ub85c \ube44\ud65c\uc131\ud654\uac00 \ub418\uc5c8\uc73c\ub2c8 \ub2e4\uc2dc Sub Account \uc0ac\uc6a9\uc774 \ud544\uc694\ud55c \uacbd\uc6b0 \uad00\ub9ac\uc790\uc5d0\uac8c \ubb38\uc758\ud558\ub77c\ub294 \uba54\uc77c\uc744 \ubcf4\ub0b4\ubcfc \uac83\uc785\ub2c8\ub2e4. 2) \ubaa8\ub4e0 \ucf54\ub4dc\ub97c Cloud Functions\uc5d0\uc11c \ub3d9\uc791\ud558\ub3c4\ub85d \uad6c\uc131\ud574\ubcfc \uac83\uc785\ub2c8\ub2e4. \uc704 \ub450 \uacfc\uc815\uc744 \uc5b4\ub5bb\uac8c \uc801\uc6a9\ud560 \uc218 \uc788\ub294\uc9c0 \uc9c0\uae08\ubd80\ud130 \uc54c\uc544\ubd05\uc2dc\ub2e4. Cloud Outbound Mailer \uc774 \ud3ec\uc2a4\ud305\uc5d0\uc11c\ub294 Cloud Outbound Mailer \uc0dd\uc131 \ubc29\ubc95\uc740 \uc548\ub0b4\ud558\uace0 \uc788\uc9c0\uc54a\uc2b5\ub2c8\ub2e4. Cloud Outbound Mailer\ub294 \uc544\ub798 \uac00\uc774\ub4dc\ub97c \ucc38\uace0\ud558\uc5ec \uc0dd\uc131\ud574\uc8fc\uc138\uc694. \uc704\uc640 \uac19\uc774 \ub3c4\uba54\uc778 \ub4f1\ub85d\uc774 \ub418\uc5b4\uc788\ub2e4\uba74 Cloud Outbound Mailer\uc758 API\ub97c \uc774\uc6a9\ud558\uc5ec \uba54\uc77c \ubc1c\uc1a1 \ud14c\uc2a4\ud2b8\ub97c \uc544\ub798\uc640 \uac19\uc774 \uc9c4\ud589\ud574\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucd94\uac00\ub41c Access Key\uc5d0\ub294 \ub2f9\uc5f0\ud788 \uba54\uc77c\uc744 \ubc1c\uc1a1\ud560 \uc218 \uc788\ub294 \uad8c\ud55c\uc774 \ubd80\uc5ec\ub418\uc5b4\uc788\uc5b4\uc57c \ud558\uba70, payload\uc5d0 \ubc1c\uc2e0\uc790 \uc774\uba54\uc77c, \ubc1c\uc2e0\uc790 \uc774\ub984, \uc81c\ubaa9, \uba54\uc77c \ub0b4\uc6a9, \uc218\uc2e0\uc790 \uc774\uba54\uc77c\uc744 \uac01\uac01 \ucd94\uac00\ud574\uc90d\ub2c8\ub2e4. \uc774\uc81c [NCLOUD] Sub Account \ud6a8\uc728\uc801\uc73c\ub85c \uad00\ub9ac\ud558\uae30 [1\ud3b8]\uc5d0\uc11c \ub9cc\ub4e0 \ucf54\ub4dc\uc640 \uc704 Cloud Outbound Mailer API\ub85c \uba54\uc77c\uc744 \ubc1c\uc1a1\ud558\ub294 \ucf54\ub4dc\ub97c \ud558\ub098\ub85c \ud569\uccd0\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. Sub Account\uc5d0\uc11c \ucd5c\uc885 \uc811\uc18d \uc77c\uc2dc\uac00 90\uc77c\uc774 \ucd08\uacfc\ub41c \uacbd\uc6b0 \ud574\ub2f9 \uacc4\uc815\uc744 \ube44\ud65c\uc131\ud654 \uc2dc\ud0a4\uace0 Outbound Mailer\ub97c \uc774\uc6a9\ud558\uc5ec \uc774\uba54\uc77c\uc744 \ubc1c\uc1a1\ud558\ub294 \ucf54\ub4dc\uc785\ub2c8\ub2e4. \uae30\uc874 \ucf54\ub4dc\uc5d0\uc11c \ucd94\uac00\ub85c \ub354 \uc5c5\uadf8\ub808\uc774\ub4dc\ub41c \ubd80\ubd84\uc740 \uc774\ubbf8 \ube44\ud65c\uc131\ud654\ub41c \uacc4\uc815\uc758 \uacbd\uc6b0 \ucd94\uac00\uc801\uc73c\ub85c \uba54\uc77c\uc774 \ubc1c\uc1a1\ub418\uba74 \uc548\ub418\uae30\ub54c\ubb38\uc5d0 \uae30\uc874\uc5d0 \ube44\ud65c\uc131\ud654\uc600\ub358 Sub Account\ub294 \uba54\uc77c\uc744 \ubc1c\uc1a1\ud558\uc9c0 \uc54a\uace0 90\uc77c\uc774 \ucd08\uacfc\ub41c \ud65c\uc131\ud654 \uacc4\uc815\uc774 \ube44\ud65c\uc131\ud654\ub41c \uacbd\uc6b0\uc5d0\ub9cc [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"\ucd5c\uc885 \uc811\uc18d \uc77c\uc2dc\uac00 90\uc77c\uc744 \ucd08\uacfc\ud55c Sub Account\ub97c \uc790\ub3d9\uc73c\ub85c \ube44\ud65c\uc131\ud654\ud558\uace0 Cloud Outbound Mailer API\ub97c \ud65c\uc6a9\ud558\uc5ec \ud574\ub2f9 \uacc4\uc815\uc758 \uc0ac\uc6a9\uc790\uc5d0\uac8c \uacc4\uc815\uc774 \ube44\ud65c\uc131\ud654\ub418\uc5c8\uc74c\uc744 \uc54c\ub9ac\ub294 \uc548\ub0b4 \uba54\uc77c\uc744 \ubc1c\uc1a1\ud558\ub294 \uacfc\uc815\uc744 \uc124\uba85\ud569\ub2c8\ub2e4.","jetpack_seo_html_title":"[NCLOUD] Sub Account \ud6a8\uc728\uc801\uc73c\ub85c \uad00\ub9ac\ud558\uae30 [2\ud3b8]","jetpack_seo_noindex":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3],"tags":[457,767,940,32,87,91,17,90,16,126,220,805,253,89,202,398,221,860],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/manvscloud.com\/index.php?rest_route=\/wp\/v2\/posts\/2654"}],"collection":[{"href":"https:\/\/manvscloud.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/manvscloud.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/manvscloud.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manvscloud.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2654"}],"version-history":[{"count":7,"href":"https:\/\/manvscloud.com\/index.php?rest_route=\/wp\/v2\/posts\/2654\/revisions"}],"predecessor-version":[{"id":2678,"href":"https:\/\/manvscloud.com\/index.php?rest_route=\/wp\/v2\/posts\/2654\/revisions\/2678"}],"wp:attachment":[{"href":"https:\/\/manvscloud.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2654"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manvscloud.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2654"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manvscloud.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2654"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}