sub_title
 PHP
제   목 PHP 메일(mail) 함수를 이용한 첨부화일 전송하기
작성자 웹마당넷 등록일 2008-08-02 20:28:01 조회수 28,201
첨부화일 formail.zip   

[PHP 메일(mail) 함수를 이용한 첨부화일 전송하기]

여기서는 PHP 메일함수를 이용하여 첨부화일을 전송하는 가장 간단한 폼메일(Form mail)예제를 알아보겠습니다.
웹호스팅을 이용하고 계시다면 대부분 셋팅이 되어 있겠지만 시스템을 직접 설치 사용하고 계시다면 PHP의 mail()함수를 사용하기 위해서 아래의 사항을 체크해 봐야 합니다.

1.유닉스/리눅스 환경
php.ini 파일의 변수중 sendmail_path 가 완전한 경로로 잡혀 있는지 체크해 봐야 합니다.
( php.ini 의 경로를 모른다면, php 파일을 하나 만들어서 로 확인 하실 수 있습니다. )

sendmail_path = usr/sbin/sendmail -t -i

위의 환경변수는 저희 서버의 php.ini 에 있는 값을 확인한 결과입니다.

2.윈도우즈 환경
윈도우즈 환경은 두가지 값을 체크해 봐야 합니다. 첫번째로 php.ini 파일의 변수중 SMTP 변수에 SMTP 서버의 DNS 이름또는 IP 주소가 잡혀 있는지 체크해 봐야 하며, 두번째는 sendmail_from 변수에 디폴트 이메일 전송자의
email 주소 값이 있는지 체크해 봐야 합니다.

메일함수의 기본구조

mail( 받는 이메일주소, 제목, 내용, header정보 );

메일함수의 기본구조는 위와 같이 아주 간단한 구조를 가지고 있으며 이상이 없을시 1을 리턴합니다. 이상이 없다는 것은 메일함수가 인자로 받는 파라미터의 값들을 무난하게 받아 들였다는 것을 의미하며, 메일전송의 성공을 의미하는 것은 아닙니다.

아래의 예제는 첨부파일이 있는 폼메일(form mail) 전송의 가장 간단한 예제이며, 앞단의 폼(form)에서 넘겨받은 값들
을 이용해 메일을 전송하게 됩니다. 아래의 예제에서 살펴 보실 부분은 헤더작성, 이메일 본문 생성, 파일 첨부 부분
이며 앞단의 form 부분을 포함한 전체 소스는 zip 파일로 올려 놓겠습니다.

// 폼에서 넘어오는 값들
//-- $mailTo : 수신자 이메일주소
//-- $mailFrom : 송신자 이메일주소
//-- $fromName : 송신자명 또는 정보
//-- $title : 메일제목
//-- $content : 메일내용
//-- $upfile : 첨부파일명
//*******************************


$boundary = "----" . uniqid("part"); // 구분자 생성

// --- 헤더작성 --- //
$header = "Return-Path: $mailFrom\r\n"; // 반송 이메일 주소
$header .= "from: $fromName <$mailFrom>\r\n"; // 송신자명, 송신자 이메일 주소

// --- 첨부화일이 있을경우 --- //
if($upfile && $upfile_size) {
$filename=basename($upfile_name); // 파일명 추출
$fp = fopen($upfile,"r"); // 파일 열기
$file = fread($fp,$upfile_size); // 파일 읽기
fclose($fp); // 파일 닫기
if ($upfile_type == ""){
$upfile_type = "application/octet-stream";
}

// --- 헤더작성 --- //
$header .= "MIME-Version: 1.0\r\n"; // MIME 버전 표시
$header .= "Content-Type: Multipart/mixed; boundary=\"$boundary\""; // 구분자 설정, Multipart/mixed 일 경우 첨부화일

// --- 이메일 본문 생성 --- //
$mailbody = "This is a multi-part message in MIME format.\r\n\r\n";
$mailbody .= "--$boundary\r\n";
$mailbody .= "Content-Type: text/html; charset=euc-kr\r\n";
$mailbody .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
$mailbody .= nl2br(addslashes($content)) . "\r\n";

// --- 파일 첨부 ---//
$mailbody .= "--$boundary\r\n";
$mailbody .= "Content-Type: ".$upfile_type."; 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";

$mailbody .= "--$boundary--"; //내용 구분자 마침
} else {
// --- 헤더작성 --- //
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: Multipart/alternative; boundary = \"$boundary\"";

// --- 이메일 본문 생성 --- //
$mailbody = "--$boundary\r\n";
$mailbody .= "Content-Type: text/html; charset=euc-kr\r\n";
$mailbody .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
$mailbody .= nl2br(addslashes($content)) . "\r\n";

$mailbody .= "--$boundary--\r\n\r\n";
}

$result = mail($mailTo,$title,$mailbody,$header);
if($result){
echo "메일 전송에 성공하였습니다.";
}else {
echo "메일 보내기 실패";
}

?>

 

작성자: 웹마당넷(webmadang@webmadang.net)   http://www.webmadang.net
 
3
    
 
1
        list
 
※ 짧은 댓글일수록 예의를 갖추어 작성해 주시기 바랍니다.
line
reply cancel
 
번호 제목 글쓴이 추천 조회 날짜
30  PHP 함수 간단 정리   member 웹스톤 0 / 0 8302 2008-08-14
29  PHP 메일(mail) 함수를 이용한 첨부화일 전송하기 첨부파일   admin 웹마당넷 3 / 1 28201 2008-08-02
28  PHP 파일 업로드 보안   member 사라마음 0 / 0 8352 2008-08-02
27  PHP - 파일첨부가 가능한 폼메일러 LeoFormMailer 첨부파일   member 웹스톤 0 / 0 9404 2008-08-01
26  PHP - RSS 리더기   member 파도 0 / 1 8143 2008-07-29
25  PHP 숫자 천자리마다 콤마(쉼표) 찍기   member 높이뜬새 2 / 2 20073 2008-07-29
24  PHP 문자열 연결하기   member 높이뜬새 0 / 0 9397 2008-07-25
23  무조건 알아야 할 PHP 속도 테스트 14 가지   member 웹스톤 1 / 0 20622 2008-06-16
22  PHP 문자열중 숫자만 추출하기   member 높이뜬새 0 / 0 10286 2008-05-19
21  [설치/설정] 대용량 업로드...   member 컴퓨터존 0 / 0 7065 2008-05-02
20  [PHP] post, get, cookie, session 변수 확인   member 컴퓨터존 0 / 0 9824 2008-05-02
19  PHP Caching to speed up   member 컴퓨터존 0 / 0 7951 2008-05-02
18  PHP 현재 접속자 현황 보여주기   member 컴퓨터존 0 / 0 9239 2008-04-08
17  PHP 한글 레퍼런스   member 컴퓨터존 0 / 0 8568 2008-04-05
16  Flex와 PHP를 이용해서 만든 파일업로드 소스   member 오렌지 0 / 0 9095 2007-11-28
15  프레임(frame) 새로고침 할때 페이지 유지하기   member 웹스톤 0 / 0 10394 2007-11-15
14  [설치/설정] 대용량 업로드...   member 웹스톤 0 / 0 7547 2007-11-15
13  PHP에서 성능 개선을 위한 유용한 팁   member 웹스톤 0 / 0 10052 2007-11-15
12  PHP 버블소트 알고리즘   member 웹스톤 0 / 0 7110 2007-11-14
11  Oracle/PHP 환경의 트랜잭션 관리 이미지   member 웹돌이 0 / 0 45890 2007-10-09
10  FTP 서버 설치 및 관리   member 웹돌이 0 / 0 10025 2007-10-09
9  리눅스 ftp 명령어 모음   member 웹돌이 0 / 0 7990 2007-10-09
8  게시판검색이나 쇼핑몰에 유용한 자바스크립트   member 웹돌이 0 / 0 8239 2007-10-09
7  변수속도 테스트   member 웹돌이 0 / 0 6984 2007-10-09
6  PHP에서 접속자 IP 알아내기   member 높이뜬새 0 / 0 11205 2007-09-08
write
button [1] [2] [4] button