ํ์ด์ฌ์ ๋ค์ํ ์์ ์ ์๋ํํ๋ ๋ฐ ๋งค์ฐ ๊ฐ๋ ฅํ ์ธ์ด์ ๋๋ค. ๊ทธ์ค์์๋ **'์ด๋ฉ์ผ ์๋ํ'**๋ ์ผ์ ์ ๋ฌด๋ ๊ฐ์ธ ํ๋ก์ ํธ์์ ๊ฐ์ฅ ์ ์ฉํ๊ฒ ํ์ฉํ ์ ์๋ ๊ธฐ๋ฅ ์ค ํ๋์ธ๋ฐ์. ๋งค๋ฒ ๋ฐ๋ณต๋๋ ๋ฉ์ผ ๋ฐ์ก ์์ ์ ํ์ด์ฌ์๊ฒ ๋งก๊ฒจ๋ณด์ธ์!
์ด ๊ฐ์ด๋์์๋ ํ์ด์ฌ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ ํ ์คํธ ์ด๋ฉ์ผ์ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ ์์ ์ค์ฌ์ผ๋ก ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์๋ ค๋๋ฆฝ๋๋ค.
1. ⚙️ ์ค๋น๋ฌผ: SMTP ์๋ฒ์ ๋ก๊ทธ์ธ ์ ๋ณด
์ด๋ฉ์ผ์ ๋ณด๋ด๋ ค๋ฉด SMTP(Simple Mail Transfer Protocol) ์๋ฒ๋ฅผ ์ด์ฉํด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ฃผ๋ก ์ฌ์ฉํ๋ ์ด๋ฉ์ผ ์๋น์ค(Gmail, Naver ๋ฑ)๋ ์ด SMTP ์๋ฒ๋ฅผ ์ ๊ณตํฉ๋๋ค.
| ์๋น์ค | SMTP ์๋ฒ ์ฃผ์ | ํฌํธ ๋ฒํธ |
| Gmail | smtp.gmail.com | 587 (TLS) |
| Naver | smtp.naver.com | 587 (TLS) |
⚠️ ์ฃผ์: ๋ณด์ ์ค์ !
Gmail์ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ผ๋ฐ ๋น๋ฐ๋ฒํธ ๋์ **'์ฑ ๋น๋ฐ๋ฒํธ'**๋ฅผ ๋ฐ๊ธ๋ฐ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. (2๋จ๊ณ ์ธ์ฆ ํ์ฑํ ํ์)
Naver ๋ฑ ๋ค๋ฅธ ์๋น์ค๋ 'SMTP/POP3 ์ฌ์ฉ' ์ค์ ์ด ํ์ฑํ๋์ด ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
2. ๐ ํ์ ํ์ด์ฌ ๋ชจ๋ ์๊ฐ
์ด๋ฉ์ผ ์๋ํ์ ํ์ํ ํ์ด์ฌ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ(๋ณ๋ ์ค์น ํ์ ์์)๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
smtplib: SMTP ์๋ฒ์ ์ ์ํ๊ณ ์ด๋ฉ์ผ์ ์ค์ ๋ก ๋ณด๋ด๋ ์ญํ ์ ํฉ๋๋ค.email.message: ์ด๋ฉ์ผ์ ์ ๋ชฉ, ๋ณธ๋ฌธ, ์์ ์ ๋ฑ ๋ด์ฉ์ ๊ตฌ์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
3. ๐ ๊ธฐ๋ณธ ์ด๋ฉ์ผ ๋ฐ์ก ์์ ์ฝ๋
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํํ์ ํ ์คํธ ์ด๋ฉ์ผ์ ๋ฐ์กํ๋ ํ์ด์ฌ ์ฝ๋์ ๋๋ค.
import smtplib
from email.message import EmailMessage
# ๐ STEP 1: ์ด๋ฉ์ผ ์ ๋ณด ์ค์
SENDER_EMAIL = "๋น์ ์_์ด๋ฉ์ผ@gmail.com" # ๋ณด๋ด๋ ์ฌ๋ ์ด๋ฉ์ผ ์ฃผ์
SENDER_PASSWORD = "๋น์ ์_์ฑ_๋น๋ฐ๋ฒํธ" # Gmail ์ฑ ๋น๋ฐ๋ฒํธ ๋๋ ์ผ๋ฐ ๋น๋ฐ๋ฒํธ
RECEIVER_EMAIL = "๋ฐ๋_์ฌ๋_์ด๋ฉ์ผ@example.com" # ๋ฐ๋ ์ฌ๋ ์ด๋ฉ์ผ ์ฃผ์
# ๐ง STEP 2: EmailMessage ๊ฐ์ฒด ์์ฑ ๋ฐ ๋ด์ฉ ๊ตฌ์ฑ
msg = EmailMessage()
msg['Subject'] = 'ํ์ด์ฌ์ผ๋ก ๋ณด๋ธ ์ฒซ ๋ฒ์งธ ์๋ํ ๋ฉ์ผ! ๐ฅณ'
msg['From'] = SENDER_EMAIL
msg['To'] = RECEIVER_EMAIL
msg.set_content('์๋
ํ์ธ์. ์ด๊ฒ์ ํ์ด์ฌ ์๋ํ ์คํฌ๋ฆฝํธ๋ก ๋ฐ์ก๋ ํ
์คํธ ์ด๋ฉ์ผ์
๋๋ค.')
# ๐ STEP 3: SMTP ์๋ฒ๋ฅผ ํตํด ์ด๋ฉ์ผ ์ ์ก
try:
# Gmail ์๋ฒ ์ฃผ์์ ํฌํธ 587 ์ฌ์ฉ
with smtplib.SMTP('smtp.gmail.com', 587) as server:
server.ehlo() # ์๋ฒ์ ์ฐ๊ฒฐ ์์ (์ต์
)
server.starttls() # ๋ณด์ ์ฐ๊ฒฐ (TLS) ์์
server.ehlo() # TLS ์ฐ๊ฒฐ ํ ๋ค์ ์ฐ๊ฒฐ (์ต์
)
server.login(SENDER_EMAIL, SENDER_PASSWORD) # ๋ก๊ทธ์ธ
server.send_message(msg) # ์ด๋ฉ์ผ ๋ฐ์ก
print("✅ ์ด๋ฉ์ผ ๋ฐ์ก ์ฑ๊ณต!")
except Exception as e:
print(f"❌ ์ด๋ฉ์ผ ๋ฐ์ก ์คํจ: {e}")
๐ง ์ฝ๋ ์ค๋ช :
EmailMessage(): ์ด๋ฉ์ผ ๋ฉ์์ง๋ฅผ ๋ด์ ๋น ๋ดํฌ๋ฅผ ๋ง๋ญ๋๋ค.msg['Subject'],msg['From'],msg['To']: ๋ดํฌ์ ์ ๋ชฉ, ๋ณด๋ด๋ ์ฌ๋, ๋ฐ๋ ์ฌ๋ ์ ๋ณด๋ฅผ ๊ธฐ์ ํฉ๋๋ค.msg.set_content(): ์ด๋ฉ์ผ์ ๋ณธ๋ฌธ ๋ด์ฉ์ ์ฑ์๋๋ค.smtplib.SMTP(...): Gmail SMTP ์๋ฒ์ ํฌํธ 587๋ก ์ฐ๊ฒฐ์ ์๋ํฉ๋๋ค.with๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด ์ฐ๊ฒฐ์ด ์๋์ผ๋ก ์ข ๋ฃ๋์ด ํธ๋ฆฌํฉ๋๋ค.server.starttls(): ์ด๋ฉ์ผ ์ ์ก ์ ๋ฐ์ดํฐ ์ํธํ๋ฅผ ์ํด TLS ๋ณด์ ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋๋ก ์ค์ ํฉ๋๋ค.server.login(): ์ค์ ํ ์ด๋ฉ์ผ ์ฃผ์์ ๋น๋ฐ๋ฒํธ๋ก ์๋ฒ์ ๋ก๊ทธ์ธํฉ๋๋ค.server.send_message(msg): ๊ตฌ์ฑ๋ ๋ฉ์์ง๋ฅผ ์ต์ข ์ ์ผ๋ก ๋ฐ์กํฉ๋๋ค.
4. ๐ผ️ ๋ณด๋์ค: HTML ํ์์ผ๋ก ์์๊ฒ ๋ณด๋ด๊ธฐ!
ํ ์คํธ๋ง์ผ๋ก๋ ๋ถ์กฑํ๋ค๋ฉด, ์นํ์ด์ง์ฒ๋ผ ๊พธ๋ฐ ์ ์๋ HTML ํ์์ ์ด๋ฉ์ผ์ ๋ณด๋ด๋ณด์ธ์.
์์ ์ฝ๋์ msg.set_content() ๋์ ์๋์ ๊ฐ์ด ์์ ํ๋ฉด ๋ฉ๋๋ค.
# ... (์ด์ ์ฝ๋ ๋์ผ)
HTML_CONTENT = """
<html>
<body>
<h2>✨ ํ์ด์ฌ ์๋ํ ์ด๋ฉ์ผ์
๋๋ค!</h2>
<p style="color: blue;">์ด ๋ด์ฉ์ HTML ํ๊ทธ๋ก ์์ฑ๋์์ต๋๋ค. </p>
<ul>
<li>์๋ํ ์ฑ๊ณต!</li>
<li>ํ์ด์ฌ ์ต๊ณ !</li>
</ul>
</body>
</html>
"""
# set_content ๋์ add_alternative ์ฌ์ฉ
msg.add_alternative(HTML_CONTENT, subtype='html')
# ๐ STEP 3: SMTP ์๋ฒ๋ฅผ ํตํด ์ด๋ฉ์ผ ์ ์ก (๋๋จธ์ง ์ฝ๋ ๋์ผ)
# ...
subtype='html'์ ์ง์ ํ์ฌ ์ด๋ฉ์ผ ํด๋ผ์ด์ธํธ๊ฐ ์ด ๋ด์ฉ์ HTML๋ก ํด์ํ๋๋ก ์ง์ํฉ๋๋ค.
์ด์ ์ฌ๋ฌ๋ถ๋ ์ด ์ฝ๋๋ฅผ ๋ฐํ์ผ๋ก ์ ๊ธฐ ๋ณด๊ณ ์ ๋ฐ์ก, ์๋ฆผ ๋ฉ์ผ ์๋ํ ๋ฑ ๋ค์ํ ํ๋ก์ ํธ๋ฅผ ์์ํ ์ ์์ต๋๋ค. ๐ก

๋๊ธ
๋๊ธ ์ฐ๊ธฐ