y00njinuk / emlExtractor

파이썬으로 구현한 EML 헤더/내용 추출기
1 stars 0 forks source link

본문 인코딩 타입에 따라 디코딩 작업이 제대로 수행되지 않음 #5

Closed y00njinuk closed 4 years ago

y00njinuk commented 4 years ago

본문의 인코딩 방식이 QP 인코딩이 아닌 base64 일 때 디코딩 오류 발생하게 되며, 바로 이전에 작업한 text_content를 불러와서 저장이 되어 실제 내용과 전혀 다른 내용이 저장됨

y00njinuk commented 4 years ago

Reference : https://docs.python.org/3/library/email.header.html#email.header.Header.append

RFC 2822 is the base standard that describes the format of email messages. It derives from the older RFC 822 standard which came into widespread use at a time when most email was composed of ASCII characters only. RFC 2822 is a specification written assuming email contains only 7-bit ASCII characters.

Of course, as email has been deployed worldwide, it has become internationalized, such that language specific character sets can now be used in email messages. The base standard still requires email messages to be transferred using only 7-bit ASCII characters, so a slew of RFCs have been written describing how to encode email containing non-ASCII characters into RFC 2822-compliant format. These RFCs include RFC 2045, RFC 2046, RFC 2047, and RFC 2231. The email package supports these standards in its email.header and email.charset modules.

Notice here how we wanted the Subject field to contain a non-ASCII character? We did this by creating a Header instance and passing in the character set that the byte string was encoded in. When the subsequent Message instance was flattened, the Subject field was properly RFC 2047 encoded.

y00njinuk commented 4 years ago

Reference : https://blog.naver.com/PostView.nhn?blogId=jerid&logNo=30964946&proxyReferer=https:%2F%2Fwww.google.com%2F

인터넷에서 메일이 전달되는 데에는 사용자가 알지 못하는 복잡한 과정이 숨어있습니다. 물론 과학기술이 발달할수록 개인들은 편리하게 이용이 가능하지만 이런 편리함의 전제가 되는 것은 전세계적으로 공용되는 "표준"에 있습니다. 한글로 표기된 메일은 encoding과 decoding이라는 과정을 거치는데, 이 과정에서 메일의 메시지는 우리가 알아볼 수 없는 암호와 같은 형태로 인터넷이라는 공간을 통해 전달됩니다. 다만 상호간에 알아볼 수 있도록 미리 약속이 정해져 있는데, 그 약속에 따르면 한글 메시지는 euc-kr 이라는 코드네임을 갖습니다. 전세계 어디에서고 euc-kr 이라 코드를 붙이고 있으면 이것은 한글인 것이고, 메일 받는쪽의 프로그램이 자동으로 한글로 풀어 보여주는 것입니다.

그런데 한가지 문제가 생겼습니다. 운영체제와 소프트웨어에 거대한 영향력을 가지고 있는 MicroSoft 사가 어찌된 영문인지 자사의 메일 프로그램 제품에 euc-kr 이 아닌 이상한 이름의 코드를 사용하는 것입니다. 그 코드의 이름이 바로 ks_c_5601-1987 입니다. MS사의 고의인지 프로그램 제작중의 실수인지 알수는 없으나 문제는 상당히 심각한 형편이 되었습니다. 전세계에서 다수의 컴퓨터/인터넷 사용자가 MS의 windows 시리즈를 운영체제로 사용합니다. 또한 Internet Explorer가 가장 대중적인 웹 브라우저입니다. 그리고 Outlook Express 라는 메일 프로그램이 있습니다. 이 메일프로그램이 바로 문제의 주범입니다. 이처럼 많은 영향력을 가지고 있는 상황에서 잘못된 한글 문자셋(코드네임)을 사용한다는 것은 인터넷의 편리함과 그 이면의 표준을 깨트리는 심각한 잘못입니다.

이미 많은 사용자들이 MS의 이러한 잘못을 지적한 바가 있으나 MS사에서는 아직까지도 해결을 해주지 않고 있습니다. 이에 사용자들 스스로가 프로그램의 설정을 통해 올바르게 사용할 수 있도록 하자는 여론이 높습니다.

저희가 관리하는 메일서버 역시 이러한 흐름에 동참하여 잘못을 고치는데 일조하려 합니다. 사용자께서 약간의 불편함을 감수하시어 프로그램을 올바르게 설정한다면 훗날 인터넷의 표준을 지키는데 큰 힘이 될 것입니다.