2023. 8. 20. 20:49ใAWS/troubleshooting
โ๏ธ ๋ฌธ์
AWS SES API SendEmail
๋ฅผ ์ด์ฉํ์ฌ ๋ฉ์ผ์ ๋ณด๋ด๋๋ฐ ์๋์ ๊ฐ์ด ํ๊ธ๋ก ์
๋ ฅํ ๋ฐ์ ์ ์ด๋ฆ์ด ์ ์์ ์ผ๋ก ์ถ๋ ฅ๋์ง ์์๋ค.
๐ ํ๊ฒฝ
- ์ฝ๋ ์คํ ํ๊ฒฝ
- AWS Systems Automation Document
- Action :
aws:executeScript
- Action :
- Runtime : python3.7
- library : boto3
- AWS Systems Automation Document
def sendEmail(sender_email, sender_name, user_email, user_name):
SENDER = f"{sender_name} <{sender_email}>"
RECIPIENT = user_email
AWS_REGION = "ap-northeast-2"
SUBJECT = "Amazon SES Test (SDK for Python)"
BODY_TEXT = ("Amazon SES Test (Python)\r\n"
"This email was sent with Amazon SES using the "
"AWS SDK for Python (Boto).")
BODY_HTML = """<html>
<head></head>
<body>
<h1>Amazon SES Test (SDK for Python)</h1>
<p>This email was sent with
<a href='https://aws.amazon.com/ses/'>Amazon SES</a> using the
<a href='https://aws.amazon.com/sdk-for-python/'>
AWS SDK for Python (Boto)</a>.</p>
</body>
</html>"""
CHARSET = "UTF-8"
client = boto3.client('ses',region_name=AWS_REGION)
try:
response = client.send_email(
Destination={
'ToAddresses': [
RECIPIENT,
],
},
Message={
'Body': {
'Html': {
'Charset': CHARSET,
'Data': BODY_HTML,
},
'Text': {
'Charset': CHARSET,
'Data': BODY_TEXT,
},
},
'Subject': {
'Charset': CHARSET,
'Data': SUBJECT,
},
},
Source=SENDER
)
except ClientError as e:
print(e.response['Error']['Message'])
raise e
else:
print("Email sent! Message ID:"),
print(json.dumps(response, indent=2))
โ๏ธ ์์ธ
AWS SES๋ SMTPUTF8 ํ์ฅ์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ ๋ฉ์ผ ์ฃผ์ ๋ฌธ์์ด์ 7๋นํธ ASCII์ฌ์ผ๋ง ํ๋ค. ๋ฐ์ ์ ์ด๋ฆ(frindely from ๋ถ๋ถ)์ MIME(Multipurpose Internet Mail Extensions) ์ธ์ฝ๋ฉ๋ ๋จ์ด ๊ตฌ๋ฌธ์ ์ฌ์ฉํด์ผ ํ๋ค.
⇒ Ref. Amazon SES API Docs: SendEmail
⇒ Ref. Amazon SES ๊ฐ๋ฐ์ ์๋ด์ > ์ด๋ฉ์ผ ์ ์ก ์ค์ > MIME ์ฌ์ฉ
๐ซ ํด๊ฒฐ ๋ฐฉ๋ฒ
import base64
sendername_bytes = sender_name.encode(CHARSET)
sendername_base64 = base64.b64encode(sendername_bytes)
SENDER_NAME = f"=?{CHARSET}?B?{sendername_base64}?="
SENDER = f"{SENDER_NAME} <{sender_email}>"
Base64 ์ธ์ฝ๋ฉ์ ์ด์ฉํ์ฌ ์ ๋ถ๋ถ์ ์ถ๊ฐํด๋ ๊ณ์ ํ๊ธ ๊นจ์ง ํ์์ด ๋ฐ์ํ๋ค.
์ด์ ๋ sender_name์ด “์๋์ธ์ค”์ธ ๊ฒฝ์ฐ, sendername_base64๋ฅผ ์ถ๋ ฅํ๋ฉด b'7JWI64OQ7IS47Jqk’์ด๊ธฐ ๋๋ฌธ์ด๋ค. sendername_base64์์ b’ ‘๋ฅผ ์ ๊ฑฐํ๊ณ ์ธ์ฝ๋ฉ๋ ๊ตฌ๋ฌธ๋ง ๋จ๊ธฐ๋ ์์ ์ด ๋ ํ์ํ๋ค.
SENDER_NAME = f"=?{CHARSET}?B?{sendername_b64_str[2:-1]}?="
SENDER_NAME์ ์์ ๊ฐ์ด ๋ณ๊ฒฝํ์ฌ sendername_base64์ ํ์ ์ ๋ฌธ์์ด๋ก ๋ฐ๊พธ๊ณ b’์ ๋ค๋ถํฐ ‘ ์ ๊น์ง์ ๋ฌธ์๋ง ๋จ๊ธฐ๋๋ก ํ๋ค.
ํด๊ฒฐ ์ฑ๊ณต~! ๐