경고 : 이 방법은 정확한 해결책이 아닐 수 있다. 꼭 필요한 경우에만 적용하자.

roundcube 를 쓰면서 좀 불편한 점이 한글메일이 간혹 깨지는 경우였다.
깨지는 경우는 roundcube 가 이상있는 것이 아니라, 보내는 쪽에서 메일의 헤더에 charset 을 지정하지 않은 경우이다. 대부분 메일 규칙을 지키지 않는 아주 불량한 메일이라고 봐도 된다.

그래도 간혹 봐야 하는 경우가 생기니. 정부(관공서)메일에서도 심심찮게 발견된다.
간단하게나마 몇 부분(파일2개)을 수정해서 한글을 볼 수 있게 해보자.

1) config/main.inc.php ( 라인 수는 다를 수 있다. )
497    //$rcmail_config['default_charset'] = 'ISO-8859-1';
498    $rcmail_config['default_charset'] = 'EUC-KR';
기본 ISO-8859-1 으로 지정된 것을 EUC-KR 로 지정했다.(위처럼 주석처리하거나 바꿔준다)

2) program/include/rcube_imap.php
2369 라인 정도 ( _set_part_filename 함수 내 )
if( $part->charset == 'us-ascii' ) $part->charset = 'euc-kr';

 // decode filename
if (!empty($filename_mime)) {
    $part->filename = rcube_imap::decode_mime_string($filename_mime,
    $part->charset ? $part->charset : ($this->struct_charset ? $this->struct_charset :
    rc_detect_encoding($filename_mime, $this->default_charset)));
}
else if (!empty($filename_encoded)) {
    // decode filename according to RFC 2231, Section 4
    if (preg_match("/^([^']*)'[^']*'(.*)$/", $filename_encoded, $fmatches)) {
    $filename_charset = $fmatches[1];
    $filename_encoded = $fmatches[2];
    }
    $part->filename = rcube_charset_convert(urldecode($filename_encoded), $filename_charset);
}


2449 라인 정도.( &get_message_part 함수내 )
if ($body && $o_part->charset
    && preg_match('/^(text|message)$/', $o_part->ctype_primary)
) {
    if( $o_part->charset == 'us-ascii' ) $o_part->charset = 'euc-kr';
    $body = rcube_charset_convert($body, $o_part->charset);
}

imap 으로부터 charset이 지정되지 않으면 us-ascii 로 지정되는데, 이런 것들을 euc-kr 메일로 가정하는 것이다. roundcube 는 내부적으로 UTF-8 로 변환한다.
더 하부적으로 내려가서 바꿔줄수도 있을 듯 한데. 일단 여기까지.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

, 댓글  3개가 달렸습니다.
secret