Home 게시판 커뮤니티 Q&A 메일 인코딩시 한글깨짐 현상

2개 답변, 2 voices Last updated by Avatar of 082net082net 17 years, 5 months 전
  • Avatar of hoihearthoiheart
    Participant
    @hoiheart
    #2809

    wp 2.1.3 버전을 쓰고있는데 메일 인코딩시 한글깨짐 현상이 발생합니다
    (메일제목, 보내는사람, 받는사람 부분)

    마침
    https://kopress.kr/forums/topic.php?id=247
    글이 똑같은 상황이라 보고 참조하려 했는데 버젼이 틀려서 파일들도 안맞고
    라인도 안맞고 제가 php에는 문외한이라 봐도 잘모르겠습니다 -_-;

    도움주시면 감사하겠습니다 ^^

    Avatar of 082net082net
    Keymaster
    @082net
    #2810

    워드프레스 2.2 부터는 해당 오류가 발생하지 않는걸로 알고있습니다.

    하지만 그 이전 버전에서는 플러그인 파일을 만들어서 사용하셔야 오류를 해결 할 수 있습니다.

    2.2로 업그레이드 할 여건이 되지 않는 다면 링크를 남기신 글의 제 답변 중 플러그인을 활용하는 방식이 있으니 그에 따라 적용 해 보세요.

    ============================

    플러그인으로 만드는 방법을 잘 모르시겠다면 아래 코드 내용을 그대로 복사하여 메모장 또는 텍스트에디터에 붙여 넣은 뒤 파일 이름을 wp-mail-hack.php 로 저장 한 뒤 플러그인으로서 사용하시면 됩니다.

    <?php
    /*
    Plugin Name: WP Mail Hack
    Plugin URI: http://082net.com/
    Description: Fix mail header for utf-8.
    Version: 1
    Author: Cheon, Young-Min
    Author URI: http://082net.com/
    */

    if ( !function_exists('wp_mail') && !function_exists('mail_header_to_utf8') ) :
    function wp_mail($to, $subject, $message, $headers = '') {
       if( $headers == '' ) {
          $headers = "MIME-Version: 1.0n" .
             "From: wordpress@" . preg_replace('#^www.#', '', strtolower($_SERVER['SERVER_NAME'])) . "n" .
             "Content-Type: text/plain; charset="" . get_settings('blog_charset') . ""n";
       }
       $subject = mail_header_to_utf8($subject);
       if(preg_match('/From:(s*?)"(.*?)"(s*?)<(.*?)>/ie', $headers, $match)) {
          $new = explode("n", $headers);
          $new_headers = "";
          for($i=0;$i<count($new); $i++) {
             if(!empty($new[$i])) {
                $new_headers .= (strpos('From: "', $new[$i]) !== false)?'From: "'.mail_header_to_utf8($match[2]).'" <'.$match[4].'>'."n":$new[$i]."n";
             }
          }
          $headers = $new_headers;
       }
       return @mail($to, $subject, $message, $headers);
    }

    function mail_header_to_utf8($text) {
       if(strpos(strtolower($text), "=?utf-8") === FALSE) {
          $text = "=?UTF-8?B?".base64_encode($text)."?=";
       }
       return $text;
    }
    endif;

    ?>

    붙여 넣을 때 맨 처음 <?php 와 맨 마지막 ?> 이외에 빈 공간이 생기지 않도록 주의 하세요.

    Avatar of 082net
    Facebook 사용자 모임 그룹 도 함께 운영되고 있으며, 격 주로 미트업과 스터디를 진행하고 있으니 관심 있으신 분들의 많은 참여 바랍니다 🙂
    Avatar of 082net082net
    Keymaster
    @082net
    #2811

    워드프레스 2.2 부터는 해당 오류가 발생하지 않는걸로 알고있습니다.

    하지만 그 이전 버전에서는 플러그인 파일을 만들어서 사용하셔야 오류를 해결 할 수 있습니다.

    2.2로 업그레이드 할 여건이 되지 않는 다면 링크를 남기신 글의 제 답변 중 플러그인을 활용하는 방식이 있으니 그에 따라 적용 해 보세요.

    ============================

    플러그인으로 만드는 방법을 잘 모르시겠다면 아래 코드 내용을 그대로 복사하여 메모장 또는 텍스트에디터에 붙여 넣은 뒤 파일 이름을 wp-mail-hack.php 로 저장 한 뒤 플러그인으로서 사용하시면 됩니다.

    <?php
    /*
    Plugin Name: WP Mail Hack
    Plugin URI: http://082net.com/
    Description: Fix mail header for utf-8.
    Version: 1
    Author: Cheon, Young-Min
    Author URI: http://082net.com/
    */

    if ( !function_exists('wp_mail') && !function_exists('mail_header_to_utf8') ) :
    function wp_mail($to, $subject, $message, $headers = '') {
       if( $headers == '' ) {
          $headers = "MIME-Version: 1.0n" .
             "From: wordpress@" . preg_replace('#^www.#', '', strtolower($_SERVER['SERVER_NAME'])) . "n" .
             "Content-Type: text/plain; charset="" . get_settings('blog_charset') . ""n";
       }
       $subject = mail_header_to_utf8($subject);
       if(preg_match('/From:(s*?)"(.*?)"(s*?)<(.*?)>/ie', $headers, $match)) {
          $new = explode("n", $headers);
          $new_headers = "";
          for($i=0;$i<count($new); $i++) {
             if(!empty($new[$i])) {
                $new_headers .= (strpos('From: "', $new[$i]) !== false)?'From: "'.mail_header_to_utf8($match[2]).'" <'.$match[4].'>'."n":$new[$i]."n";
             }
          }
          $headers = $new_headers;
       }
       return @mail($to, $subject, $message, $headers);
    }

    function mail_header_to_utf8($text) {
       if(strpos(strtolower($text), "=?utf-8") === FALSE) {
          $text = "=?UTF-8?B?".base64_encode($text)."?=";
       }
       return $text;
    }
    endif;

    ?>

    붙여 넣을 때 맨 처음 <?php 와 맨 마지막 ?> 이외에 빈 공간이 생기지 않도록 주의 하세요.

    Avatar of 082net
    Facebook 사용자 모임 그룹 도 함께 운영되고 있으며, 격 주로 미트업과 스터디를 진행하고 있으니 관심 있으신 분들의 많은 참여 바랍니다 🙂
3 글 보임 - 1에서 3 까지 (총 3 중에서)
  • 답변은 로그인 후 가능합니다.