그누 보낸 메일 내용 깨짐 정보
그누 보낸 메일 내용 깨짐본문
윈도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로
되어 있음에도 불구하고 정상적인 내용을 볼 수 있었습니다.
따라서 위 코드에서 지정하는 문법이 잘못된 것 같은데, 그누 회원님들께서 알려주셨으면 좋겠습니다.
그런데 메일 제목은 제대로 출력이 되는데, 본문내용이 깨져서 나오네요.
헤더에 잘못이 있어서 그런건지, 아니면 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로
되어 있음에도 불구하고 정상적인 내용을 볼 수 있었습니다.
따라서 위 코드에서 지정하는 문법이 잘못된 것 같은데, 그누 회원님들께서 알려주셨으면 좋겠습니다.
댓글 전체