일본어 메일송신 프로그램 작성시 유의점

프로그래밍/프로그래밍 메모장 2008/05/20 13:26

일본어 메일송신 프로그램 작성시 유의점 by Xevious7
http://www.xevious7.com/359

2002년에 우연스럽게 일본에서 일을 하게 되었는데 그때 만든 시스템의 기능중에
고객들에게 자동메일을 보내는 기능이 있었다.
따라서 일본어 메일보내기 프로그램을 작성한적이 있었다. 그 이후로 여러번
비슷한 프로그램을 작성하였고 최근에도 하나 만들게 되어서

이글을 통하여 일본어 메일송신 프로그램을
작성하는데 있어서 알아야 될 것들을 정리해본다.

메일 송신 프로그램의 작성

시스템의 구조에 따라서 메일송신 프로그램의 작성은 여러형태로 나뉘어 질수 있는데
내가 작성했던 경우는 프로토콜수준부터 작성해야 되는 경우였다.
대부분의 경우는 프로토콜 수준부터는 아니고 그 상위에서 메일보내기 API를
쓰는 경우부터로 생각된다.

메일보내기 API를 직접 작성을 했든 언어또는 라이브러리에서 지원하는 API를
사용하든 키 포인트는  '메일본문'과 '메일제목'을 일본어로 어떻게 처리하는지에
관한 것이다.

따라서 이 문서는 그 요점만을 다룬다. 각각언어에서의 메일보내기 API나 라이브러리의
API 대한것은 해당언어 또는 라이브러리의  레퍼런스를 참조하기 바란다.
프로토콜에 따라서 직접 API를 작성하는 것은 메일전송 표준 프로토콜인 SMTP
(RFC 821 - http://tools.ietf.org/html/rfc821 )를 참조하여 TCP/IP 응용프로그램을
작성하면 된다.

일본어 문장의 엔코딩

많은 문자셋과 많은 인코딩 방식이 존재하는데 현재에서 널리 통용될 수 있는 표준은
UTF-8 유니코드 이다.
그러나 일본내에서는 UTF-8은 널리 통용되지 못한다. 널리 통용되지 못한다는 것은
UTF-8로 인코딩 하여 보냈을때 이 메일을 받는 수신프로그램에서 이것을 제대로
지원하지 못해서 깨진메일로 보이는 경우가 많다는 것이다.

일본에서 가장 많이 쓰이는 표준은 JIS표준인 ISO-2022-JP 이다.
따라서 일본어 메일송신 프로그래밍을 할때에서는 이 표준으로 인코딩해서
보내야 한다.
인코딩모듈은 규약(http://tools.ietf.org/html/rfc1468)을 보고 직접작성해도 되고
iconv같은 범용 문자셋 변환 라이브러리를 사용하면 된다.

직접인코딩 모듈을 작성할때 유용한 책을 하나 소개하면 ,
Understanding Japanese Information Processing , Ken Lunde O'Reilly & Associates Inc
로 아래처럼 복어그림이 있다.

(폰카로 찍었는데 폰카도 나름쓸만하다)

이 책을 1997년에 구입해놓고 대략 보는 정도였는데 , 2002년에 실제로 관련일을
하게되어서 유용하게 보았던 책이었다.
( Shift-J -> JIS 로 변환등 복잡한 일본어 인코딩에 대한 전반적인 지식을
읽히기에 좋다.)

일본어 메일의 메일제목

일본어 메일에서 메일제목 처리 또한 ISO-2022-JP로 해주어야 한다.
다만 주의할점은 Q엔코딩 방식이 아닌 base64 로 한번 더 인코딩 해주어야 한다.
이말은 ISO-2022-JP로 인코딩된 문자열을 다시한번 base64로 인코딩해야된다.

이렇게 변환된 문자열을 MIME표준의 (RFC 2822)에 의거하여
만들어주면된다.

간단하게 설명하면 =?인코딩문자?인코딩방식?인코딩문자열?= 형태이다.

즉 =?iso-2022-jp?b?베이스64인코딩문자일?=  형태로 메일제목을 설정해야된다.

위의 두가지만 주의하면 일본어 메일을 처리하는데 있어서 큰 문제는 없으리라본다.

기타 사항

가끔 JIS마저도 소화하지 못하는 또는 메일서버시스템의 잘못된 설정이라든지
기타 여러가지 이유로 ISO-2022-JP로 제대로 인코딩하여 보낸 메일임에도 불구하고
메일을 인식못하는 경우및 깨짐현상이 있을 수 있는데 , 이런 경우는 어쩔수
없다. 야후및 아웃룩 또는 메이져 핸드폰 회사의 폰에서 메일이 정상적으로
보여진다면 이것을 자료로 제시하여 해당측의 문제를 잘 집어내주어야 한다.



top

◀ PREV : [1] : [2] : [3] : [4] : [5] : [6] : [7] : .. [23] : NEXT ▶