| 
| ¸ÞÀÏÀü¼Û Ŭ·¡½º(SMTP Class) |  |  
|  |  |    | 18³â Àü |  | 
| <?php 
 class Smtp {
 
 var $host;
 var $fp;
 var $self;
 var $lastmsg;
 var $parts;
 var $error;
 var $debug;
 var $charset;
 var $ctype;
 
 
 function Smtp($host="localhost") {
 if($host == "self") $this->self = true;
 else $this->host = $host;
 $this->parts = array();
 $this->error = array();
 $$this->debug = 0;
 $this->charset = "euc-kr";
 $this->ctype = "text/html";
 }
 
 // µð¹ö±× ¸ðµå : 1
 function debug($n=1) {
 $this->debug = $n;
 }
 
 // smtp Åë½ÅÀ» ÇÑ´Ù.
 function dialogue($code, $cmd) {
 
 fputs($this->fp, $cmd."\r\n");
 $line = fgets($this->fp, 1024);
 ereg("^([0-9]+).(.*)$", $line, &$data);
 $this->lastmsg = $data[0];
 
 if($this->debug) {
 echo htmlspecialchars($cmd)."<br>".$this->lastmsg."<br>";
 flush();
 }
 
 if($data[1] != $code) return false;
 return true;
 
 }
 
 //  smptp ¼¹ö¿¡ Á¢¼ÓÀ» ÇÑ´Ù.
 function smtp_connect($host) {
 
 if($this->debug) {
 echo "SMTP($host) Connecting...<br>";
 flush();
 }
 
 if(!$host) $host = $this->host;
 if(!$this->fp = fsockopen($host, 25, $errno, $errstr, 10)) {
 $this->lastmsg = "SMTP($host) ¼¹öÁ¢¼Ó¿¡ ½ÇÆÐÇß½À´Ï´Ù.[$errno:$errstr]";
 return false;
 }
 
 $line = fgets($this->fp, 1024);
 ereg("^([0-9]+).(.*)$", $line, &$data);
 $this->lastmsg = $data[0];
 if($data[1] != "220") return false;
 
 if($this->debug) {
 echo $this->lastmsg."<br>";
 flush();
 }
 
 $this->dialogue(250, "HELO phpmail");
 return true;
 
 }
 
 // stmp ¼¹ö¿ÍÀÇ Á¢¼ÓÀ» ²÷´Â´Ù.
 function smtp_close() {
 
 $this->dialogue(221, "QUIT");
 fclose($this->fp);
 return true;
 
 }
 
 // ¸Þ½ÃÁö¸¦ º¸³½´Ù.
 function smtp_send($email, $from, $data) {
 
 if(!$mail_from = $this->get_email($from)) return false;
 if(!$rcpt_to = $this->get_email($email)) return false;
 
 if(!$this->dialogue(250, "MAIL FROM: $mail_from"))
 $this->error[] = $email.":MAIL FROM ½ÇÆÐ($this->lastmsg)";
 if(!$this->dialogue(250, "RCPT TO: $rcpt_to"))
 $this->error[] = $email.":RCPT TO ½ÇÆÐ($this->lastmsg)";
 $this->dialogue(354, "DATA");
 
 $mime = "Message-ID: <".$this->get_message_id().">\r\n";
 $mime .= "From: $from\r\n";
 $mime .= "To: $email\r\n";
 
 fputs($this->fp, $mime);
 fputs($this->fp, $data);
 $this->dialogue(250, ".");
 
 }
 
 // Message ID ¸¦ ¾ò´Â´Ù.
 function get_message_id() {
 $id = date("YmdHis",time());
 mt_srand((float) microtime() * 1000000);
 $randval = mt_rand();
 $id .= $randval."@phpmail";
 return $id;
 }
 
 // Boundary °ªÀ» ¾ò´Â´Ù.
 function get_boundary() {
 $uniqchr = uniqid(time());
 $one = strtoupper($uniqchr[0]);
 $two = strtoupper(substr($uniqchr,0,8));
 $three = strtoupper(substr(strrev($uniqchr),0,8));
 return "----=_NextPart_000_000${one}_${two}.${three}";
 }
 
 // ÷ºÎÆÄÀÏÀÌ ÀÖÀ» °æ¿ì ÀÌ ÇÔ¼ö¸¦ ÀÌ¿ëÇØ ÆÄÀÏÀ» ÷ºÎÇÑ´Ù.
 function attach($message, $name="", $ctype="application/octet-stream") {
 $this->parts[] = array ("ctype" => $ctype, "message" => $message, "name" => $name);
 }
 
 // Multipart ¸Þ½ÃÁö¸¦ »ý¼º½ÃŲ´Ù.
 function build_message($part) {
 
 $msg .= "Content-Type: ".$part['ctype'];
 if($part['name']) $msg .= "; name=\"".$part['name']."\"";
 $msg .= "\r\nContent-Transfer-Encoding: base64\r\n";
 $msg .= "Content-Disposition: attachment; filename=\"".$part['name']."\"\r\n\r\n";
 $msg .= chunk_split(base64_encode($part['message']));
 return $msg;
 
 }
 
 // SMTP¿¡ º¸³¾ DATA¸¦ »ý¼º½ÃŲ´Ù.
 function build_data($subject, $body) {
 
 $boundary = $this->get_boundary();
 
 $mime .= "Subject: $subject\r\n";
 $mime .= "Date: ".date ("D, j M Y H:i:s T",time())."\r\n";
 $mime .= "MIME-Version: 1.0\r\n";
 $mime .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n\r\n".
 "This is a multi-part message in MIME format.\r\n\r\n";
 $mime .= "--".$boundary."\r\n".
 "Content-Type: ".$this->ctype."; charset=\"".$this->charset."\"\r\n".
 "Content-Transfer-Encoding: base64\r\n\r\n".
 chunk_split(base64_encode($body)).
 "\r\n\r\n--".$boundary;
 
 $max = count($this->parts);
 for($i=0; $i<$max; $i++) {
 $mime .= "\r\n".$this->build_message($this->parts[$i])."\r\n\r\n--".$boundary;
 }
 $mime .= "--\r\n";
 
 return $mime;
 
 }
 
 // MX °ªÀ» ã´Â´Ù.
 function get_mx_server($email) {
 
 if(!ereg("([\._0-9a-zA-Z-]+)@([0-9a-zA-Z-]+\.[a-zA-Z\.]+)", $email, $reg)) return false;
 getmxrr($reg[2], $host);
 if(!$host) $host[0] = $reg[2];
 return $host;
 
 }
 
 // À̸ÞÀÏÀÇ Çü½ÄÀÌ ¸Â´ÂÁö üũÇÑ´Ù.
 function get_email($email) {
 if(!ereg("([\._0-9a-zA-Z-]+)@([0-9a-zA-Z-]+\.[a-zA-Z\.]+)", $email, $reg)) return false;
 return "<".$reg[0].">";
 }
 
 
 // ¸ÞÀÏÀ» Àü¼ÛÇÑ´Ù.
 function send($to, $from, $subject, $body) {
 
 if(!is_array($to)) $to = split("[,;]",$to);
 if($this->self) {
 
 $data = $this->build_data($subject, $body);
 foreach($to as $email) {
 if($host = $this->get_mx_server($email)) {
 $flag = false; $i = 0;
 while($flag == false) {
 if($host[$i]) {
 $flag = $this->smtp_connect($host[$i]);
 $i++;
 } else break;
 }
 if($flag) {
 $this->smtp_send($email, $from, $data);
 $this->smtp_close();
 } else {
 $this->error[] = $email.":SMTP Á¢¼Ó½ÇÆÐ";
 }
 } else {
 $this->error[] = $email.":Çü½ÄÀÌ À߸øµÊ";
 }
 }
 
 } else {
 
 if(!$this->smtp_connect($this->host)) {
 $this->error[] = "$this->host SMTP Á¢¼Ó½ÇÆÐ";
 return false;
 }
 $data = $this->build_data($subject, $body);
 foreach($to as $email) $this->smtp_send($email, $from, $data);
 $this->smtp_close();
 
 }
 
 }
 
 }
 
 /*
 $mail = new Smtp("self");  //ÀÚü¹ß¼ÛÀÏ °æ¿ì, ¼¹ö¸¦ ÁöÁ¤ÇÒ¼öµµ ÀÖÀ½.
 $mail->debug();  //µð¹ö±ëÇÒ¶§
 $mail->attach("ÆÄÀϹöÆÛ", "ÆÄÀÏÀ̸§", "ÆÄÀÏŸÀÔ");
 $mail->send("¹ÞÀ» »ç¶÷¸ÞÀÏÁÖ¼Ò", "º¸³»´Â»ç¶÷ ¸ÞÀÏÁÖ¼Ò", "Á¦¸ñ", "³»¿ë");
 
 $mail = new Smtp("self");
 $mail->debug();
 $mail->send("photon0@hanmail.net", "hopegiver@whois.co.kr", "ÀÌ ¸ÞÀÏÀº Á¤»óÀÔ´Ï´Ù.", "Á¤»óÀûÀÎ ¸ÞÀÏÀÌ´Ï »èÁ¦ÇÏÁö ¸¶½Ê½Ã¿À.");
 */
 
 ?>
 
 
 | 
 |  
|  ̵̧ : 345 | ̵̧
¸ñ·Ï |  |