php mail() 함수로 첨부파일 보낼때 파일이름이 한글일 때?

php mail() 함수로 첨부파일 보낼때 파일이름이 한글일 때?

QA

php mail() 함수로 첨부파일 보낼때 파일이름이 한글일 때?

본문

안녕하세요?

아무리 해도 잘 안되네요.

 

php mail() 함수로 

그림파일이나, txt파일 .zip 파일을 첨부파일로 보낼 때

영문자 파일이름일때는 이상없이 잘 가는데


파일이름이 한글일 때는 "0 바이트"로 전송되거나, 가지 않는 경우
여러 공개 소스를 사용해 보았는데, 한글파일이름 제대로 보내는 소스를 찾지 못하였습니다.

대부분 , 안 가거나 0바이트 코드 뿐이라서요..

고수님들의 답변을 부탁드립니다.

이 질문에 댓글 쓰기 :

답변 2

mail() 함수를 사용하여 한글 파일 이름을 가진 첨부 파일을 전송하는 경우, 몇 가지 사항을 확인해야 합니다.

1. 제대로 된 문자 인코딩 설정: mail() 함수를 사용하기 전에 문자 인코딩을 올바르게 설정해야 합니다. 예를 들어, UTF-8 인코딩을 사용하려면 다음과 같이 헤더를 추가합니다:


$headers = "Content-Type: text/plain; charset=UTF-8\r\n";


2. 파일 이름의 인코딩: 한글 파일 이름의 경우, 주로 MIME 인코딩 방식인 Base64 또는 Quoted-Printable 인코딩을 사용하여 전달해야 합니다. 예를 들어, Base64 인코딩을 사용하여 파일 이름을 인코딩하려면 다음과 같이 처리합니다:


$encoded_file_name = base64_encode($file_name) ;


3. 첨부 파일 처리: mail() 함수에서는 직접 첨부 파일을 처리할 수 없으므로, MIME 형식에 따라 메일 본문과 첨부 파일을 구성해야 합니다. 다음은 예시 코드입니다:


$boundary = md5(uniqid(rand(), true));
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"{$boundary}\"\r\n";
$message = "--{$boundary}\r\n";
$message .= "Content-Type: text/plain; charset=UTF-8\r\n";
$message .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$message .= "메일 본문 내용\r\n\r\n";
$message .= "--{$boundary}\r\n";
$message .= "Content-Type: application/octet-stream; name=\"{$encoded_file_name}\"\r\n";
$message .= "Content-Disposition: attachment; filename=\"{$encoded_file_name}\"\r\n";
$message .= "Content-Transfer-Encoding: base64\r\n\r\n";
$message .= chunk_split(base64_encode(file_get_contents($file_path))) . "\r\n";
$message .= "--{$boundary}--\r\n";
mail($to, $subject, $message, $headers);


위 코드에서 $file_name 변수에는 첨부할 파일의 이름을 설정하고, $file_path 변수에는 첨부할 파일의 경로를 설정합니다. 이 예시에서는 Base64 인코딩 방식을 사용하여 파일 이름을 인코딩하였습니다.

이러한 방법으로 mail() 함수를 사용하여 한글 파일 이름을 가진 첨부 파일을 전송할 수 있습니다. 하지만 MIME 형식을 직접 처리해야 하므로 외부 라이브러리를 사용하는 것이 더 편리하고 안정적입니다.

PHPMailer를 사용하여 파일을 첨부하는 예시 코드를 첨부합니다.

require 'PHPMailer/PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->CharSet = 'UTF-8'; // 문자 인코딩 설정
$mail->setFrom('*** 개인정보보호를 위한 이메일주소 노출방지 ***', 'Sender Name');
$mail->addAddress('*** 개인정보보호를 위한 이메일주소 노출방지 ***', 'Recipient Name');
$mail->Subject = '첨부 파일 테스트';
$mail->Body = '첨부 파일 테스트입니다.';
// 파일 첨부
$file_path = '/path/to/file.jpg';
$file_name = '한글파일명.jpg';
$mail->addAttachment($file_path, $file_name);
if (!$mail->send()) {
echo '메일 전송 실패: ' . $mail->ErrorInfo;
} else {
echo '메일 전송 성공!';
}


위 코드에서 $file_path 변수에는 첨부할 파일의 경로를 설정하고, $file_name 변수에는 첨부 파일의 이름을 설정합니다. 여기서는 한글 파일 이름인 "한글파일명.jpg"를 예시로 사용하였습니다.

PHPMailer 라이브러리는 공식 GitHub 저장소에서 다운로드하여 사용할 수 있습니다. 위 코드에서 require 문으로 PHPMailerAutoload.php 파일 경로를 적절히 수정하여 포함시켜야 합니다.

이러한 외부 라이브러리를 사용하면 한글 파일 이름의 첨부 파일도 올바르게 처리될 것입니다.

한글 첨부파일이 안보내 질때는 mb_encode_mimeheader($file_name, "UTF-8"); 이런식으로 인코딩 해서 처리 해서 보내는 방법과 

인코딩을 자동으로 처리 되는 PHPMailer 사용하는 방법 으로 생각해 보여야 할 것 입니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 171
QA 내용 검색

회원로그인

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