예전에 정리했던 "파이썬(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
'파이썬(python)' 카테고리의 다른 글
파이썬(python)을 이용해서 파일명 변경 (0) | 2024.09.20 |
---|---|
파이썬(python)에서 파일의 MD5 해시(hash)값 계산 (0) | 2024.08.12 |
파이썬(python)을 이용해서 텍스트 압축하기 (0) | 2024.07.21 |
파이썬(python)을 이용해서 문자열에 일본 글자가 있는지 확인 (0) | 2024.06.07 |
파이썬(python)을 이용해서 이메일(eml) 파일의 보낸 사람, 받는 사람, 제목 확인하기 (0) | 2024.04.09 |