View file email.class.php

File size: 6.14Kb
<?

Class Email
{
        //Кодировка:
        //var $EmailCharset = 'windows-1251';
var $EmailCharset = 'utf-8';
        //Массив получателей письма:
        var $Emails;

        //Отправитель:
        var $EmailFrom = '[email protected]';

        //Тип письма:
        var $EmailType = 'text/plain';

        //Дополнительный заголовок:
        var $EmailXmailer = 'TRX Mailer';

        //Тема письма:
        var $EmailSubject = 'Mail from xakep';

        //E-mail для ошибок
        var $EmailErrorTo = '[email protected]';

        //Дополнительные получатели:
        var $EmailReplyTo;

        // Текст письма:
        var $EmailMessage = 'Прочтите сообщение и проверьте файл!';

        //Это Вам не нужно:
        var $EmailBody;
        var $EmailTo;

        //Массив файлов:
        var $EmailFiles;

        //Заголовки, вам это тоже не нужно:
        var $Headers;

        //Ошибки:
        var $EmailError = 0;
        var $EmailErrors = '';



        //Метод для построения тела письма
        function BuildMessage()
        {
                //Уникальная метка:
                $un_bound = "TRX".time();

                //Заголовок, определяющий адрес отправителя:
                $this->Headers .= "From: ".$this->EmailFrom."\n";

                //Заголовок, определающий тему письма:
                $this->Headers .= "Subject: ".$this->EmailSubject."\n";

                //Проверка переменной EmailErrorTo и добавление заголовка Errors-To:
                if($this->EmailErrorTo != ''){
                        $this->Headers .= "Errors-To: ".$this->EmailErrorTo."\n";
                }

                //Еще несколько заголовков:
                $this->Headers .= "X-Mailer: ".$this->EmailXmailer."\n";
                 //MIME 1.0:
                $this->Headers .= "MIME-Version: 1.0\n";
                //Смешанный тип письма:
                $this->Headers .= "Content-Type: multipart/mixed; boundary=".$un_bound."\n\n";

                //Собираем текст письма:
                $this->EmailBody  = "--".$un_bound."\n";
                //Определаяем тип/подтип письма и его кодировку:
                $this->EmailBody .= "Content-Type: ".$this->EmailType."; charset=".$this->EmailCharset."\n";
                //А также вид кодирования:
                $this->EmailBody .= "Content-Transfer-Encoding: 8bit\n\n";
                //Присоединяем само письмо:
                $this->EmailBody .= $this->EmailMessage;

                //Делаем аттачи:
                if(count($this->EmailFiles) > 0){
                    //Перебираем массив:
                        for($i=0;$i<count($this->EmailFiles);$i++){
                                $rfile = $this->EmailFiles[$i];
                                //Попытка открыть файл:
                                if(!($fd = fopen($rfile, "r"))){

                                    //Ошибка открытия (Файл не найден? Недоступен для чтения?):
                                    $this->EmailErrors .= "Failed to open ".$this->EmailFiles[$i]."!\n";
                                    $this->EmailError = 1;
                                    //Пропускаем остаток цикла:
                                    continue(1);
                                 }

                                //Читаем файл, перекодируем в BASE64 и делим строку на куски:
                                $text = chunk_split(base64_encode(fread($fd, filesize($rfile))));
                                //Уникальная метка:
                                $this->EmailBody .= "\n--".$un_bound."\n";
                                //Заголовок о том, что дальше идет файл:
                                $this->EmailBody .= "Content-Type: application/octet-stream;\n";
                                //И он кодирован в кодировке BASE64:
                                $this->EmailBody .= "Content-Transfer-Encoding: base64\n";
                                $this->EmailBody .= "Content-Type: application/zip; name=\"".basename($rfile)."\"\n";
                                //А также то, что он - аттач и его имя:
                                $this->EmailBody .= "Content-Disposition: attachment; filename = ".basename($rfile)."\n\n";
                                //Ну и сам файл:

                                $this->EmailBody .= $text;
                        }
                }


                //Закрываем тело письма уникальной меткой:
                $this->EmailBody .= "\n--".$un_bound."--\n";

        }

        //Метод отправки письма:
        function SendEmail()
        {
                //Прохдимс циклом по адресатам :) и отправляем каждому письмо. В случае ошибки возращаем FALSE:
                for($i=0; $i < count($this->Emails);$i++){
                        $this->EmailTo = $this->Emails[$i];
                        if(!mail($this->EmailTo, $this->EmailSubject, $this->EmailBody, $this->Headers)){
                                $sent = FALSE;
                                $this->EmailErrors .='Failed to send mail to '.$this->EmailTo.'\n';
                                $this->EmailError = 1;
                        }else{
                                $sent = TRUE;
                        }
                }
                return $sent;
        }

}
?>