-
php mail() 첨부파일 메일 보내기 3탄_첨부파일 전송PHP 2023. 5. 30. 18:49반응형
php mail() 첨부파일 메일 보내기 3탄_첨부파일 전송
- 1탄_ input file 선택 시 이미지 미리보기 js 처리하기 https://raim-2.tistory.com/31
- 2탄_ php mail() 첨부파일 이미지 태그로 전송하기 https://raim-2.tistory.com/32
- 3탄_ php mail() 첨부파일 전송하기 https://raim-2.tistory.com/33
드디어 3탄 첨부파일 전송하기!
물론, 완벽하진 않다. 전송된 메일을 확인하면 계속 맨 하단에 boundary가 보여짐..!
👉 그 전에는 안보였다가 이젠 파일 전송은 잘되는데, boundary가 문제🤦♀️
👉 그래도 메일 전송에는 문제가 안되므로 그냥 여기서 끝내야지!
나중에라도 아시는 분은 댓글 좀...(없으면 나중에 다시 시도해봐야지)
✔️ 첨부한 이미지, 첨부파일 형태로 메일 전송하기
1) 앞부분과 if문은 2탄에서 작성한 것과 동일하고, 파일 선택했을 때 적용되는 else 부분을 고쳐줘야 함
대신 2탄은 태그로 처리하느라 사용하지 않았던 boundary와 multipart를 사용한다.
👉 $boundary
👉 $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
$name_01=$_POST['name']; $mail_02=$_POST['email']; $phone_03=$_POST['tel']; $type_04=$_POST['type']; $msg_05=$_POST['message']; $file_06=$_FILES['file']; //전달될 때 이진형태로 전달 $agree_07=$_POST['agree']; $file_name=$_FILES['file']['name']; $file_size=$_FILES['file']['size']; $file_type=$_FILES['file']['type']; $file_tmp=$_FILES['file']['tmp_name']; //임시명 - 임시경로(서버 저장전) // 파일 첨부가 없는 경우 기본 MIME 유형을 설정 if ($file_type == "") { $file_type = 'application/octet-stream'; }; //별도로 data 파일에 이미지 저장 안됨 $filename = basename($file_name); $fp = fopen($file_tmp, "r"); // 임시 경로($file_tmp)를 사용합니다. $file = fread($fp, $file_size); fclose($fp); $attach = chunk_split(base64_encode($file)); $to='earnestga@naver.com'; //master mail $subject='동아ST사이트에서 관리자에게 보낸 메일'; $msg="보낸사람: $name_01<br>". "보낸사람 메일주소: $mail_02<br>". "보낸사람 전화번호: $phone_03<br>". "문의유형: $type_04<br>". "내용: $msg_05<br>". "개인정보 수집 및 이용동의: $agree_07<br>"; $attach_msg="<hr>첨부파일 이름: {$file_name}<br>". "첨부파일 크기: {$file_size}<br>". "첨부파일 타입: {$file_type}<br>". $boundary = md5(uniqid(microtime()));
2) 첨부파일이 들어갈 본문의 Content-Type은 multipart/mixed로 처리하고, boundary를 추가한다
$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
3) boundary는 영역을 나눌 때 사용된다. $bodytext에서 msg가 들어갈 부분은 html로 처리한다.
$bodytext .= "Content-Type: text/html; charset=UTF-8\r\n";
$bodytext .= "Content-Transfer-Encoding: 8bit\r\n\r\n";4) 첨부파일이 들어가는 $bodytext는 base64로 인코딩된 $attach 변수를 사용하므로,
Content-Type은 $file_type을, 첨부파일 표시 방법은 attachment로 작성해준다.$bodytext .= "Content-Type: $file_type; name=\"$file_name\"\r\n";
$bodytext .= "Content-Transfer-Encoding: base64\r\n";
$bodytext .= "Content-Disposition: attachment; filename=\"$file_name\"\r\n\r\n";if ($file_tmp == "") { $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; $headers .= "Content-Transfer-Encoding: 8bit\r\n\r\n"; $bodytext = $msg; } else { $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n"; $headers .= "Content-Transfer-Encoding: 8bit\r\n\r\n"; $bodytext .= "--$boundary\r\n"; $bodytext .= "Content-Type: text/html; charset=UTF-8\r\n"; $bodytext .= "Content-Transfer-Encoding: 8bit\r\n\r\n"; $bodytext .= $msg . "\r\n\r\n"; $bodytext .= $attach_msg . "\r\n\r\n"; $bodytext .= "--$boundary\r\n"; $bodytext .= "Content-Type: $file_type; name=\"$file_name\"\r\n"; $bodytext .= "Content-Transfer-Encoding: base64\r\n"; $bodytext .= "Content-Disposition: attachment; filename=\"$file_name\"\r\n\r\n"; //첨부파일 형태로 보여준다. $bodytext .= $attach. "\r\n\r\n"; $bodytext .= "--$boundary--\r\n"; };
5) 뒷 부분은 2탄과 동일하게 처리하면 된다.
mail($to, $subject, $bodytext, $headers); echo "<script> alert('성공적으로 메일이 전송되었습니다.'); //history.go(-1); location.href='./sub6_3.html' ; </script>"; ?>
이렇게 코드를 작성해주면, 아래와 같이 첨부파일을 포함한 형태로 메일이 온다😁
'PHP' 카테고리의 다른 글
php mail() 첨부파일 메일 보내기 2탄_이미지로 처리 (0) 2023.05.30 php mail() 첨부파일 메일 보내기 1탄_미리보기 (0) 2023.05.30