[AWS] SES (Simple Email Service)

๊ฑธ๊ทธ๋ฃน์ด ์•„๋‹ˆ๋‹ค.

SES๋Š” ์•„๋งˆ์กด์—์„œ ์ œ๊ณตํ•˜๋Š” ์ด๋ฉ”์ผ ์†ก์ˆ˜์‹  ์„œ๋น„์Šค๋‹ค.
AWS ์น˜๊ณค ์•„์ฃผ ๋น„์‹ผ ํŽธ์€ ์•„๋‹ˆ๋‹ค.

๋“ค์–ด๊ฐ€์„œ ํ•œ๋ฒˆ ์จ๋ณด์ž.




์ด๋ฉ”์ผ ์ธ์ฆํ•˜๊ธฐ

์ด๋ฉ”์ผ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋ญ˜ ํ•ด์•ผํ• ๊นŒ?
๋‹น์—ฐํžˆ ์ด๋ฉ”์ผ์„ ์ „์†กํ•  ์ „์†ก์ž์˜ ์ด๋ฉ”์ผ์ด ํ•„์š”ํ•˜๋‹ค.
์ด๋ฉ”์ผ์ด๋‚˜ ๋„๋ฉ”์ธ์„ ํ•˜๋‚˜ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

์ธ์ฆ ๋ฉ”์ผ์ด ์˜ค๋ฉด ํด๋ฆญํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๊ทธ๋ž˜์„œ ์ด๋Ÿฐ ์ƒํƒœ๋กœ ๋˜๋ฉด ์„ฑ๊ณต์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ž ๊น ์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์ด, ๊ธฐ๋ณธ ์„ค์ •์—์„œ ๋ญ˜ ๋” ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค๋ฉด SES๋Š” ์ƒŒ๋“œ๋ฐ•์Šค ์•ˆ์—์„œ๋งŒ ๋™์ž‘ํ•œ๋‹ค.
์ƒŒ๋“œ๋ฐ•์Šค๋Š” ๋ง๊ทธ๋Œ€๋กœ ํ…Œ์ŠคํŠธ ๋ชจ๋“œ์ธ๋ฐ, ์ด ์ƒํƒœ์—์„œ๋Š” ์ˆ˜์‹ ํ•  ์ด๋ฉ”์ผ๋„ ๋ฐ˜๋“œ์‹œ ์ธ์ฆ์„ ๋ฐ›์€ ์ด๋ฉ”์ผ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ์•„๋ฌด ์ด๋ฉ”์ผ๋กœ๋‚˜ ๋ฌธ์ž๋ฅผ ๋ณด๋‚ด๊ฒŒ ํ•˜๋ ค๋ฉด ํ”„๋กœ๋•์…˜ ๋ชจ๋“œ๋กœ ํ—ˆ๊ฐ€๋ฅผ ๋ฐ›์•„์•ผ ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ํ…Œ์ŠคํŠธ๋ชจ๋“œ๋ผ๋ฉด ์—ฌ๊ธฐ์„œ ๋ฐœ์‹ ์ž๋„ ๋ฏธ๋ฆฌ๋ฏธ๋ฆฌ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ๋‹ค.




์ด๋ฉ”์ผ ๋ณด๋‚ด๋ณด๊ธฐ

์šฐ์„  ์ฝ˜์†”์„ ์ด์šฉํ•ด์„œ ๋ฉ”์ผ์„ ์ „์†กํ•ด๋ณด์ž.
ํ”„๋กœ๋•์…˜์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ์“ธ ์ผ์€ ์—†๊ฒ ์ง€๋งŒ, ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ๋Š” ๊ฐ€๋” ์“ธ ๊ฒƒ์ด๋‹ค.

์ „์†ก์ž๋กœ ์‚ฌ์šฉํ•  ์ด๋ฉ”์ผ์„ ์ฒดํฌํ•œ ํ›„, ์œ„์˜ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ 

์ „์†กํ•  ์ด๋ฉ”์ผ ๋‚ด์—ญ์„ ์ž…๋ ฅํ•ด์„œ ์ „์†กํ•˜๋ฉด ๋œ๋‹ค.
subject๊ฐ€ ์ด๋ฉ”์ผ์˜ ์ œ๋ชฉ์ด๊ณ , body๊ฐ€ ๋‚ด์šฉ์ด๋‹ค.

์ €๋ ‡๊ฒŒ ํ•ด๋†“๊ณ  ๋ณด๋‚ด๋ฉด, ์ž˜ ์˜ฌ ๊ฒƒ์ด๋‹ค.




Lambda์—์„œ ์ „์†กํ•ด๋ณด๊ธฐ (Node.js)

์šฐ์„  ๋žŒ๋‹ค๋ฅผ ์ ์ ˆํžˆ ์ƒ์„ฑํ•œ ๋‹ค์Œ ์‹คํ–‰ ์—ญํ• ๋กœ ๋“ค์–ด๊ฐ€์„œ

๋žŒ๋‹ค์—์„œ SES์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ถŒํ•œ์„ ์—ฐ๊ฒฐํ•ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์†Œ์Šค๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

const aws = require("aws-sdk");
const ses = new aws.SES({ region: "ap-northeast-2" });

exports.handler = async (event) => {
    const params = {
        Destination: {
            ToAddresses: ['rusty.wiki.dev@gmail.com'], //์ˆ˜์‹ ์ž ๋ชฉ๋ก
        },
        Message: {
            Body: {
                Text: { Data: "์œผ์•…" },
            },
            Subject: { Data: "Test Email" },
        },
        Source: "sssang97@naver.com", //์ „์†ก์ž
    };

    return await ses.sendEmail(params).promise();
};

์ด๋ ‡๊ฒŒ ํ•ด์„œ ๋Œ๋ฆฌ๋ฉด

์ž˜ ์˜ฌ ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ €๊ฑด ๊ทธ๋ƒฅ ํ…์ŠคํŠธ๋งŒ ์ค˜์„œ ๋ฉ”์ผ ํ˜•์‹์ด ๋งŽ์ด ๋ฐ‹๋ฐ‹ํ•˜๋‹ค.
๊ทธ๋ž˜๋„ ๋ญ ์ œ๋Œ€๋กœ ๋œ ์„œ๋น„์Šค๋‹ค ํ•˜๋ฉด ๋กœ๊ณ ๋„ ๋„ฃ๊ณ  ์•Œ๋ก๋‹ฌ๋กํ•˜๊ฒŒ ๊พธ๋ฉฐ์•ผ ํ•˜์ง€ ์•Š๊ฒ ๋Š”๊ฐ€?

๊ทธ๋ž˜์„œ ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์ด๋ฉ”์ผ์˜ html ์†Œ์Šค๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•ด์„œ ๊ทธ๊ฑธ ๋ณด๋‚ด๋„๋ก ํ•œ๋‹ค.
Text ๋Œ€์‹ ์— Html ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿผ ์ง€์ •ํ•œ๋Œ€๋กœ ์ž˜ ์˜ฌ ๊ฒƒ์ด๋‹ค.





ํ”„๋กœ๋•์…˜ ๋ชจ๋“œ๋กœ ์ „ํ™˜

์•„๋ฌด์—๊ฒŒ๋‚˜ ์ด๋ฉ”์ผ์„ ์ „์†กํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ƒŒ๋“œ๋ฐ•์Šค ๋ชจ๋“œ์—์„œ ๋ฒ—์–ด๋‚˜ ํ”„๋กœ๋•์…˜ ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•˜๊ฒŒ๋” ํ•ด์•ผ ํ•œ๋‹ค.
์ €๊ธฐ์„œ Edit์„ ๋ˆ„๋ฅด๊ณ 

์‹ค์ œ ํ”„๋กœ๋•์…˜ ๊ด€๋ จ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•œ ๋’ค ์•„๋งˆ์กด ์ธก์— ํ—ˆ๊ฐ€๋ฅผ ๋ฐ›์œผ๋ฉด ๋œ๋‹ค.

์›ฌ๋งŒํ•˜๋ฉด 1์‹œ๊ฐ„ ์•ˆ์—๋Š” ๋œ๋‹ค๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

๊ทธ๋ ‡๋‹ค.



์ฐธ์กฐ
http://wildpup.cafe24.com/archives/1003
https://docs.aws.amazon.com/ko_kr/ses/latest/DeveloperGuide/send-email-getting-started.html
https://aws.amazon.com/ko/premiumsupport/knowledge-center/lambda-send-email-ses/
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SES.html#sendEmail-property