Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


E-mail with attachments

Поиск:
Код
<?php
class Mail
{
    //
    // +----------------------------------------------------------------------+
    // | Mail, класс для отправки электронной почты с вложениями              |
    // +----------------------------------------------------------------------+
    // | Класс предназначен  для отправки  электронной  почты  с  вложениями. |
    // | Класс автоматически  распознает  кодировку отправляемого сообщения и |
    // | переконвертирует его в заданную кодировку.                           |
    // | Поддерживается автоматическое определение типа MIME вложений.        |
    // +----------------------------------------------------------------------+
    // | Автор:   Пинежанинов Иван <arial@hotmail.ru>                         |
    // +----------------------------------------------------------------------+
    //
    // v 1.01 18:42 01.11.2003
    //
    // +----------------------------------------------------------------------+
    // |                    Конфигурационные переменные:                      |
    // +----------------------------------------------------------------------+
    
    // Отправитель сообщения.
    // Некоторые хостеры требуют наличия адреса отправителя сообщения.
    // Если Ваш хостер допускает отсутствие этого заголовка,
    // параметр можно упустить.
    //
    // @var string
    var $from;
    // Получатель сообщения.
    //
    // @var string
    var $to;
    // Тема сообщения.
    //
    // @var string
    var $subject;
    // Текст сообщения.
    //
    // @var string
    var $body;
    
    // Эта переменная разрешает или запрещает автоматическое определение
    // html - контента в теле сообщения.
    // По умолчанию включена.
    //
    // @var bool
    var $html_auto = true;
    // Эта переменная работает только при отключенной переменной $html_auto
    // Она позволяет вручную выбрать тип контента в теле сообщения.
    // Если переменная включена, тело сообщения будет передаваться в виде
    // html, если отключена - в виде plain text.
    // По умолчанию отключена.
    //
    // @var bool
    var $html = false;
    // Кодировка текста отправляемого сообщения.
    // Разрешены кодировки:
    // windows-1251
    // koi8-r
    // iso8859-5
    // x-cp866
    // x-mac-cyrillic    
    // По умолчанию используется кодировка koi8-r
    //
    // @var string
    var $cp = 'koi8-r';
    // Эта переменная разрешает или запрещает автоматическое определение
    // кодировки исходного текста сообщения.
    // По умолчанию включена.
    //
    // @var bool
    var $cp_auto = true;
    // Эта переменная работает только при отключенной переменной $cp_auto
    // Она позволяет вручную выбрать кодировку исходного текста сообщения.
    // Разрешены кодировки:
    // windows-1251
    // koi8-r
    // iso8859-5
    // x-cp866
    // x-mac-cyrillic    
    // По умолчанию используется кодировка windows-1251
    //
    // @var string
    var $cp_in;
    // +----------------------------------------------------------------------+
    // |                  Конец конфигурационных переменных.                  |
    // +----------------------------------------------------------------------+
    
    // Символ перевода строки в зависимости от операционной системмы.
    var $nl;
    // Переменная несет в себе массив присоединенных файлов.
    var $parts = Array();
    // Переменная несет в себе массив заголовков сообщения,
    // добавленных из вне.
    var $headers = Array();
    function Mail()
    {
        substr(PHP_OS, 0, 3) == 'WIN' ? $this->nl = "\r\n" : $this->nl = "\n";
    }
    // Метод предназначен для добавления файла к сообщению.
    //
    // bool add_attachment(string filename, [string type])
    function add_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'
                             );
                isset($mime[$pathinfo['extension']]) ? $ctype = $mime[$pathinfo['extension']] : $ctype = 'application/octet - stream';
            }
            $fopen = fopen($file, 'r');
            $attachment = fread($fopen, filesize($file));
            fclose($fopen);
            $this->parts[] = Array  
                             ( 
                                'name'       => $file_name,
                                'attachment' => $attachment,
                                'ctype'      => $ctype, 
                             ); 
            return 0;
        } else {
            return 1;
        }
    } 
    // Метод предназначен для добавления заголовка к сообщению.
    //
    // void add_header(string str)
    function add_header($header)
    {
        $this->headers[] = trim($header);
    }
    
    function detect_cyr_charset($str)
    {
        $charsets = Array( 
                        'k' => 0, 
                        'w' => 0, 
                        'd' => 0, 
                        'i' => 0, 
                        'm' => 0 
                         ); 
        for ($i = 0, $length = strlen($str); $i < $length; $i++) { 
            $char = ord($str[$i]);
            //non-russian characters
            if ($char < 128 || $char > 256) continue; 
            //cp866
            if (($char > 159 && $char < 176) || ($char > 223 && $char < 242)) $charsets['d'] += 3; 
            if (($char > 127 && $char < 160)) $charsets['d'] += 1; 
            //koi8-r
            if (($char > 191 && $char < 223)) $charsets['k'] += 3; 
            if (($char > 222 && $char < 256)) $charsets['k'] += 1; 
            //win-1251
            if ($char > 223 && $char < 256) $charsets['w'] += 3; 
            if ($char > 191 && $char < 224) $charsets['w'] += 1; 
            //mac
            if ($char > 221 && $char < 255) $charsets['m'] += 3; 
            if ($char > 127 && $char < 160) $charsets['m'] += 1; 
            //iso-8859-5
            if ($char > 207 && $char < 240) $charsets['i'] += 3; 
            if ($char > 175 && $char < 208) $charsets['i'] += 1; 
        } 
        arsort($charsets); 
        return key($charsets);
    }
    function cp_convert()
    {
        $cp_array = Array(
                        'windows-1251'   => 'w',
                        'koi8-r'         => 'k',
                        'iso8859-5'      => 'i',
                        'x-cp866'        => 'a',
                        'x-mac-cyrillic' => 'm'
                         );
        if ($this->cp_auto == true) {
            $from = $this->detect_cyr_charset($this->body);
        } else {
            isset($cp_array[$this->cp_in]) ? $from = $cp_array[$this->cp_in] : $from = 'w';
        }
        isset($cp_array[$this->cp]) ? $to = $cp_array[$this->cp] : $to = 'k';
        $this->subject = convert_cyr_string($this->subject, $from, $to);
        $this->body    = convert_cyr_string($this->body   , $from, $to);
    }
    function build_part($part)
    {
        $attachment  = chunk_split(base64_encode($part['attachment']));
        $encoding = 'base64';
        return 'Content-Type: ' . $part['ctype'] . ($part['attachment'] ? '; name = "' . $part['name'] . '"' : '') . $this->nl . 'Content-Transfer-Encoding: ' . $encoding . $this->nl . $this->nl . $attachment . $this->nl;
    }
    function build_multipart()
    {
        $boundary  = 'b' . md5(uniqid(time())); 
        $multipart = 'Content-Type: multipart/mixed; boundary = ' . $boundary . $this->nl . $this->nl . 'This is a MIME encoded message.' . $this->nl . $this->nl . '--' . $boundary . $this->nl;
        $multipart .= 'Content-Type: text/';
        if ($this->html_auto == true) {
            $pattern = "%</?\w+(\s[^>]*)?>%is";
            preg_match($pattern, $this->body) == true ? $multipart .= 'html' : $multipart .= 'plain';
        } else {
            $this->html == true ? $multipart .= 'html' : $multipart .= 'plain';
        }
        $multipart .= '; charset=' . $this->cp . $this->nl . 'Content-Transfer-Encoding: 8bit' . $this->nl . $this->nl . $this->body . $this->nl . $this->nl . '--' . $boundary;
        $i = 0;
        $count = sizeof($this->parts);
        while ($i < $count) { 
            $multipart .= $this->nl . $this->build_part($this->parts[$i]). 
            '--' . $boundary; 
            $i++;
        } 
        return $multipart .= '--' . $this->nl; 
    }
    function send()
    {
        $this->cp_convert();
        $headers = '';
        empty($this->from) or $headers .= 'From: ' . $this->from . $this->nl;
        $i = 0;
        $count = sizeof($this->headers);
        while ($i < $count) {
            $headers .= $this->headers[$i] . $this->nl;
            $i++;
        }
        $headers .= 'MIME-Version: 1.0' . $this->nl;
        $headers .= $this->build_multipart();
        return mail($this->to, $this->subject, '', $headers);
    }
}
/* Пример использования:
$mail = new Mail;
$mail->from      = 'admin@uletai.com';
$mail->to        = 'arial@hotmail.ru';
$mail->subject   = 'Тестовое сообщение';
$mail->body      = '<center><b>Привет!</b><br />Вот изображение 1: <img src="1.gif" /> и изображение 2: <img src="2.gif" /></center>';
$mail->add_header('X-Priority: 2');
$mail->add_attachment('1.gif');
$mail->add_attachment('2.gif');
$mail->send();
*/
?>
Автор: arial






Просмотров: 4334

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную