<? if($mode=='mailsend') { // $mode 값이 mailsend 일 경우 아래 내용 실행 $limit = 5; // 첨부파일 제한 용량 (단위:MB)
#### 에러 발생시 back("에러문",이동할 페이지수) 함수를 사용하여 에러출력 후 지정한 페이지 수만큼 뒤로 이동함 ### function back($str,$no=-1) { echo "<script> window.alert("".$str."") history.go(".$no.") </script> "; }
// $to 값이 공백일 경우 에러출력 후 한페이지 뒤로 이동 if(!ereg("([^[:space:]]+)",$to)) { back("메일을 받는사람의 메일주소가 필요합니다."); exit; }
// $to 값이 정확한 이메일 주소가 아닐 경우 에러출력 후 한페이지 뒤로 이동 if(!ereg("([a-zA-Z0-9,_]{2,15})@([a-zA-Z0-9]{2,15}).([a-zA-Z0-9]{2,15})", $to, $regs)) { back("받는사람의 Email 주소 형식이 틀립니다. [예] yourmail@server.domain"); exit; } // $subject 값이 공백일 경우 에러출력 후 한페이지 뒤로 이동 if(!ereg("([^[:space:]]+)",$subject)) { back("메일 제목이 없습니다. 메일 제목을 입력해 주십시오."); exit; }
$boundary = "----".uniqid("part"); // 이메일 내용 구분자 설정
## 헤더생성 ## $header .= "Return-Path: $fromrn"; // 반송 이메일 주소 $header .= "From: $fromrn"; // 보내는 사람 이메일 주소 $header .= "MIME-Version: 1.0rn"; // MIME 버전 표시 $header .= "Content-Type: Multipart/mixed; boundary = "$boundary""; // 구분자가 $boundary 임을 알려줌
## 여기부터는 이메일 본문 생성 ## $mailbody .= "This is a multi-part message in MIME format.rnrn"; // 메세지 $mailbody .= "--$boundaryrn"; // 내용 구분 시작
//내용이 일반 텍스트와 html 을 사용하며 한글이라고 알려줌 $mailbody .= "Content-Type: text/html; charset="ks_c_5601-1987"rn"; //암호화 방식을 알려줌 $mailbody .= "Content-Transfer-Encoding: base64rnrn"; //이메일 내용을 암호화 해서 추가 $mailbody .= base64_encode(nl2br($body))."rnrn";
## 첨부 파일 개수만큼 루프를 돌면서 본문에 추가함 ## for($i=0;$i<count($userfile);$i++) { if($userfile[$i]) { // $limit 으로 설정한 용량 보다 클경우 에러 출력 후 뒤로 이동 if($userfile_size[$i] > ($limit * 1024 * 1024)) { back(($i+1)."번째 첨부파일이 제한용량(".$limit."MB)을 초과하였습니다."); exit; }
$filename = basename($userfile_name[$i]); // 파일명만 추출 후 $filename에 저장 $fp = fopen($userfile[$i], "r"); // 파일 open $file = fread($fp, $userfile_size[$i]); // 파일 내용을 읽음 fclose($fp); // 파일 close
// 파일첨부파트 $mailbody .= "--$boundaryrn"; // 내용 구분자 추가 // 여기부터는 어떤 내용이라는 것을 알려줌 $mailbody.= "Content-Type: ".$userfile_type[$i]."; name="".$filename.""rn"; //암호화 방식을 알려줌 $mailbody .= "Content-Transfer-Encoding: base64rn"; // 첨부파일임을 알려줌 $mailbody .= "Content-Disposition: attachment; filename="".$filename.""rnrn"; // 파일 내요을 암호화 하여 추가 $mailbody .= base64_encode($file)."rnrn"; } } /* 위에서 생성된 $header 와 $mailbody 를 mail() 함수를 이용해서 $to 에게 보냄 만약 메일 전송 실패시 에러출력 후 첫화면으로 이동 */ if(!mail($to,addslashes($subject),$mailbody,$header)) back("이메일 발송해 실패 하였습니다."); else echo "<script>alert('메일을 발송하였습니다.');location.replace('?');</script>";
// 아래 html 의 경우 특별히 설명이 필요 없을 듯 하네요...^^ } else { // $mode 값이 mailsend 가 아닐경우 아래 내용 실행 ?> <html> <head> </head> <body text="white" link="#CDEFFF" vlink="#DCD8FF" alink="#FFD2CD"> <table border="0" width="600"> <form method="post" name="form" enctype="multipart/form-data" action=""> <input type=hidden name="mode" value="mailsend"> <tr> <td width="200" bgcolor="#5584AA"><p align="center">받는사람 Email</td> <td><p><input type="text" name="to" size="30"></td> </tr> <tr> <td width="200" bgcolor="#5584AA"><p align="center">보내는사람 Email</td> <td><p><input type="text" name="from" size="30"></td> </tr> <tr> <td width="200" bgcolor="#5584AA"><p align="center">제 목</td> <td><p><input type="text" name="subject" size="50"></td> </tr> <tr> <td width="200" bgcolor="#5584AA"><p align="center">내 용</td> <td><p><textarea name="body" rows="10" cols="55"></textarea> </tr> <tr> <td width="200" bgcolor="#5584AA"><p align="center">첨 부</td> <td> <p><input type="file" name="userfile[]" size="30"><br> <input type="file" name="userfile[]" size="30"><br> <input type="file" name="userfile[]" size="30"><br> <input type="file" name="userfile[]" size="30"><br> <input type="file" name="userfile[]" size="30"> </td> </tr> <tr> <td colspan=2 align=center><br> <input type="submit" name="send" value="편지보내기"> <input type="reset" name="cancel" value="내용지우기"> </td> </tr> </form> </table>
<? } ?> |