Exemple #1
0
 function smtp($to, $semi_rand)
 {
     $header = "Date: " . date("D, j M Y G:i:s") . " +0700\r\n";
     if (self::$from_name) {
         $header .= "From: =?utf-8?Q?" . str_replace("+", "_", str_replace("%", "=", urlencode(self::$from_name))) . "?= <" . self::$from_email . ">\r\n";
     } else {
         $header .= "From: " . self::$from_email . "\r\n";
     }
     //$header .= "X-Mailer: The Bat! (v3.99.3) Professional\r\n";
     //$header .= "Reply-To: =?utf-8?Q?".str_replace("+","_",str_replace("%","=",urlencode('Максим')))."?= <*****@*****.**>\r\n";
     if (self::$html) {
         $text = self::$html;
     } else {
         if (self::$text) {
             self::$type = 'plain';
             $text = self::$text;
         }
     }
     $header .= "X-Priority: 3 (Normal)\r\n";
     $header .= "Message-ID: <172562218." . date("YmjHis") . ">\r\n";
     $header .= "To: " . $to . "\r\n";
     $header .= "Subject: =?utf-8?Q?" . str_replace("+", "_", str_replace("%", "=", urlencode(self::$subject))) . "?=\r\n";
     $header .= "MIME-Version: 1.0\r\n";
     if (self::$file) {
         $header .= "Content-Type: multipart/mixed; boundary=\"----------{$semi_rand}\"\r\n";
         $file = self::$file;
         $fileatttype = self::MIMEType($file);
         $fileattname = basename($file);
         $fp = fopen($file, "rb");
         $code_file = chunk_split(base64_encode(fread($fp, filesize($file))));
         fclose($fp);
         $text = "------------{$semi_rand}\r\nContent-Type: text/html; charset=\"utf-8\"\r\nContent-Transfer-Encoding: 8bit\r\n\r\n" . $text . "\r\n\r\n------------{$semi_rand}\r\nContent-Type: {$fileatttype}; name=\"{$fileattname}\"\r\nContent-transfer-encoding: base64\r\nContent-Disposition: attachment; filename=\"{$fileattname}\"\r\n\r\n" . $code_file . "\r\n------------{$semi_rand}--\r\n";
     } else {
         $header .= "Content-Type: text/" . self::$type . "; charset=utf-8\r\n";
         $header .= "Content-Transfer-Encoding: 8bit\r\n";
     }
     $smtp_conn = fsockopen(self::$smtp_host, self::$smtp_port, $errno, $errstr, 10);
     if (!$smtp_conn) {
         print "соединение с серверов не прошло";
         fclose($smtp_conn);
         exit;
     }
     $data = self::get_data($smtp_conn);
     fputs($smtp_conn, "EHLO " . self::$smtp_host . "\r\n");
     $code = substr(self::get_data($smtp_conn), 0, 3);
     if ($code != 250) {
         print "ошибка приветсвия EHLO";
         fclose($smtp_conn);
         exit;
     }
     /*
     auth
     
     fputs($smtp_conn,"AUTH LOGIN\r\n");
     $code = substr(get_data($smtp_conn),0,3);
     if($code != 334) {print "сервер не разрешил начать авторизацию"; fclose($smtp_conn); exit;}
     
     fputs($smtp_conn,base64_encode("login")."\r\n");
     $code = substr(get_data($smtp_conn),0,3);
     if($code != 334) {print "ошибка доступа к такому юзеру"; fclose($smtp_conn); exit;}
     
     fputs($smtp_conn,base64_encode("password")."\r\n");
     $code = substr(get_data($smtp_conn),0,3);
     if($code != 235) {print "не правильный пароль"; fclose($smtp_conn); exit;}
     */
     fputs($smtp_conn, "MAIL FROM:" . self::$from_email . "\r\n");
     $code = substr(self::get_data($smtp_conn), 0, 3);
     if ($code != 250) {
         print "сервер отказал в команде MAIL FROM";
         fclose($smtp_conn);
         exit;
     }
     fputs($smtp_conn, "RCPT TO:" . $to . "\r\n");
     $code = substr(self::get_data($smtp_conn), 0, 3);
     if ($code != 250 and $code != 251) {
         print "Сервер не принял команду RCPT TO";
         fclose($smtp_conn);
         exit;
     }
     fputs($smtp_conn, "DATA\r\n");
     $code = substr(self::get_data($smtp_conn), 0, 3);
     if ($code != 354) {
         print "сервер не принял DATA";
         fclose($smtp_conn);
         exit;
     }
     fputs($smtp_conn, $header . "\r\n" . $text . "\r\n.\r\n");
     $code = substr(self::get_data($smtp_conn), 0, 3);
     if ($code != 250) {
         print "ошибка отправки письма";
         fclose($smtp_conn);
         exit;
     }
     fputs($smtp_conn, "QUIT\r\n");
     fclose($smtp_conn);
     self::clear();
     return true;
 }