뭘 이런걸..

Posted
Filed under Tech/프로그래밍
얼마전 우연히 RoundCube Webmail 이라는 걸 알게 되어 0.10statble 버전을 설치해 보았습니다. 일단 설치해 본 결과 상당히 깔끔하다는 인상을 받았는데.. stable 이라는 버전에 맞지않게 버그들도 좀 보이더군요.

기타 등등 각설하고, 일단 가장 큰 문제는 한글이 깨지는 문제가 있다는 것입니다. 물론 잘 나오는 메일도 있겠지만, 이런 문제가 발생하는 것은, 메일의 헤더나 multi-part 의 header 에 charset 이 지정되지 않았을 경우, RoundCube 가 charset 을 US-ASCII 로 강제 하는데서 발생하는 문제입니다. 더 정확히는 RoundCube 가 US-ASCII 로 처리하는 것이 아니라 imap server 가 그렇게 처리하게 됩니다. (이건 wu-imap 에서의 문제입니다. 다른 imapd 에서는 어떨지 모르곘군요.)

wu-imap package 를 사용하시는 분들이나 charset 이 지정되지 않은 경우 메일이 깨지면 다음의 patch 를 해 보시기 바랍니다.

0.1 patch file

0.1.1 patch file


P.S.
patch file 을 잘 보시면 main.inc.php 에

$rcmail_config['default_charset'] = 'euc-kr';

와 같이 지정하는 것이 있습니다. 이걸 지정해야 charset 이 없을 경우 기본 charset 으로 처리하게 됩니다.
2008/10/01 02:26 2008/10/01 02:26
조현철

이 쓰레드가 여기까지나 진행이 되었네요... ^^
예전 포스팅한 글을 보고 다람쥐를 내리고 RoundCube를 올렸었는데..
한글등 여러 문제로 사용하지 않고 있었는데요..

날로 먹는 기분이네요.. 고생해주신 덕분에 감사히 잘 사용토록 하겠습니다.
감사합니다.

살라딘

답변 감사드립니다..

귀중한 시간을 빼앗은것 같아 대단히 죄송합니다.

제출한 patch를 적용해보니 문제 없이 잘되네요...
많은 도움 얻어 갑니다.

살라딘

여기 저기 찾아가며, 설치는 했는데 여러가지 문제가 많네요...
그래서 도움 좀 구하고자 합니다...

현재 설치 버젼은 trunk-r1993 입니다.

문제1. roundcubemail에서 메일을 보내고 Outlook Express에서 회신을 하게 되면...
회신 내용이 roundcubemail에서 깨져 보이네요..(헤더 정보를 보면 UTF-8로 보내서 UTF-8로 받는데...그리고 MS-Outlook에서 회신하게 되면 roundcubemail에서 깨져 보이지 않습니다. Outlook Express만의 문제인것 같습니다만...)

문제2. 최신 버젼은 아래와 같이 main.inc.php 파일에 설정하는 부분이 있습니다.
0, 1번 설정에 대해서는 파일첨부하여 보낼시 한글파일명이 깨집니다.
그리고 2번 설정에 대해서는 긴파일명(한글)에 대해서 깨집니다.

// Encoding of long/non-ascii attachment names:
// 0 - Full RFC 2231 compatible
// 1 - RFC 2047 for 'name' and RFC 2231 for 'filename' parameter (Thunderbird's default)
// 2 - Full 2047 compatible
$rcmail_config['mime_param_folding'] = '설정번호'

위 2문제로 낑낑대고 있는데...잘안되네요. 도움좀 부탁드립니다.

김정균

첫번째 OE 가 보낸 메일을 못 읽는 것은 UTF8 BOM 때문입니다. 보통 Unix 군에서는 UTF8 BOM을 사용하지 않는 것을 권장하고 있는데, MS의 몇몇 application (특히 notepad) 들이 BOM code 를 사용하고 있습니다. 여기서 OE가 UTF-8 encoding 을 할 때 BOM code 를 넣는 것 같군요. 일단 BOM code 제거를 하니 제대로 출력이 되는 것을 확인했습니다.

그리고 두번째 문제도 수정을 하기는 했습니다만, 패치를 받아 줄지는 모르겠군요. 딱히 버그라고 할 수도 없고, RFC2047에 보면 encoding 된 문자열이 75byte 가 넘지 않아야 한다고 되어 있어, roundcube 에서는 75자가 넘어갈 경우 그냥 뒤를 버려 버리므로서 발생하는 문제입니다. rfc2047에 의거하면, 75자가 넘을 경우, carrage return, new line, space를 이용해서 그 이후의 string 을 연결하면 된다고 되어 있어, 이렇게 수정해서 패치를 제공하기는 했습니다만.. 받아 들여줄지는 저도 보장은 못하겠습니다. :-)

일단, 두가지 문제에 대해서 patch는 제출한 상태이니 기다려 보시기 바랍니다.

오늘 하루 꼬박 날라갔군요. 앞으로는 더 이상 roundcube 문제 해결에 관여하지 않을 생각 입니다. roundcube 의 code 가 엄청나게 복잡한 관계로 문제가 되는 부분을 찾는데 걸리는 시간이 대부분이다 보니 회사에서의 눈치가 장난이 아닙니다. 제가 roundcube 를 굳이 사용하는 입장도 아닌 상황에서 무상 지원은 쉽지 않을 것 같습니다.

그리고 더 중요한 것은 끝이 없어요 T.T 저는 봉이 아니랍니다. ^^

김정균

http://trac.roundcube.net/ticket/1484961 에서 거부당했던 패치의 ticket 이 다시 열렸습니다. 0.2 에서 해당 내용이 많이 반영이 되었는데, 아직 좀 부족한 편입니다.

일단, charset 에 상관없이 charset 이 잘못 출력될 수 있는 버그 2개에 대한 패치를 제공한 상태이며, 여전히 body 에 charset이 지정되지 않았을 경우, IMAPD 가 US-ASCII나 X-UNKNOWN을 리턴해서 발생하는 부분은 여전히 고쳐지지 않았습니다. 그래서 패치를 다시 제출한 상태인데, 잘 받아들여질지는 모르겠군요.

다만, 해당 ticket 에 제시된 이미지들이 좀 낯뜨거운 이미지들이군요.. ^^; sample 제출을 잘 못한듯.. ㅋㅋ

김정균

Message body 에 charset 이 지정되지 않았을 경우가 문제가 되고 있네요. 개발자들이 사용하는 imapd 인 Courier의 경우에는 charset 이 지정되어 있지 않을 경우 NIL을 return 하기 때문에 제대로 보이는데, Cyrus-imapd 나 Wu-imapd 의 경우에는 US-ASCII 나 X-UNKNOWN을 return 하기 때문에 깨지는 문제가 발생하는데, 이 부분에 대한 조율이 쉽지 않네요. 쩝.. 0.2 에서는 이 문제가 해결이 되어 나올지 쉽지 않은 문제인것 같습니다.

문제가 하도 많아서.. SSL 모드시에 헤더 출력 부분은 현재 무시된 상태이고, 리스팅에서도 CHARSET을 가진 제목이 있을 경우 다음 나오는 제목이 CHARSET이 없을 경우 이전의 CHARSET 이 유지되는 문제도 있는데 역시 묻히고 있는 듯한 기분이 ^^;

안되는 영어로 하려니 저도 힘들고.. 보는 사람도 힘들지 않을까 예상 됩니다. ㅋㅋ

조셀

답변 감사합니다.
덕분에 메일부분은 잘 정리 된듯합니다.
많은 지식을 얻어 갑니다. ^_^

앞전에 적으신 "안녕리눅스 틈새 시장노린다~" 라는 글에 많은 도움 얻었습니다.
이번엔 freeradius + pptpd(poptop) + mysql + dialup_admin 연동하고 OpenWRT(DD-WRT)를 이용하여 공유기를 VPN장비로 사용 할 수 있도록 할 예정입니다.

목표는 공인아이피 대역을 공유기로 내려주고 공유기에서 각 할당된 공인아이피를 클라이언트로 재분배 하도록 할예정입니다.

제가 지식이 부족해서 많은 도움 부탁드리겠습니다. ^_^

조셀

전달 받은 내용대로 소스를 수정하니, 문제는 해결되었습니다.
전달해 주신 내용을 천천히 읽어 보니...

예전에 제가 해결하지 못한 imap server charset 문제로 결론을....

예전에 vpopmail + procmail 연동을 해서 "한글"로 차단을 하여 사용을 하였습니다.
아래와 같이 캐릭터 셋을 강제로 변환해서 적용하면 roundcube 웹메일에서 한글로 된 제목 캐릭터가 모조리 다 깨져어요.ㅡㅡ;

뭐 스팸으로 버리지 못했다면 제목을 원복을 해야 하는데...ㅎㅎ

결론은 imap default charset이 있다면 해결 될수 있었다는 답이 나왔는데...

제 느낌으로는 소스 수정으로 procmail 부분까지 해결 될듯 한데요???? 맞는지..?? ^_^

여튼 고생 많으셨습니다.
- 감사합니다 - (_ _);;


[root@ns etc]# cat procmailrc
VIRTUALHOME=`/home/vpopmail/bin/vuserinfo -d $EXT@$HOST`
MAILDIR=$VIRTUALHOME/Maildir/
DEFAULT=$MAILDIR
PATH=/usr/bin:/usr/local/bin:/bin
SHELL=/bin/sh
#LOCKFILE=$HOME/.lockmail
LOGFILE=/var/log/qmail/procmail/procmail.log
VERBOSE=no

:0 Efhw
*^(Subject|From|Cc):.*=\?EUC-KR\?(B|Q)\?
|formail -c | /usr/bin/hcode -dk -m

:0 Efhw
*^(Subject|From|Cc):.*=\?ks_c_5601-1987\?(B|Q)\?
|formail -c | /usr/bin/hcode -dk -m

:0 Efhw
*^(Subject|From|Cc):.*=\?KSC5601\?(B|Q)\?
|formail -c | /usr/bin/hcode -dk -m

:0 Efhw
*^(Subject|From|Cc):.*=\?ISO-8859-1\?(b|B|Q)\?
|formail -c | /usr/bin/hcode -dk -m

:0 BfHw
*^*.filename=.*=\?euc-kr\?(B|Q)\?
|formail -c | /usr/bin/hcode -dk -m

:0
*^Subject: .*(\{광|\[광|\(광|포르노|포X노|광고|광\ 고|홍보|광-고|성인|최저이자|기록\ 안남아요|대출|광1고|廣告|sex|SEX|porno)
/dev/null

*^Subject: .*대박
/dev/null

김정균

이건 procmail 의 변환 문제와는 별개 입니다. header 에 charset 이 정의 되어 있느냐 안되어 있느냐의 문제이기 때문입니다. 정의가 되어 있다면 수정하지 않은 roundcubemail 이 잘 처리하고 있기 때문입니다. 문제가 되는 것은 charset 이 정의 되어 있지 않은 메일까지 처리를 하려고 하다 보니 이런 문제가 발생을 하는 것이죠.

원래, MUA를 이용해서 정상적으로 메일을 보내는 경우는 거의 깨지지 않을 겁니다. 다만 스팸이나 웹에서 메일 발송 처리를 하는 것들 중에서 메일 파트 구성을 자기 멋대로 하는 경우가 문제가 발생되는 것이죠.

그래서 그냥 지금 imapd 에 default charset 을 지정하여 무조건 US-ASCII가 나오지 않도록 수정을 해 보고 있기는 합니다. 다른 imapd 는 써 본적이 없어서 고치지는 않겠지만 ^^;

김정균

흠.. roundcubemail 개발자와 bug tracking 을 하다가 좀 안습인 상황인 것을 발견했군요.

일단, 메일을 보낼 때 charset 을 정의해서 보내지 않은 메일을 제대로 뿌려주지 않아도 된다면 (Default charset 을 사용하지 않아도 되는 경우죠. 위의 02번 패치를 적용하지 않아도 된다면..) 03번 패치가 필요 없습니다. 03번 패치를 하지 않아도 roundcubemail 이 잘 처리를 해 준다는 의미입니다.

하지만, charset 이 정의되지 않은 메일 (Imap server 는 이 경우 US-ASCII를 return 합니다. 그래서 깨지는 거죠.) 을 US-ASCII 대신 default charset 으로 처리할 경우, 다른 영역에서 같이 사용하는 부분에 영향을 미치게 되어 더 수정을 하게 되는 것이죠.

프로그래밍 적으로는 위의 패치를 다 적용해서 제대로 하는 것이 맞겠지만, 실제로는 IMAP 서버가 default charset 을 지정해서 없을 경우 US-ASCII 대신 DEFAULT CHARSET 으로 return 해 줄 수 있다면.. 더 좋은 방법일 듯 싶습니다.

즉, 제가 roundcubemail 이 수정한 부분 때문에 영향을 받아서 계속 고치고 있느니 IMAP Server 를 수정하는 것이 더 간단한 일이 되어 버리게 되네요 쩝..

이런 안습인 상황이 나오다니 T.T

조셀

정말 이번 패치를 적용하고 여러가지 테스트를 해보니 다운로드가 잘됩니다. ^_^
정말 감사합니다.

패치를 적용하고 나서 아래와 같은 새로운 문제가 생겼습니다.(_ _);;

## 한글 메일폴더가 깨지는 현상 ##
http://www.zosel.net/tt.jpg

## 설정 화면엔 한글이 정상적으로 출력 됩니다. ##
http://www.zosel.net/tt1.jpg

김정균

음.. 함수를 정말 재활용 많이 하는 군요. --; 마지막 패치에 약간 수정을 해야 할 것 같군요.

roundcubemail/program/include/rcube_shared.inc 의 576라인에서

if ( preg_match('/MSIE/', $_SERVER['HTTP_USER_AGENT'])) {

부분을

if ( $_GET['_download'] && preg_match('/MSIE/', $_SERVER['HTTP_USER_AGENT'])) {

와 같이 수정해 주십시오.

본문의 패치들은 이 변경사항을 반영하여 다시 올려 놓았습니다.

조셀

일단 환경은 CentOS4.6에서 기본적인 APM을 사용하고 있습니다.
최근에 제작된 패치로 웹 메일서버를 재설치 하였습니다.
메일환경은 qmail+vpopmail+dovecot+mysql 로 설치 되어 있습니다.

패치 2개를 실행 후...

$rcmail_config['locale_string'] = 'kr';
$rcmail_config['default_charset'] = 'euc-kr';

이부분만 처리하면 한글부분은 깔끔하게 해결됩니다.(첨부파일 링크 제외)

첨부파일 링크를 해서 메일 확인을 누르고 다운을 받기위해 링크를 클릭하면 아래와
같은 화면이 나옵니다. mod_url은 모듈은 내렸습니다.


## 캡쳐화면 링크해 보냅니다. ##
http://www.zosel.net/cp1.jpg // 페이지 표시 할수 없음
http://www.zosel.net/cp2.jpg // 에러 메세지 나옴

번거롭지만 꼭 좀 부탁 드리겠습니다.

김정균

패치 올렸습니다. roundcubemail-0.1.1-UGLY-IE.patch 파일을 받으시면 됩니다. 이 문제는 오로지 IE에서만 발생하는 UGLY-IE 패치입니다. 이건 제작자 탓하기는 좀 그런데, 이 패치에 포함된 SSL관련 패치는 제작자가 좀 무심했었듯.. 이건 리포팅하면 받아질 것 같군요.

조셀

oops님, 이번에 만들어 주신 파일 패치를 적용하였는데...
한글 첨부가 되지 않네요.~
(첨부는 되지만, 다운로드 링크 활성화 되지 않습니다.)

## 아래 결과 ##
[root@ns html]# patch -p0 < roundcubemail-0.1.1-multibyte-attach.patch
patching file roundcubemail-0.1.1/program/include/rcube_imap.inc
patching file roundcubemail-0.1.1/program/include/rcube_shared.inc
patching file roundcubemail-0.1.1/program/lib/Mail/mime.php
patching file roundcubemail-0.1.1/program/lib/Mail/mimePart.php
patching file roundcubemail-0.1.1/program/lib/imap.inc
patching file roundcubemail-0.1.1/program/lib/is_utf8.class.php

## 위 적용 완료 후 한글 첨부파일을 웹메일로 보내고 받기함 //
한글 첨부에 링크가 활성화 되지 않음.
원인이 뭘까요?

김정균

일단 어떻게 안되는지를 보여 주셔야 할 것 같고요. (제가 인지하지 못한 부분일 수도 있으니까요.

그리고, config/main.inc.php 에서

$rcmail_config['locale_string'] = 'kr';
$rcmail_config['default_charset'] = 'euc-kr';

두가지 설정이 되어 있나요?

그리고, mod_url 설정 되어 있으면, rcube 에서는 off 시키도록 하세요. UTF8 로 오는 메시지가 변경되면 서버에서는 UTF8로 인코딩 하고 실제 넘어온 것은 EUC-KR이 되면 엉뚱한 문제가 발생할 수 있습니다.

조셀

너무 고생 많으셨습니다.
저도 손꼽아 기다리고 있었답니다. ^_^
이글 보는 즉시 바로 적용해 볼려고 합니다. ^^
수고 많으셨습니다.
그리고 감사합니다.

현호

너무고생하셨습니다. 감사드립니다~

낼출근하면 언능적용해봐야겠네요~^^

김정균

좀 삽질 하느라 오래 걸렸습니다. patch는 지난주에 만들었는데, UTF8 체크하는 부분을 만들다 라이센스 문제로, 아에 KSC5601 이라는 pear package 까지 만들어 버렸습니다. KSC5601 <-> Unicode (UCS4/NCR) <-> UTF8 을 통합적으로 관리할 수 있도록 하며, 예전에 만들어 놓았던 꾸질한 것들의 성능도 상당히 개선 시켰습니다.

이런 딴짓하느라 좀 오래 걸렸고, 오늘 마침 테스트 하다가, 이 패치 때문에, 첨부 이미지가 출력이 되지 않는 버그까지 잡아서 올립니다.

수정하면서 코드를 보다 보니, 열심히 만들었구나 하는 생각은 드는데, multibyte 관련 지원은 거의 없다고 보는 편이 맞을 것 같더군요. 아니 웹/메일상에서의 multibyte 관련 지식이 거의 없는 듯 싶은 느낌이 들었습니다.

조셀

예~ 감사합니다.
roundcube mail 이 고객쪽에 제공될 웹메일이라...^_^
이부분만 해결되면 한글 유저들에게 정말 유익한 웹메일이 될 것 같습니다.
항상 힘써 주셔서 다시 한번 감사 말씀 드립니다.

조셀

안녕하세요.
오늘도 혹시나 하는 맘에 들어 왔습니다.
아~ 수정한 것 같다고 하니, 한편으로 마음이 편안해 집니다.
수정패치는 언제 나오나요. 수정된 파일만 전달 받았으면 하는데...
혹시 가능 하다면 부탁 드리겠습니다.
zosel@zosel.net

김정균

다음주 내로는 나올 겁니다. UTF-8 관련 처리하는 부분의 코드가 라이센스가 걸려 배포하기가 좀 그래서 아예 새로 작성하고 있습니다. :-)