그누 보낸 메일 내용 깨짐 > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

그누 보낸 메일 내용 깨짐 정보

그누 보낸 메일 내용 깨짐

본문

윈도OS에서 그누 메일 보내는 부분을 수정하여 잘 보내집니다.
그런데 메일 제목은 제대로 출력이 되는데, 본문내용이 깨져서 나오네요.
헤더에 잘못이 있어서 그런건지, 아니면 base64 encode를 잘못 사용한건지 모르겠네요..
메일 서버는 메일캐리어라는 서버이며, 이 서버 또한 메일 송수신시 base64 encode를
사용합니다.

아래는  mailer.lib.php 중 메일 발송 함수 부분 입니다.
-------------------------------------------------------------------------
function mailer($fname, $fmail, $to, $subject, $content, $type=0, $file="", $charset="EUC-KR", $cc="", $bcc="")
{
    global $config;
    global $g4;

    // 메일발송 사용을 하지 않는다면
    if (!$config[cf_email_use]) return;

    $fname  = "=?$charset?B?" . base64_encode($fname) . "?=";
    $subject = "=?$charset?B?" . base64_encode($subject) . "?=";
    $charset = ($charset != "") ? "charset=$charset" : "";

    $header  = "Return-Path:$fname<$fmail>\n";
    $header .= "From:$fname<$fmail>\n";
    $header .= "Reply-To:<$fmail>\n";
    if ($cc)  $header .= "Cc:$cc\n";
    if ($bcc) $header .= "Bcc:$bcc\n";
    $header .= "MIME-Version:1.0\n";
//    $header .= "X-Mailer:SIR Mailer 0.91 (sir.co.kr) : $_SERVER[SERVER_ADDR] : $_SERVER[REMOTE_ADDR] : $g4[url] : $_SERVER[PHP_SELF] : $_SERVER[HTTP_REFERER] \n";

    if ($file != "") {
        $boundary = uniqid("http://sir.co.kr/");

        $header .= "Content-type: MULTIPART/MIXED; BOUNDARY=\"$boundary\"\n\n";
        $header .= "--$boundary\n";
    }

    if ($type) {
        $header .= "Content-Type: TEXT/HTML; $charset\n";
        if ($type == 2)
            $content = nl2br($content);
    } else {
        $header .= "Content-Type: TEXT/PLAIN; $charset\n";
        $content = stripslashes($content);
    }
    $header .= "Content-Transfer-Encoding: BASE64\n\n";
    $header .= "\n";
    $content .= chunk_split(base64_encode($content)) . "\n";


    if ($file != "") {
        foreach ($file as $f) {
            $header .= "\n--$boundary\n";
            $header .= "Content-Type: APPLICATION/OCTET-STREAM; name=\"$f[name]\"\n";
            $header .= "Content-Transfer-Encoding: BASE64\n";
            $header .= "Content-Disposition: inline; filename=\"$f[name]\"\n";

            $header .= "\n";
            $header .= chunk_split(base64_encode($f[data]));
            $header .= "\n";
        }
        $header .= "--$boundary--\n";
    }
// 변수 확인 출력
// echo "to : ".$to."<br>";
// echo "subject : ".$subject."<br>";
echo "header : ".$header."<br>--end--";
    mail($to, $subject,$content, $header);
}
------------------------------------------------------------------------------------
헤더 부분에 [$content .= chunk_split(base64_encode($content)) . "\n";]부분이
원래 [$header .= chunk_split(base64_encode($content)) . "\n";] 이렇게 되어 있었고,
메일 함수는 [mail($to, $subject,"", $header);] 이렇게 되어 있었네요.
헤더에 내용을 넣어서 보내는것을 변경하였습니다.

여기 답변중에 base64 encode부분을 삭제하고 보내라고 하신 분이 계셨는데,
정상적으로 들어온 다른 메일의 헤더를 확인해보니 Content-Transfer-Encoding: base64로
되어 있음에도 불구하고 정상적인 내용을 볼 수 있었습니다.

따라서 위 코드에서 지정하는 문법이 잘못된 것 같은데, 그누 회원님들께서 알려주셨으면 좋겠습니다.

댓글 전체

전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT