이번 글에서는 POP3/SMTP에 대해 알아보겠습니다.
IMAP/SMTP에 대한 글은 여기를 참고하시길 바랍니다.
준비사항
네이버 메일에 로그인 한 뒤 ‘환경설정’ -> ‘POP3/IMAP 설정’ -> ‘POP3/SMTP 설정’ 에서 POP3/SMTP을 사용함으로 체크하셔야 합니다.
그리고 아래에 보시면 POP3/SMTP 설정을 위한 정보들이 있습니다. 그 정보들을 잘 기억해둡니다.
메일 송신
SMTP를 파이썬에서 사용하기 위해서는 smtplib와 email 라이브러리가 있어야 합니다.
아래 코드는 네이버메일에서 지메일로 메일을 송신하는 코드입니다.
# POP3/SMTP - 송신
import getpass
import smtplib
from email.mime.text import MIMEText
if __name__ == "__main__":
smtp_name = "smtp.naver.com"
smtp_port = 465
send_email = "3001ssw@naver.com"
send_password = getpass.getpass("비밀번호: ")
recv_email = "3001ssw@gmail.com"
text = """네이버에서 지메일로 메일 전송"""
msg = MIMEText(text)
msg["Subject"] = "메일제목"
msg["From"] = send_email
msg["To"] = recv_email
print(msg.as_string())
session = smtplib.SMTP_SSL(smtp_name, smtp_port)
session.login(send_email, send_password) # 로그인
session.sendmail(send_email, recv_email, msg.as_string()) # 메일 전송
session.quit()
코드를 실행한 뒤 화인해보면 네이버메일로 작성한 메일이 수신된 것을 확인할 수 있습니다.
메일 수신
메일 수신 하는 것을 해보겠습니다. 우선 지메일에서 네이버메일로 메일 하나 보내두겠습니다.
그 다음 아래와 같이 코드를 입력합니다.
# POP3/SMTP - 수신
from getpass import getpass
import poplib
poplib._MAXLINE=20480
if __name__ == "__main__":
server = 'pop.naver.com'
port = 995
username = '3001ssw@naver.com'
password = getpass()
# POP3 접속
session = poplib.POP3_SSL(server, port)
session.user(username)
session.pass_(password)
data = session.stat()
mail_count = data[0] # 메일 전체 개수
# print("mail count:", mail_count) # 전체 메일 개수
data_byte = session.retr(mail_count) # 마지막 메일에 대한 raw 데이터 얻기
raw_email = b'\n'.join(data_byte[1]) # 수신 메일에 대한 raw 데이터
#메시지 처리(email 모듈 활용)
import email
from email.header import decode_header, make_header
email_msg = email.message_from_bytes(raw_email)
mail_from = make_header(decode_header(email_msg.get('From'))) # From
mail_to = make_header(decode_header(email_msg.get('To'))) # To
mail_date = make_header(decode_header(email_msg.get('Date'))) # Date
mail_subject = make_header(decode_header(email_msg.get('Subject'))) # Subject
# Content
mail_content = None
# if email_msg.is_multipart(): # 어짜피 part 가져와야 decode 가능한데 의미가 있나 싶음
for part in email_msg.walk():
charset = part.get_content_charset()
ctype = part.get_content_type()
if ctype == 'text/plain':
mail_content = part.get_payload(decode=True) # decode
break
elif ctype == 'text/html':
# Content-Disposition는 http response body의 컨텐츠 성향?기질?인데, attachment는 파일이 첨부되어있는것
cdispo = str(part.get('Content-Disposition'))
if 'attachment' not in cdispo:
mail_content = part.get_payload(decode=True)
else:
mail_content = ""
break
else:
mail_content = ""
if type(mail_content) is bytes and charset is not None:
mail_content = mail_content.decode(charset)
if ctype == 'text/html':
from bs4 import BeautifulSoup
soup = BeautifulSoup(mail_content, 'html.parser')
mail_content = soup.get_text()
# 출력
print(str(mail_from))
print(str(mail_to))
print(str(mail_date))
print(str(mail_subject))
print(str(mail_content))
실행하면 출력창에 메일이 수신된 것을 확인할 수 있습니다.
이상으로 POP3/SMTP에 대해 알아보았습니다.