그러냐

php 파일첨부 폼메일 첨부파일깨짐현상 제거 본문

php

php 파일첨부 폼메일 첨부파일깨짐현상 제거

관절분리 2016. 1. 25. 14:32
반응형

function sendtest($id){
  Configure::write('debug',2);
  $this->layout = 'sub_layout';
  if($this->data){

//   pr($this->data);exit;
//  /images/common/btnBan06_on.gif

   $charset="utf-8";

   $from ='sd-23@.kr';
   $from_name = $this->data['Mailing']['name'];

   $title = $this->data['Mailing']['title'];
   $message = '<br/>신청자 : '.$this->data['Mailing']['name'].'<br/><br/>이메일 : '.$this->data['Mailing']['email'].'<br/><br/><br/>'.$this->data['Mailing']['content'];

   $to_name = '관리자';
   $to = 'sd-23@..kr';


   $uploaddir = APP.'/webroot/files/uploadtmp/';
   $uploadfile = $uploaddir . time().rand();
//   echo $uploadfile;exit;
   if( !is_dir($uploaddir) ) @mkdir($uploaddir."/",0707);
   if(@$this->data['Mailing']['file']['name']){
//    echo $this->data['Mailing']['file']['tmp_name'];
    $fEXIST = strtolower(substr($this->data['Mailing']['file']['name'], -3));
    $uploadfile .= '.'.$fEXIST;
    move_uploaded_file($this->data['Mailing']['file']['tmp_name'], $uploadfile);
   }

   $boundary = "----".uniqid("part");
   
   $title = "=?$charset?B?".base64_encode($title)."?=";
   $from_name = "=?$charset?B?".base64_encode($from_name)."?=";
   $to_name = "=?$charset?B?".base64_encode($to_name)."?=";
   $recipient = sprintf("%s <%s>", $to_name, $to);

   $header = sprintf(
    "From: %s <%s>\r\n".
    "Reply-to: <%s>\r\n".
    "X-Mailer: webmailer\r\n".
    "MIME-Version: 1.0\r\n".
    "Content-Type: Multipart/mixed; boundary = \"$boundary\"\r\n\r\n",
    $from_name,
    $from,
    $from,
    $boundary
   );
   $mailbody = "This is a multi-part message in MIME format.\r\n\r\n";  // 메세지
   $mailbody .= "--$boundary\r\n";               // 내용 구분 시작
   $mailbody .= "Content-Type: text/html; charset=\"$charset\"\r\n";
   $mailbody .= "Content-Transfer-Encoding: base64\r\n\r\n";
   $mailbody .= base64_encode(nl2br($message))."\r\n\r\n";

   if(@$this->data['Mailing']['file']['name']){

    $filename = $this->data['Mailing']['file']['name'];  // 파일명만 추출 후 $filename에 저장
    $fp = fopen($uploadfile, "r");     // 파일 open
    $file = fread($fp, $this->data['Mailing']['file']['size']);  // 파일 내용을 읽음
    echo $this->data['Mailing']['file']['size'];
    fclose($fp);           // 파일 close
    $fp11 = fopen($uploaddir.'test.txt','w');
    fwrite($fp11,$file);
    fclose($fp11);

    $filename = iconv('utf-8','euc-kr',$filename);
    $mailbody .= "--$boundary\r\n";     // 내용 구분자 추가
    $mailbody.= "Content-Type: ".$this->data['Mailing']['file']['type']."; name=\"".$filename."\"\r\n";
    $mailbody .= "Content-Transfer-Encoding: base64\r\n";
    $mailbody .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
    $mailbody .= chunk_split(base64_encode($file))."\r\n\r\n";
   }
   if(mail($recipient,addslashes($title),$mailbody,$header)){
//    unlink($uploadfile);
    $this->Session->setFlash("발송 되었습니다..");   
   }else{
    $this->Session->setFlash("발송 실패하였습니다.");
   }
  }

 }

 

 

 

 

 

 

 

 

 

 

 

chunk_split  사용하면됨

반응형

'php' 카테고리의 다른 글

엑셀파일 다운로드 시 한글깨짐 현상  (0) 2016.01.25
php 날짜 비교  (0) 2016.01.25
php 폼메일 파일첨부기능  (0) 2016.01.25
php.ini 첨부용량 설정  (0) 2016.01.25
Fatal error: require() [function.require]: Failed ope  (0) 2016.01.25