티스토리 뷰

반응형

PHP의 mail() 함수를 사용하여 이메일을 보낼 때, 한글 문자가 깨지는 문제가 발생할 수 있습니다. 이 문제를 해결하기 위해서는 이메일 본문을 올바른 인코딩으로 변환해야 합니다.

다음은 PHP에서 mail() 함수를 사용하여 한글 문자가 포함된 이메일을 보내는 예제입니다.

$to = 'recipient@example.com';
$subject = '한글 제목';
$message = '한글 본문';

$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
$headers .= "From: sender@example.com" . "\r\n";

mail($to, $subject, $message, $headers);

이 예제에서는 Content-type 헤더에 charset=UTF-8을 설정하여 이메일 본문이 UTF-8 인코딩으로 작성되었음을 나타내고 있습니다. UTF-8은 대부분의 언어를 지원하는 범용 인코딩 방식이므로, 한글 뿐만 아니라 다른 언어의 문자도 올바르게 표시됩니다.

따라서, 이메일 본문을 작성할 때 UTF-8 인코딩으로 작성하고, Content-type 헤더에 charset=UTF-8을 설정하는 것이 중요합니다. 이를 통해 한글을 포함한 다양한 문자를 올바르게 표시할 수 있습니다.

첨부파일을 넣어서 보내고 싶을때

PHP의 mail() 함수를 사용하여 이메일에 첨부 파일을 추가할 때, 이메일 본문에 한글 문자가 포함된 경우에도 이를 올바르게 처리할 수 있습니다. 이를 위해서는 이메일 본문을 적절한 인코딩으로 변환하고, 첨부 파일도 올바른 형식으로 인코딩하여 전송해야 합니다.

다음은 PHP에서 mail() 함수를 사용하여 이메일에 첨부 파일을 추가하고, 이메일 본문에 한글 문자가 포함된 경우에 대한 예제입니다.

 

$to = 'recipient@example.com';
$subject = '한글 제목';

// 이메일 본문 작성
$message = "한글 본문입니다.";

// 이메일 본문 인코딩 설정
$message = iconv('UTF-8', 'EUC-KR', $message);

// 첨부 파일 경로 및 파일명
$filename = '/path/to/attachment.pdf';
$basename = basename($filename);

// 첨부 파일 MIME 타입 확인
$filetype = mime_content_type($filename);

// 첨부 파일 읽기 및 base64 인코딩
$filedata = chunk_split(base64_encode(file_get_contents($filename)));

// 이메일 헤더 작성
$headers = "From: sender@example.com\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"boundary\"\r\n";
$headers .= "Content-Disposition: attachment; filename=\"$basename\"\r\n";

// 이메일 본문 작성
$body = "--boundary\r\n";
$body .= "Content-Type: text/plain; charset=\"EUC-KR\"\r\n";
$body .= "Content-Transfer-Encoding: base64\r\n\r\n";
$body .= chunk_split(base64_encode($message));

// 첨부 파일 작성
$body .= "--boundary\r\n";
$body .= "Content-Type: $filetype; name=\"$basename\"\r\n";
$body .= "Content-Disposition: attachment; filename=\"$basename\"\r\n";
$body .= "Content-Transfer-Encoding: base64\r\n\r\n";
$body .= $filedata . "\r\n\r\n";

// 메일 전송
mail($to, $subject, $body, $headers);
 
 

이 예제에서는 iconv() 함수를 사용하여 이메일 본문을 EUC-KR 인코딩으로 변환하였습니다. 이메일 본문과 첨부 파일의 MIME 타입과 인코딩 방식을 정확하게 지정하고, 첨부 파일은 base64 인코딩하여 전송하였습니다. 또한, 이메일 본문과 첨부 파일을 각각 다른 boundary로 구분하여 전송하였습니다.

따라서, 이메일에 첨부 파일을 추가하면서도 이메일 본문의 한글 문자를 올바르게 처리할 수 있습니다.

반응형
댓글