debug(); //µð¹ö±ëÇÒ¶§ // $mail->attach("ÆÄÀϹöÆÛ", "ÆÄÀÏÀ̸§", "ÆÄÀÏŸÀÔ"); // $mail->send("receiver@mail", "sender@mail", "subject", "contents");->¿øº» // $mail->send("receiver@mail", "sender@mail", "subject", "contents", $text_html="y");->¼öÁ¤º» // ´ÙÀ½,ÇÖ¸ÞÀÏ,³×¶ì¾Ó,µå¸²À§Áî,ÄÚ¸®¾Æ´åÄÄ,Çѹ̸£,¿¥ÆÈ,ÀÎÆ¼Áðµî À¥¸ÞÀÏ Å×½ºÆ® ¼º°øÈ®ÀÎ. // ¼­¹öÀÇ È£½ºÆ® ³×ÀÓ°ú IP°¡ DNS LOOKUP ÇßÀ»¶§ ³ª¿À´Â ¾ÆÀÌÇÇ¿Í °°¾Æ¾ß À¥¸ÞÀÏ ¼­¹ö¿¡¼­ ¹Þ¾ÆµéÀÓ. // ¿¹¸¦ µé¾î ·ÎÄÃÈ£½ºÆ® (µµ¸ÞÀÎ ¾ø´Â°÷ ¿¡¼­´Â À¥¸ÞÀÏ¿¡¼­ °ÅºÎÇÔ) 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 = "utf-8"; $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); preg_match("/^([0-9]+).(.*)$/", $line, $data); $this->lastmsg = $data[0]; if($this->debug){ echo htmlspecialchars($cmd)."
".$this->lastmsg."
"; flush(); } if($data[1] != $code) return false; return true; } // smptp ¼­¹ö¿¡ Á¢¼ÓÀ» ÇÑ´Ù. function smtp_connect($host){ if($this->debug){ echo "SMTP($host) Connecting...
"; 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); preg_match("/^([0-9]+).(.*)$/", $line, $data); $this->lastmsg = $data[0]; if($data[1] != "220") return false; if($this->debug){ echo $this->lastmsg."
"; 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->self == false) { $username = "isac"; //the login for your smtp $password = "mail!!qaz321"; //the pass for your smtp if(!$this->dialogue(334, "AUTH LOGIN")) return false; if(!$this->dialogue(334, base64_encode($username))) return false; if(!$this->dialogue(235, base64_encode($password))) 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($path, $name="", $ctype="application/octet-stream"){ if(file_exists($path)){ $fp = fopen($path, "r"); $message = fread($fp, filesize($path)); fclose($fp); $this->parts[] = array ("ctype" => $ctype, "message" => $message, "name" => $name); }else return false; } // 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){ function build_data($subject, $body, $text_html="y"){ //mail º»¹® html or text Çü½Ä Ãß°¡ if($text_html=="y"){ $body = str_replace("\\","",$body); $body = $body; }else{ $body = str_replace("\\","",$body); $body = htmlspecialchars($body); $body = nl2br($body); } //mail º»¹® html or text Çü½Ä Ãß°¡ $boundary = $this->get_boundary(); $subject = "=?EUC-KR?B?".base64_encode(iconv("UTF-8","EUC-KR",$subject))."?=\r\n"; $mime .= "Subject: ".$subject; $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(!preg_match("/([\._0-9a-zA-Z-]+)@([0-9a-zA-Z-]+\.[a-zA-Z\.]+)/i", $email, $reg)) return false; getmxrr($reg[2], $host); if(!$host) $host[0] = $reg[2]; return $host; } // À̸ÞÀÏÀÇ Çü½ÄÀÌ ¸Â´ÂÁö üũÇÑ´Ù. function get_email($email){ if(!preg_match("/([\._0-9a-zA-Z-]+)@([0-9a-zA-Z-]+\.[a-zA-Z\.]+)/i", $email, $reg)) return false; return "<".$reg[0].">"; } // ¸ÞÀÏÀ» Àü¼ÛÇÑ´Ù. //function send($to, $from, $subject, $body){ function send($to, $from, $subject, $body, $text_html="y"){ if(!is_array($to)) $to = explode("[,;]",$to); if($this->self){ // $data = $this->build_data($subject, $body); $data = $this->build_data($subject, $body, $text_html); 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); $data = $this->build_data($subject, $body, $text_html); foreach($to as $email) $this->smtp_send($email, $from, $data); //$this->smtp_close(); -> È£ÃâÆäÀÌÁö¿¡¼­ ´Ý¾ÒÀ½ } } }//end class ?>