Windows, Linux, Others

php mail 내용 느낌표로 깨짐 현상 (한글 깨짐)

p

php mail fracture content

php mail() 함수를 사용할 때 body 내용에 일부 글자가 느낌표로 바뀌어 깨지는 현상이 발생할 때가 있습니다.
예 ) 안녕하세요. 반 ! 습니다.
원하는 한글 문자가 나오지 않고 ! 나 ? 등의 문자로 메일을 받게 되었다면 이렇게 해결해 주시면 됩니다.

 

php mail 내용 느낌표로 깨짐 문제 해결하기


먼저 해당 원인은 메일 콘텐츠의 내용이 1,000자가 넘어가게 되어 발생하는 문제입니다.

한글 문자가 깨지는 문제는 메일 헤더에 Content-Transfer-Encoding: base64 \r\n 을, 메일 내용을 담은 변수(content라고 가정)에는 chunk_split(base64_encode($content)) 와 같이 지정해주셔야 합니다.

아래 코드 예제로 위 코드가 적용되는 부분을 확인할 수 있습니다.

// 메일 헤더
$headers = "From: hello<do-not-reply@a.com>\r\nMIME-Version: 1.0\r\nContent-Type: text/html; charset=utf-8\r\nContent-Transfer-Encoding: base64\r\n";

// 메일 제목
$title = "메일 제목입니다.";
$title = "=?utf-8?B?".base64_encode($title)."?=\n";

// 메일 콘텐츠
$content = "<html lang='ko'><head><meta charset='utf-8'/></head><body><h1>Hello, World! 안녕하세요. 테스트입니다.</h1></body></html>";

// 메일 전송
mail("전송할 이메일 주소", $title, chunk_split(base64_encode($content)), $headers);

만약 이 방법으로도 해결되지 않는다면 메일 콘텐츠 내 head 태그에 <meta charset='utf-8' /> 을 추가하거나 메일 헤더에 \n 을 \r\n 으로 바꾸어 본 후에 다시 시도해보면 됩니다.

댓글 달기

Windows, Linux, Others

최근 글

최근 댓글

카테고리