파이썬(python)2024. 6. 25. 10:58

 

예전에 정리했던 "파이썬(python)을 이용해서 이메일(eml) 파일의 보낸 사람, 받는 사람, 제목 확인하기"에서 이어지는 내용이라고 할 수 있겠다. 이번에는 본문을 확인하는 방법이다. 마찬가지로 파이썬(python)의 email 모듈을 이용한다. 

이메일 파일은 하나 또는 여러개의 부분으로 구성될 수 있다. 첨부 파일이 없는 간단한 메일이라면 하나의 부분만 있을 것이고, 아래의 예시처럼 해 볼 수 있겠다.

 

import email

f = open("my_simple_mail.eml", "r")

eml_msg = email.message_from_file(f)

# eml 파일의 본문(payload) 가져오기
eml_payload = eml_msg.get_payload(decode=True)
# 본문을 utf-8 텍스트로 변환
decoded_text = eml_payload.decode('utf-8')

print(decoded_text)

 

첨부 파일이 포함되어 여러 부분으로 구성된 이메일이면 위의 예시에서 get_payload()를 사용할 경우 리스트(list) 형식으로 가져온다. 여기서 "decode=True"를 지정하지 않아야 한다는 점에 유의. 여러개의 부분이 있으므로 각 부분에 대해 각각 get_payload(decode=True) 형태로 본체를 가져와야 한다. 리스트의 각 원소가 다시 이메일 메시지 형식이 되므로 첫번째 부분을 utf-8 텍스트로 변환하면 되겠다. 

 

import email

f = open("my_mail.eml", "r")

eml_msg = email.message_from_file(f)

eml_payload_list = eml_msg.get_payload()

# 리스트의 첫번째 항목을 처리
eml_payload = eml_payload_list[0].get_payload(decode=True)

decoded_text = eml_payload.decode('utf-8')

print(decoded_text)

 

위의 두 예시를 하나로 합쳐 보자. get_payload()를 통해서 받은 결과의 type을 확인해서 str인 경우와 list인 경우에 따라 다르게 처리해 준다. 

 

import email

f = open("my_mail.eml", "r")

eml_msg = email.message_from_file(f)

eml_payload = eml_msg.get_payload()
payload_type = type(eml_payload)

if payload_type == list:
	decoded_text = eml_payload[0].get_payload(decode=True)
	print(decoded_text.decode('utf-8'))
elif payload_type == str:
    decoded_text = eml_msg.get_payload(decode=True)
    print(decoded_text.decode('utf-8'))
else:
    print("오류: payload 형식이 list도 아니고 str도 아닙니다.")
728x90
Posted by 반달가면