8.1 이메일 읽기
우리 이제 네트워크 작업의 기본을 충분히 이해한 것 같아. 좀 더 흥미로운 걸 해볼까 — 인터넷에는 정말 흥미로운 게 많거든. 이메일 읽고 보내는 건 어때?
전자 메일은 50년 전에 등장했어, 첫 웹 브라우저가 나오기 20년 전이지. 그때는 이메일을 보내기 위해 특별한 프로그램들을 사용했어. 그게 우리에겐 무슨 의미냐고? 이메일 작업 표준(프로토콜)이 아주 간단하단 얘기야.
프로토콜 POP3
(Post Office Protocol version 3)는 메일 서버에서 이메일을 받는 데 사용돼. IMAP
과는 다르게, POP3
는 보통 메일을
로컬 컴퓨터에 다운로드하고 서버에서 삭제해. Python에서는 POP3
작업을 위해 poplib
라이브러리를 사용할 수 있어.
참고: POP3와는 달리, IMAP(Internet Message Access Protocol)은 서버에 메일을 저장하고 디바이스 간 상태를 동기화할 수 있어. 여러 디바이스에서 메일을 읽는다면 IMAP이 더 편리하고, POP3는 한 디바이스에 메일을 로컬로 저장하는 데 더 적합해.
이메일 목록을 받는 기본 단계:
- 메일 서버에 연결.
- 인증.
- 이메일 목록 가져오기.
- 이메일 다운로드 및 읽기.
- 서버에서 연결 끊기.
첫 번째 애플리케이션을 작성하려면 두 개의 라이브러리가 필요해: poplib
와
email
. 아직 없다면 설치해. pip
매니저 사용하는 방법은 이미 알고 있겠지.
중요: 전자 메일 작업을 할 때는 항상 보안 조치를 준수해야 해. 절대 코드에 암호를 평문으로 저장하지 마. 환경 변수를 사용하거나 안전한 저장소에 자격 증명을 보관해. 또한, 코드가 공개 상태에 놓이지 않도록 해서 기밀 정보가 유출되지 않도록 해야 해.
1. 연결 및 인증:
SSL
을 통해 메일 서버에 연결하고 주어진 자격 증명으로 메일박스에 로그인해.
mailbox = poplib.POP3_SSL(pop3_server)
mailbox.user(username)
mailbox.pass_(password) # Python의 예약어인 pass와의 충돌을 피하기 위해 pass_ 사용
2. 메일박스 정보 가져오기:
메일박스의 메일 수를 가져와.
num_messages = len(mailbox.list()[1])
print(f"메일 수: {num_messages}")
3. 이메일 다운로드 및 읽기:
마지막 메일을 다운로드하고 읽어.
# 예시: 마지막 메일 읽기
if num_messages > 0:
response, lines, octets = mailbox.retr(num_messages)
message = '\n'.join(line.decode('utf-8') for line in lines)
print("마지막 메일 내용:")
print(message)
내용 파싱과 표시를 위해 특수한 라이브러리—
email
이 있어. 이 라이브러리는 메일의 내용, 첨부 파일, 헤더와 본문까지 해독할 수 있어.
최종 이메일 클라이언트 버전은 이렇게 될 거야.
import poplib
# 로그인 자격 증명
username = 'your_email@example.com'
password = 'your_password'
# Gmail 메일 서버 연결
pop3_server = 'pop.gmail.com'
mailbox = poplib.POP3_SSL(pop3_server, 995)
# 메일박스에 로그인
mailbox.user(username)
mailbox.pass_(password) # Python의 예약어인 pass와의 충돌을 피하기 위해 pass_ 사용
# 메일박스 정보 가져오기
num_messages = len(mailbox.list()[1])
print(f"메일 수: {num_messages}")
# 예시: 마지막 메일 읽기
if num_messages > 0:
response, lines, octets = mailbox.retr(num_messages)
message = '\n'.join(line.decode('utf-8') for line in lines)
print("마지막 메일 내용:")
print(message)
# 연결 종료
mailbox.quit()
이메일을 읽어보려면 POP3 서버
를 제대로 설정해. 위의 예시에서는 Gmail 서버 데이터를 사용했어. 다른 메일 서버라면, 인터넷에서 쉽게 찾아볼 수 있을 거야.
8.2 이메일 보내기
SMTP
(Simple Mail Transfer Protocol)로 이메일을 보내려면 Python에서 smtplib
내장 라이브러리를 사용할 수 있어. 이 모듈은 SMTP 서버
와의 연결 설정, 인증 및 메일 전송 기능을 제공해.
이메일 전송의 기본 단계:
SMTP 서버
에 연결.- 인증.
- 메시지 작성.
- 메시지 전송.
- 연결 종료.
1. SMTP 서버
에 연결:
SMTP 서버
에 연결하고 TLS
를 사용해 안전한 연결로 전환해.
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # 안전한 연결
2. 인증:
SMTP 서버
에 자격 증명을 사용해 로그인해.
server.login(username, password)
3. 문자열 형식으로 간단한 메시지 작성:
message = f"From: {from_addr}\nTo: {to_addr}\nSubject: {subject}\n\n{body}"
4. 메시지 전송:
server.sendmail(from_addr, to_addr, message)
5. 연결 종료:
server.quit()
지난번보다 좀 더 간단해 보이지? 기쁘지 않아?
오류 처리를 포함한 전체 코드는 이렇게 보일 거야:
import smtplib
# 로그인 자격 증명
smtp_server = 'smtp.gmail.com'
smtp_port = 587
username = 'your_email@gmail.com'
password = 'your_app_password' # 앱 비밀번호 사용
# 발신자와 수신자 주소
from_addr = 'your_email@gmail.com'
to_addr = 'recipient@example.com'
# 메일 제목과 본문
subject = '메일 제목'
body = '이것은 메일 본문이야.'
# 문자열 형식으로 메시지 작성
message = f"From: {from_addr}\nTo: {to_addr}\nSubject: {subject}\n\n{body}"
try:
# SMTP 서버에 연결
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # 안전한 연결
# 인증
server.login(username, password)
# 메시지 전송
server.sendmail(from_addr, to_addr, message)
print("메일이 성공적으로 전송됐어!")
except Exception as e:
print(f"메일 전송 중 오류 발생: {e}")
finally:
# 연결 종료
server.quit()
이 코드의 대부분은 주석과 서버 설정이야, 실은 다섯 줄로 이메일을 보낼 수 있어. 한 번 시도해봐 — 정말 흥미로울 거야.
GO TO FULL VERSION