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

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
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 사용하는 방법 으로 생각해 보여야 할 것 입니다.

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

회원로그인

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