Web Programming >> PHP Programming
|
[목차] |
제3장 PHP에서 꼭 알아두어야 할 함수
14. 예제 : Form Mail 보내기 E-Mail은 한 사람이 만든 메시지를 한 사람 이나, 그 이상의 사람들에게 네트워크를 통해 메일 내용과 파일을 첨부하여 전달하는 것을 뜻합니다. 대개 E-Mail은 텍스트 형식이며, 파일을 첨부할 때는 MIME기술을 사용하여 base64 코드로 인코딩하여 전송되며 받는 사람은 그 인코딩된 자료를 디코딩하여 메일과 첨부 파일을 받게 됩니다. 여기에서는 E-Mail을 아웃룩 익스프레스나 다른 메일 클라이언트를 사용하지 않고, 폼을 이용하여 보내는 폼메일에 대해 알아보도록 하겠습니다. 폼메일을 보내기 위해서는 메일 전송 프로토콜인 SMTP가 필요합니다. 리눅스에서는 SMTP가 같이 설치되어 있는데, 일반 윈도(NT 서버이상 제외)를 사용하는 분들은 SMTP프로토콜을 설치해야 합니다.
1. 간단한 폼메일( mail1.html ) <HTML> <HEAD> <SCRIPT LANGUAGE='javascript'> function sendmail() { if(document.formmail.to.value == "") alert("받는분의 E-Mail 주소를 기입해주세요."); else if(document.formmail.from.value == "") alert("자신의 E-Mail 주소를 기입해주세요."); else if(document.formmail.subject.value == "") alert("편지 제목을 입력해주세요."); else if(document.formmail.content.value == "") alert("편지 내용을 입력하여 주세요."); else document.formmail.submit(); } </SCRIPT> <TITLE>Mailer</TITLE> </HEAD> <BODY BGCOLOR=eeeeee> <CENTER><FONT SIZE=6 FACE='Comic Sans MS'>Form Mail</FONT><BR> <FORM NAME=formmail METHOD=POST ACTION='mail_process.html' ENCTYPE='multipart/form-data'> <TABLE WIDTH=500 CELLSPACING=1 BGCOLOR=black> <TR> <TD ALIGN=CENTER BGCOLOR=999999 WIDTH=20%><FONT SIZE=2 COLOR=WHITE>받는사람</TD> <TD BGCOLOR='eeeeee' WIDTH=80%><INPUT TYPE=TEXT NAME=to SIZE=50></TD> </TR> <TR> <TD ALIGN=CENTER BGCOLOR=999999><FONT SIZE=2 COLOR=WHITE>보내는사람</TD> <TD BGCOLOR='eeeeee'><INPUT TYPE=TEXT NAME=from SIZE=50></TD> </TR> <TR> <TD ALIGN=CENTER BGCOLOR=999999><FONT SIZE=2 COLOR=WHITE>제목</TD> <TD BGCOLOR='eeeeee'><INPUT TYPE=TEXT NAME=subject SIZE=50></TD> </TR> <TR> <TD ALIGN=CENTER BGCOLOR=999999><FONT SIZE=2 COLOR=WHITE>내용</TD> <TD BGCOLOR='eeeeee'><TEXTAREA NAME=content ROWS=12 COLS=52></TEXTAREA></TD> </TR> </TABLE> <TABLE WIDTH=500> <TR> <TD HEIGHT=5 ALIGN=CENTER><INPUT TYPE=BUTTON VALUE='메일발송' onclick='sendmail()'> <INPUT TYPE=BUTTON VALUE=' 취 소 ' onclick='self.window.close();'></TD> </TR> </TABLE> </FORM> </BODY> </HTML>
메일처리 프로그램 ( mail_process.html ) <?
$headers .= "X-Mailer: Lee LAB\r\n";
$body
= stripslashes($content)."\r\n\r\n"; echo " <HTML> <HEAD> <SCRIPT LANGUAGE='javascript'> function off() { setTimeout('window.close()',3000); } </SCRIPT> </HEAD> <BODY onload='off();' bgcolor=eeeeee> <TABLE WIDTH=100%> <TR> <TD HEIGHT=280 VALIGN=MIDDLE ALIGN=CENTER><FONT SIZE=2 COLOR=BLUE>메일을 발송하였습니다.</FONT></TD> </TR> </TABLE> </BODY> </HTML>"; ?>
2. 파일첨부 폼 메일(mail2.html) <HTML> <HEAD> <SCRIPT LANGUAGE='javascript'> function sendmail() { if(document.formmail.to.value == "") alert("받는분의 E-Mail 주소를 기입해주세요."); else if(document.formmail.from.value == "") alert("자신의 E-Mail 주소를 기입해주세요."); else if(document.formmail.subject.value == "") alert("편지 제목을 입력해주세요."); else if(document.formmail.content.value == "") alert("편지 내용을 입력하여 주세요."); else document.formmail.submit(); } </SCRIPT> <TITLE>Mailer</TITLE> </HEAD> <BODY BGCOLOR=eeeeee> <CENTER><FONT SIZE=6 FACE='Comic Sans MS'>Form Mail</FONT><BR> <FORM NAME=formmail METHOD=POST ACTION='mail_process.html' ENCTYPE='multipart/form-data'> <TABLE WIDTH=500 CELLSPACING=1 BGCOLOR=black> <TR> <TD ALIGN=CENTER BGCOLOR=999999 WIDTH=20%><FONT SIZE=2 COLOR=WHITE>받는사람</TD> <TD BGCOLOR='eeeeee' WIDTH=80%><INPUT TYPE=TEXT NAME=to SIZE=50></TD> </TR> <TR> <TD ALIGN=CENTER BGCOLOR=999999><FONT SIZE=2 COLOR=WHITE>보내는사람</TD> <TD BGCOLOR='eeeeee'><INPUT TYPE=TEXT NAME=from SIZE=50></TD> </TR> <TR> <TD ALIGN=CENTER BGCOLOR=999999><FONT SIZE=2 COLOR=WHITE>제목</TD> <TD BGCOLOR='eeeeee'><INPUT TYPE=TEXT NAME=subject SIZE=50></TD> </TR> <TR> <TD ALIGN=CENTER BGCOLOR=999999><FONT SIZE=2 COLOR=WHITE>내용</TD> <TD BGCOLOR='eeeeee'><TEXTAREA NAME=content ROWS=12 COLS=52></TEXTAREA></TD> </TR> <TR> <TD ALIGN=CENTER BGCOLOR=999999><FONT SIZE=2 COLOR=WHITE>첨부 파일</TD> <TD BGCOLOR='eeeeee'><INPUT TYPE=FILE NAME=upfile></TD>
</TABLE> <TABLE WIDTH=500> <TR> <TD HEIGHT=5 ALIGN=CENTER><INPUT TYPE=BUTTON VALUE='메일발송' onclick='sendmail()'> <INPUT TYPE=BUTTON VALUE=' 취 소 ' onclick='self.window.close();'></TD> </TR> </TABLE> </FORM> </BODY> </HTML>
메일처리 프로그램 ( mail_process.html ) <? $headers .= "From: $from\r\n"; $headers .= "X-Mailer: Lee LAB\r\n";
// 첨부할 파일이 있는지 없는지 체크한다...... if ($upfile && $upfile_size) { // 파일 함수를 이용하여 첨부할 파일의 내용을 $file에 저장한다. $filename=basename($upfile_name); $result=fopen($upfile,"r"); $file=fread($result,$upfile_size); fclose($result); // 파일 타입을 정의해준다. $upfile_type = "application/octet-stream";
$boundary = "--------" . uniqid("part"); $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\""; // 메세지 부분 $body .= "This is a multi-part message in MIME format.\r\n\r\n"; $body .= "--$boundary\r\n"; $body .= "Content-Type: text/html; charset=euc-kr\r\n"; $body .= "Content-Transfer-Encoding: 8bit\r\n\r\n"; $body .= nl2br(stripslashes($content)) . "\r\n\r\n"; $body .= "--$boundary\r\n"; // 파일 부분 $body .= "Content-Type: $upfile_type; name=\"$filename\"\r\n"; $body .= "Content-Transfer-Encoding: base64\r\n\r\n"; $body .= ereg_replace("(.{80})","\\1\r\n",base64_encode($file)); } else { // 첨부된 파일이 없을때..... $body = stripslashes($content)."\r\n\r\n"; }
mail($to,$subject,$body,$headers); echo " <HTML> <HEAD> <SCRIPT LANGUAGE='javascript'> function off() { setTimeout('window.close()',3000); } </SCRIPT> </HEAD> <BODY onload='off();' bgcolor=eeeeee> <TABLE WIDTH=100%> <TR> <TD HEIGHT=280 VALIGN=MIDDLE ALIGN=CENTER><FONT SIZE=2 COLOR=BLUE>메일을 발송하였습니다.</FONT></TD> </TR> </TABLE> </BODY> </HTML>"; ?>
3. 파일첨부 폼 메일 수정하기(mail2.html) 받는사람의 E-Mail주소 고정하기 <HTML> <HEAD> <SCRIPT LANGUAGE='javascript'> function sendmail() { if(document.formmail.to.value == "") alert("받는분의 E-Mail 주소를 기입해주세요."); else if(document.formmail.from.value == "") alert("자신의 E-Mail 주소를 기입해주세요."); else if(document.formmail.subject.value == "") alert("편지 제목을 입력해주세요."); else if(document.formmail.content.value == "") alert("편지 내용을 입력하여 주세요."); else document.formmail.submit(); } </SCRIPT> <TITLE>Mailer</TITLE> </HEAD> <BODY BGCOLOR=eeeeee> <CENTER><FONT SIZE=6 FACE='Comic Sans MS'>Form Mail</FONT><BR> <FORM NAME=formmail METHOD=POST ACTION='mail_process.html' ENCTYPE='multipart/form-data'> <TABLE WIDTH=500 CELLSPACING=1 BGCOLOR=black> <TR> <TD ALIGN=CENTER BGCOLOR=999999 WIDTH=20%><FONT SIZE=2 COLOR=WHITE>받는사람</TD> <TD BGCOLOR='eeeeee' WIDTH=80%><INPUT TYPE=hidden NAME=to SIZE=50 value="jklee@leelab.co.kr"> jklee@leelab.co.kr</TD> </TR> <TR> <TD ALIGN=CENTER BGCOLOR=999999><FONT SIZE=2 COLOR=WHITE>보내는사람</TD> <TD BGCOLOR='eeeeee'><INPUT TYPE=TEXT NAME=from SIZE=50></TD> </TR> <TR> <TD ALIGN=CENTER BGCOLOR=999999><FONT SIZE=2 COLOR=WHITE>제목</TD> <TD BGCOLOR='eeeeee'><INPUT TYPE=TEXT NAME=subject SIZE=50></TD> </TR> <TR> <TD ALIGN=CENTER BGCOLOR=999999><FONT SIZE=2 COLOR=WHITE>내용</TD> <TD BGCOLOR='eeeeee'><TEXTAREA NAME=content ROWS=12 COLS=52></TEXTAREA></TD> </TR> <TR> <TD ALIGN=CENTER BGCOLOR=999999><FONT SIZE=2 COLOR=WHITE>첨부 파일</TD> <TD BGCOLOR='eeeeee'><INPUT TYPE=FILE NAME=upfile></TD>
</TABLE> <TABLE WIDTH=500> <TR> <TD HEIGHT=5 ALIGN=CENTER><INPUT TYPE=BUTTON VALUE='메일발송' onclick='sendmail()'> <INPUT TYPE=BUTTON VALUE=' 취 소 ' onclick='self.window.close();'></TD> </TR> </TABLE> </FORM> </BODY> </HTML>
4. Mail 함수 사용법 기본형식 bool mail (string to, string subject, string message [, string additional_headers])
예 1. Sending mail.
mail("rasmus@lerdorf.on.ca", "My Subject", "Line 1\nLine 2\nLine 3");
예 2. Sending mail with extra headers.
mail("nobody@aol.com", "the subject", $message, "From: webmaster@$SERVER_NAME\nReply-To: webmaster@$SERVER_NAME\nX-Mailer: PHP/" . phpversion());
예 3. Sending complex email.
/* recipients */ $recipient .= "Mary <mary@u.college.edu>" . ", " ; //note the comma $recipient .= "Kelly <kelly@u.college.edu> . ", "; $recipient .= "ronabop@php.net";
/* subject */ $subject = "Birthday Reminders for August";
/* message */ $message .= "The following email includes a formatted ASCII table\n"; $message .= "Day \t\tMonth \t\tYear\n"; $message .= "3rd \t\tAug \t\t1970\n"; $message .= "17rd\t\tAug \t\t1973\n";
/* you can add a stock signature */ $message .= "--\r\n"; //Signature delimiter $message .= "Birthday reminder copylefted by public domain";
/* additional header pieces for errors, From cc's, bcc's, etc */
$headers .= "From: Birthday Reminder <birthday@php.net>\n"; $headers .= "X-Sender: <birthday@php.net>\n"; $headers .= "X-Mailer: PHP\n"; // mailer $headers .= "X-Priority: 1\n"; // Urgent message! $headers .= "Return-Path: <birthday@php.net>\n"; // Return path for errors
/* If you want to send html mail, uncomment the following line */ // $headers .= "Content-Type: text/html; charset=iso-8859-1\n"; // Mime type
$headers .= "cc:birthdayarchive@php.net\n"; // CC to $headers .= "bcc:birthdaycheck@php.net, birthdaygifts@php.net\n"; // BCCs to
/* and now mail it */ mail($recipient, $subject, $message, $headers);
|
[목차] |