RFC2047: Message Header Ext for Non-ASCII

CSS Design Korean 게시판을 보다가 vBulletin 을 통해 발송된 메일의 문제점 관련된 글을 보게되었습니다… mail header 에 ASCII 가 아닌 글자가 들어가게 될 경우엔 오래된 시스템에서 문제를 일으킬 수도 있기 때문에… 한글과 같은 ASCII 영역 밖의 글자들을 사용하고 싶은 경우엔 RFC2047 에 따라 인코딩을 해줘야 합니다…

해당 쓰레드: http://forum.standardmag.org/viewtopic.php?id=189

예전에 웹메일을 만들어볼 땐 RFC 는 찾아보지 않고 그냥 여러가지 케이스를 놓고 이렇게 구성되어 있구나 정도만 알고 있었는데… RFC 문서에 제약조건들이 상세히 설명되어 있군요… (당연한거지만)

  1. ASCII 케릭터가 아닌 경우 =?charset?encoding?encoded-text ?= 의 형태로 인코딩 되어야 한다
  2. encoded text 는 75자를 넘으면 안된다 (charset, encoding, delimiters 포함!)
  3. 75자 이상이 나와야 하는 경우는 여러 줄로 나눠 쓰는 건 문제가 되지 않는다…
  4. encoded text 사이의 white space 는 무시된다

대략 이정도로 정리가 되네요… 하튼 재밌어 보여서 코드를 구현해봤습니다. 처음엔 그냥 단순하게 75자 단위로 되도록 wordwrap 을 이용해서 잘랐었는데, 그렇게 할 경우에 글자와 글자 사이에서 잘리는 경우가 생길 수 있어 문제가 된다는군요.

예전에 그런 식으로 마구마구 보내진 경우 때문에 디코딩 함수를 좀 묘하게 짰었는데… 그게 메일발송 프로그램 쪽에서 잘못한 거 였나보군요.

뭐 그래서 글자를 utf-8 이라고 가정해버리고 글자들의 경계에서만 잘리도록 함수를 만들어 봤습니다… (요샌 이런 간단간단한 코드를 짜는게 재밌네요) 예전 xchat 의 딩딩 바이러스를 해결할 때에 사용했던 glib 의 utf8_validation 형태를 빌려봤는데, 우선 대강 잘 동작합니다.

다 만들어놓고 저 쓰레드에 또 한 번 “그렇게도 만들어봤어요~” 식으로 올려볼까 했는데 신정식님이 더 멋지게 만들어놨길래… 흑흑;;; 그냥 제 블로그에만 포스팅을!! 조금 더 효율적으로 고칠만한 부분들이 있긴 한데… 건들기가 귀찮네요. 꺄하하핫;;

  • rfc2047: http://www.faqs.org/rfcs/rfc2047.html
  • 코드: http://mytears.org/resources/mysrc/php/base64/test.php

Similar Posts:

Facebooktwitterlinkedinmail

Leave a Reply