Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Класс mail, класс для отправки писем 
:(
    Опции темы
niaz
  Дата 17.11.2008, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



Предлагаю совместно создать универсальный класс для отправки писем с вложениями. Скрипт полностью рабочий. Для начала выкладываю свой вариант:

Код

<?php

/* Пример использования:

$mail = new Mail;
$mail->from      = '[email protected]';
$mail->to        = '[email protected]';
$mail->subject   = 'Тестовое сообщение';
$mail->body      = '<center><b>Привет!</b><br />Вот изображение 1: <img src="1.gif" /> и изображение 2: <img src="2.gif" /></center>';

$mail->header('X-Priority: 2');

$mail->attachment('1.rar');

$mail->send();
*/

class Mail{
    
    var $from;
    var $to;
    var $message;
    var $headers; // X-Priority: 2
    var $subject;
    var $body = 'text'; // html
    var $cp = 'windows-1251';
    // Кодировка текста отправляемого сообщения.
    // Разрешены кодировки:
    // windows-1251
    // koi8-r
    // iso8859-5
    // x-cp866
    // x-mac-cyrillic    
    // По умолчанию используется кодировка koi8-r
    // @var string
    var $attach;
    
    function header($header){
     
        $this->headers .= trim($header)."\n";
     
    }
    
    function attachment($file){
        
        if (file_exists($file)) {
            
            $file_name = basename($file);

            if (function_exists('mime_content_type')) {
                    $ctype = mime_content_type($file);
                } else {
                    $pathinfo = pathinfo($file);
                    $mime = Array( 
                                'rar'  => 'application/x-tar', 
                                'zip'  => 'application/x-zip-compressed', 
                                'asf'  => 'video/x-ms-asf',
                                'wmv'  => 'video/x-ms-wmv',
                                'aiff' => 'audio/aiff',
                                'au'   => 'audio/basic',
                                'mid'  => 'audio/mid',
                                'mp3'  => 'audio/mpeg',
                                'wav'  => 'audio/wav',
                                'wma'  => 'audio/x-ms-wma',
                                'avi'  => 'video/x-msvideo',
                                'ivf'  => 'video/x-ivf',
                                'mpeg' => 'video/mpeg',
                                'mpg'  => 'video/mpeg',
                                'mpe'  => 'video/mpeg',
                                'qt'   => 'video/quicktime',
                                'mov'  => 'video/quicktime',
                                'art'  => 'image/x-jg',
                                'bmp'  => 'image/bmp', 
                                'gif'  => 'image/gif', 
                                'jpg'  => 'image/jpg',
                                'swf'  => 'application/futuresplash',
                                'tiff' => 'image/tiff',
                                'pdf'  => 'application/pdf',
                                'html' => 'text/html',
                                'htm'  => 'text/html',
                                'xls'  => 'application/x-msexcel',
                                'doc'  => 'application/msword',
                                'rtf'  => 'application/msword',
                                'rtx'  => 'text/richtext',
                                'xml'  => 'text/xml',
                                'hta'  => 'application/hta',
                                'css'  => 'text/css',
                                'txt'  => 'text/plain'
                                 );
                    
                    if ($mime[$pathinfo['extension']]) {
                        
                            $ctype = $mime[$pathinfo['extension']];
            
                        } else {
                            
                            $ctype = 'application/octet - stream';
            
                    }
            }

            $fopen = fopen($file, 'r');
            
            $attachment = fread($fopen, filesize($file));
            
            fclose($fopen);

            $attachment  = chunk_split(base64_encode($attachment));
 
            $encoding = 'base64';
            
            $this->attach[] = 'Content-Type: '.$ctype.'; name = "'.$file_name.'"'."\n".
            'Content-Disposition: attachment; filename="'.$file_name.'"'."\n".
            'Content-Transfer-Encoding: '.$encoding."\n\n".$attachment."\n";

        } else {
            $this->attach = false;
        }
    }
    
    function init(){
        
        $headers .= "MIME-version: 1.0"."\n"."From: ".$this->from."\n"."To: ".$this->to."\n";
            
            if ($this->body = "text") {
                $body = "text/plain";            
            }
            if ($this->body = "html") {
                $body = "text/html";
            }
            
        if ($this->attach[0]) {
            
            $boundary  = 'b' . md5(uniqid(time()));
            $headers .= 'Content-Type: multipart/mixed; boundary = '.$boundary."\n".'--'.$boundary."\n";
            $headers .= "Content-type: ".$body."; charset=".$this->cp."\n";
            $headers .= "Content-Transfer-Encoding: 8bit"."\n\n";
            $headers .= $this->message."\n\n";
            $headers .= '--'.$boundary."\n";
            
            $i = 0;
            $count = count($this->attach);
            
            while ($i < $count) { 
                $headers .= $this->attach[$i]."\n";
                $i = $i+1;
                echo "gjh";
            }
            
        } else {
            
            $headers .= "Content-type: ".$body."; charset=".$this->cp."\n";
            $headers .= "Content-Transfer-Encoding: 8bit"."\n\n";
            $headers .= $this->message."\n\n";    

        }
        $this->headers = $headers;
        echo $count;
        
    }
    
    function send(){
        
    
        $this->init();
        
        mail($this->to, $this->subject, "", $this->headers);
        
    }
}

?>

PM MAIL ICQ   Вверх
solenko
Дата 17.11.2008, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: нет
Всего: 67



niaz, мой вариант phpMailer )


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Pentium133
Дата 18.11.2008, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 17.5.2007

Репутация: нет
Всего: 1



а мой - Swift mailer
ну а в приницпе велосипеды изобретать не запрещенно.
PM MAIL   Вверх
niaz
Дата 18.11.2008, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



А я предполагал разработать "наши" Российские библиотеки классов. Которые не тормозят систему. С русской документацией.  smile 

Это сообщение отредактировал(а) niaz - 18.11.2008, 13:52
PM MAIL ICQ   Вверх
solenko
Дата 18.11.2008, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: нет
Всего: 67



niaz, не поверите, но Российская библиотека тоже пишется на php ) А русская документация... Тот же phpMailer "self documented" Т.е. там кроме phpDoc еще и методы названы так, что вопросов просто не возникает.
А по поводу "грузить систему" -- запустите профайлер и посмотрите там ли вы собараетесь экономить.


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
niaz
Дата 19.11.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



solenko, спасибо за совет. phpMailer и в правду отличный класс. А можешь постоветовать класс для постраничной навигации? Если нет то может вместе ее разработаем?
PM MAIL ICQ   Вверх
bars80080
Дата 19.11.2008, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: нет
Всего: 315



ну для постраничной навигации хватит и простой функции

последнее время полюзуюсь этой,хотя конечно требует доработки
Код
function navigation($link, $begin, $o, $l, $type = true, $js = true,
                    $t = array('menu_down','Введите номер страницы', 'Страница:', ' всего ', ' записей')) {    
    if(empty($_REQUEST[$begin]) || !is_numeric($_REQUEST[$begin])) $bz = 0; else $bz = $_REQUEST[$begin];
    if(floor($bz) != $bz) { $bz = 0; }
    $html = '<div id="'.$t[0].'">';
    if($js) {
        $html .= '<script type="text/javascript">
        function topage(linkus, mnog) {
            if(mnog == 0) { mnog = 1; }
            var tup = prompt("'.$t[1].'", 2);
            if(tup === null) return false;
            if(!isNaN(tup) && tup > 0) { window.location.href = linkus + "=" + (tup*mnog - mnog); }
            return true; }
        '."</script>\r\n";
    }
    if($type) { $tp = $l; } else { $tp = 0; }
    $html .= '<a href="javascript:void(0);" onclick="topage(\''.$link.'&'.$begin.'\', '.$tp.'); return false;">'.$t[2].'</a>';
    $num = $o/$l; $bx = floor($bz/$l); 
    $maxj = floor($o/$l); $maxj1 = $maxj - 3;
    $minb = $bx - 3; $maxb = $bx + 3; $firstm = true; $secondm = true;
    for($j = 0; $j <= $maxj; $j++) {
        if($type) $d = $j*$l; else $d = $j;
        if($j == $bx) $html .=  ' '.($bx + 1).' ';
        elseif($j != $bx && ($j < 3 || $j > $maxj1 || ($j > $minb && $j < $maxb))) { 
            $html .= ' <a href="'.$link.'&'.$begin.'='.$d.'">'.($j + 1).'</a> '; }
        elseif($firstm && $j < $bx) { $html .= ' ... '; $firstm = false; }
        elseif($secondm && $j > $bx) { $html .= ' ... '; $secondm = false; }
    }
    $html .= $t[3].$o.$t[4]."</div>\r\n"; 
    return $html;
}


где $link - основа ссылки по которой переходить, $begin - имя переменной обозначабщая номер записи, $o - количество записей всего, $l - сколько выводим записей на страницу, $type = true - манипулирем записями, иначе страницами, $js = true - вставить функцию скрипта


работает также, как на этом форуме
PM MAIL WWW   Вверх
Sanchezzz
  Дата 20.11.2008, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: нет
Всего: 60



ну класс мыла уже есть я выкладывал (не мой) даже 2 (PHPMailer и PHPSNTP) в этой теме может что нибудь другое напишем?


Это сообщение отредактировал(а) Sanchezzz - 20.11.2008, 20:30


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Libraries | Следующая тема »


 




[ Время генерации скрипта: 0.1188 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.