Microsoft 社는 2022년 6월 15일 Internet Explorer 11의 지원을 종료했습니다.

Apache James 와 한글

제목

Apache James 와 한글

Apache James 에서 한글이 포함된 이메일을 정상적으로 수신하기 위해서는 시스템 환경변수 중 file.encoding 을 "iso-8859-1" 로 설정해야 한다.

1. 가장 확실한 방법

1.1. 설정방법

conf/wrapper.conf 파일을 열어 "wrapper.java.additional" 을 찾아, 가장 마지막 부분에 다음과 같은 내용을 추가한다.

wrapper.java.additional.15=-Dfile.encoding=ISO-8859-1

15는 일련번호이므로, 이미 붙여진 번호의 마지막에서 1을 더하여 붙인다.

1.2. 확인방법

Apache James 를 기동하고, 다음의 명령어로 프로세스를 검사했을 때, Apache James 프로세스가 보여야 한다.

ps -ef | grep james | grep ISO-8859-1

1.3. locale을 변경하는 방법을 사용하지 않는 이유

  • 설정이 적용되었는지 확인하기 힘들다(WAS 와 달리 손쉽게 이런 설정을 확인할 수 있는 방법이 없다).
  • Apache James 에서 제공하는 기동스크립트만으로 해결된다.

1.4. us-ascii 가 아닌 이유

us-ascii 은 7bit 인코딩이어서 euc-kr 이나 utf-8 과 같은 인코딩과 호환되지 않는다.

1.5. Apache James 3 에서 삽질의 기록

Apache James 2 에서는 이메일 서버를 기동시키기 전에 다음과 같은 환경변수를 설정하는 방법으로 해결할 수 있었다.

export PHOENIX_JVM_OPTS="-Dfile.encoding=ISO-8859-1"

Apache James 3 에서는 위와 같은 방법을 찾을 수가 없었지만, 앞에서 소개한 더 우아한 방법을 찾을 수 있었다.

2. 원인

Apache James 에서 이메일을 수신하는 프로그램 코드에서 charset 을 지정하지 않고, 시스템 기본값(file.encoding)을 사용하기 때문이다.

한글이 무조건 깨지는 것은 아니고, 시스템 기본값(file.encoding)이 utf-8 인데 이메일에 euc-kr 로 인코딩된 문자열이 포함되어 있거나 반대의 경우이다.

Mime 표준은 이메일 헤더에서는 us-ascii 를 넘는 범위의 문자열이 포함된 경우, 약속된 방식으로 이를 us-ascii 범위내의 문자로 변경하고, 그 방법을 포함하도록 하고 있다.

이메일 본문의 경우 Content-Transfer-Encoding 헤더를 사용하여 인코딩정보와 함께 us-ascii 범위 외의 문자를 포함시킬 수 있다.

Apache James 를 euc-kr 혹은 utf-8 따위로 실행한 경우에 발생하는 한글 문제는 대부분 이메일을 발송하는 쪽에서 표준을 준수하지 않았을 가능성이 높기는 하다.

spam 일 가능성이 높지만, 그렇지 않은 경우도 많다.

제목

첨부파일