관리 메뉴

엉망진창

php 메일 (첨부파일가능) 본문

Study_Web/PHP

php 메일 (첨부파일가능)

엉망진창 2007. 6. 8. 18:25

출처 : http://blog.naver.com/soo9585/80023256739

<?
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: $from\r\n";    // 반송 이메일 주소
 $header .= "From: $from\r\n";      // 보내는 사람 이메일 주소
 $header .= "MIME-Version: 1.0\r\n";    // MIME 버전 표시
 $header .= "Content-Type: Multipart/mixed; boundary = \"$boundary\"";  // 구분자가 $boundary 임을 알려줌

## 여기부터는 이메일 본문 생성 ##
 $mailbody .= "This is a multi-part message in MIME format.\r\n\r\n";  // 메세지
 $mailbody .= "--$boundary\r\n";               // 내용 구분 시작

//내용이 일반 텍스트와 html 을 사용하며 한글이라고 알려줌
 $mailbody .= "Content-Type: text/html; charset=\"ks_c_5601-1987\"\r\n";
//암호화 방식을 알려줌
 $mailbody .= "Content-Transfer-Encoding: base64\r\n\r\n";
//이메일 내용을 암호화 해서 추가
 $mailbody .= base64_encode(nl2br($body))."\r\n\r\n";

## 첨부 파일 개수만큼 루프를 돌면서 본문에 추가함 ##
 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 .= "--$boundary\r\n";     // 내용 구분자 추가
 // 여기부터는 어떤 내용이라는 것을 알려줌
   $mailbody.= "Content-Type: ".$userfile_type[$i]."; name=\"".$filename."\"\r\n";
 //암호화 방식을 알려줌
   $mailbody .= "Content-Transfer-Encoding: base64\r\n";
 // 첨부파일임을 알려줌
   $mailbody .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
 // 파일 내요을 암호화 하여 추가
   $mailbody .= base64_encode($file)."\r\n\r\n";
  }
 }
 
/*
위에서 생성된 $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>

<?
}
?>

'Study_Web > PHP' 카테고리의 다른 글

ZendOptimizer-2.x Ver 다운로드  (0) 2008.11.25
.htaccess 사용해서 이미지 외부링크 막기  (0) 2007.08.22
그누보드4에서의 멀티업로드  (3) 2007.05.01
php 전체 메일  (0) 2007.04.23
[펌]실시간 쪽지 PHP  (0) 2007.04.23