파이썬 - 이메일 보내기

안녕하세요, 파이썬 프로그래머를 꿈꾸는 여러분! 오늘, 우리는 파이썬을 사용하여 이메일을 보내는 세상으로 흥미진진한 여행을 떠날 거예요. 여러분의 친절한 이웃 컴퓨터 선생님으로서, 이 과정을 안내해 드리게 되어 기쁩니다. 믿어 주세요, 이 튜토리얼을 끝내면 여러분은 프로처럼 이메일을 보내실 거예요!

Python - Sending Email

파이썬에서 이메일 보내기

기본부터 시작해요. 파이썬에서 이메일을 보내는 것은 디지털 우체국장이 되는 것과 같아요. 하지만 문 앞에서 걸어다니는 것이 아니라, smtplib라는 특별한 파이썬 라이브러리를 사용해요. SMTP는 Simple Mail Transfer Protocol의 약자로, 인터넷을 통해 메일을 보내는 규칙을 의미하는 복잡한 방식이에요.

다음은 우리를 시작하는 간단한 예제입니다:

import smtplib

sender_email = "[email protected]"
receiver_email = "[email protected]"
password = "your_password"
message = "Hello, this is a test email from Python!"

with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message)

이를 분석해 봅시다:

  1. 우리는 smtplib 라이브러리를 임포트합니다.
  2. 우리는 발신자 이메일, 수신자 이메일, 그리고 비밀번호를 설정합니다.
  3. 우리는 간단한 메시지를 만듭니다.
  4. 우리는 Gmail의 SMTP 서버에 연결합니다 (이에 대해 나중에 더 이야기하죠).
  5. 우리는 보안을 위해 TLS를 시작합니다.
  6. 우리는 이메일 계정에 로그인합니다.
  7. 마지막으로, 우리는 이메일을 보냅니다!

파이썬 smtplib.SMTP() 함수

SMTP() 함수는 우리의 디지털 우체국의 열쇠와 같아요. 이 함수는 우리가 사용하고 싶은 SMTP 서버에 연결을 설정합니다. 다음은 더 자세한 설명입니다:

import smtplib

server = smtplib.SMTP('smtp.gmail.com', 587)
print(server.ehlo())
server.starttls()
print(server.ehlo())

이 예제에서:

  • 우리는 Gmail 서버의 SMTP 객체를 만듭니다.
  • ehlo()는 서버에 "こんにちは"를 말하는 것과 같아요.
  • starttls()는 보안을 위해 TLS 암호화를 시작합니다.

파이썬 smtpd 모듈

smtplib는 이메일을 보내는 데 사용되는 것이지만, smtpd는 이메일을 받는 데 사용됩니다. 이는 자신의 мини 이메일 서버를 설정하는 것과 같아요! 다음은 간단한 예제입니다:

import asyncore
from smtpd import SMTPServer

class EmailServer(SMTPServer):
def process_message(self, peer, mailfrom, rcpttos, data, **kwargs):
print(f'Receiving message from: {peer}')
print(f'Message addressed from: {mailfrom}')
print(f'Message addressed to  : {rcpttos}')
print(f'Message length        : {len(data)}')

server = EmailServer(('localhost', 1025), None)
asyncore.loop()

이 코드는 수신된 이메일에 대한 정보를 출력하는 기본적인 이메일 서버를 설정합니다. 이는 자신의 개인적인 편지 정렬실을 가지는 것과 같아요!

파이썬을 사용하여 HTML 이메일 보내기

이제, 이메일에 좀 더 특별한 HTML을 추가해 보죠:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

sender_email = "[email protected]"
receiver_email = "[email protected]"
password = "your_password"

message = MIMEMultipart("alternative")
message["Subject"] = "multipart test"
message["From"] = sender_email
message["To"] = receiver_email

text = "Hi there! This is a plain text email."
html = """\
<html>
<body>
<p>Hi there!<br>
This is an <b>HTML</b> email.
</p>
</body>
</html>
"""

part1 = MIMEText(text, "plain")
part2 = MIMEText(html, "html")

message.attach(part1)
message.attach(part2)

with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message.as_string())

이 예제는 일반 텍스트와 HTML 버전을 모두 포함한 이메일을 보냅니다. 이는 특별한 봉투를 달린 편지를 보내는 것과 같아요!

이메일에 첨부 파일 보내기

파일을 이메일과 함께 보내고 싶다면 어떻게 해야 하나요? 문제없어요! 다음은 그 방법입니다:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

sender_email = "[email protected]"
receiver_email = "[email protected]"
password = "your_password"

message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = "Email with attachment"

body = "This is an email with an attachment."
message.attach(MIMEText(body, "plain"))

filename = "document.pdf"  # Replace with your file name
attachment = open(filename, "rb")

part = MIMEBase("application", "octet-stream")
part.set_payload(attachment.read())

encoders.encode_base64(part)
part.add_header(
"Content-Disposition",
f"attachment; filename= {filename}",
)

message.attach(part)

with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message.as_string())

이 스크립트는 이메일에 파일을 첨부합니다. 이는 편지에 패키지를 추가하는 것과 같아요!

Gmail의 SMTP 서버를 사용하여 이메일 보내기

이 튜토리얼에서는 Gmail의 SMTP 서버를 사용해 왔어요. 다음은 일반 SMTP 서버에 대한 빠른 참조 표입니다:

이메일 제공자 SMTP 서버 포트
Gmail smtp.gmail.com 587
Outlook smtp-mail.outlook.com 587
Yahoo Mail smtp.mail.yahoo.com 587

Gmail을 사용할 때는 "약간 덜 안전한 앱 접근"을 활성화하거나, 2단계 인증이 활성화된 경우 "앱 비밀번호"를 사용해야 할 수 있습니다.

그리고 여러분은 이제 파이썬 프로처럼 이메일을 보내실 준비가 되었어요. 큰 힘에는 큰 책임이 따르니, 새로운 이메일 보내기 기술을 지혜롭게 사용하세요! 코딩이 즐겁고, 여러분의 이메일이 항상 도착지에 도달하시길 바랍니다!

Credits: Image by storyset