Почему не работает отправка email?

Тема в разделе "PHP", создана пользователем AdeQuAte, 13 авг 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. AdeQuAte

    AdeQuAte

    Регистр.:
    23 мар 2007
    Сообщения:
    353
    Симпатии:
    45
    Почему не отправляются письма?
    PHP:
    <?php
    $content 
    file_get_contents('save.txt');
    $array_expl explode('-+-'$content);

    $message_send =$array_expl[3];
    $subject_send $array_expl[2];
    $mail_from =$array_expl[0];
    $mail_to $array_expl[1];

    // конвертиру ем в koir, иначе будут проблемы с различными веб-почтовиками
    $message_send convert_cyr_string($message_send"w""k");
    $subject_send '=?koi8-r?B?'.base64_encode(convert_cyr_string($subject_send"w","k")).'?=';
    $head "Content-Type: text/plain;\r\n";
    $head .= "X-Mailer: PHP/".phpversion()."\r\n";
    $head .= "To: $mail_to\r\n";
    $head .= "From: $mail_from\r\n";
    $head .= "Subject: $subject_send\n";
    mail($mail_to$subject_send$message_send$head);

    echo 
    "Письмо отправлено"
    ?>   
     
  2. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    Ошибки показывает?
     
  3. dumber

    dumber

    Регистр.:
    23 апр 2007
    Сообщения:
    272
    Симпатии:
    123
    PHP:
    $subject_send '=?koi8-r?B?'.base64_encode(convert_cyr_string($subject_send"w","k")).'?=';
    мне вот эта куйня в теме письма не понравилась...
    Кодировка в заголовках ставится а не теме обычно...
    А лучше зайди на phpclasses и захвати готовый класс отправки мыл, будет проще ;)
     
  4. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    Да нет - это стандртное base-кодирование сабжа письма.
     
  5. AdeQuAte

    AdeQuAte

    Регистр.:
    23 мар 2007
    Сообщения:
    353
    Симпатии:
    45
    Если кто-то напишет скрипт, который будет отсылать мыл с любого ящика на любой и брать текст с заголовком из файла, то буду очень признателен :ay:
     
  6. dumber

    dumber

    Регистр.:
    23 апр 2007
    Сообщения:
    272
    Симпатии:
    123
    ОК для начала вот те класс почты :)

    PHP:
    <?php
    /**
     * Nomad MIME Mail Copyright (C) 2008 Alejandro Garcia Gonzalez
     *
     * This library is free software; you can redistribute it and/or modify
     * it under the terms of the GNU Lesser General Public License as
     * published by the Free Software Foundation; either version 2.1 of the
     * License, or (at your option) any later version.
     *
     * This library is distributed in the hope that it will be useful, but
     * WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     * GNU Lesser General Public License for more details.
     *
     * You should have received a copy of the GNU Lesser General Public
     * License along with this library; if not, write to the Free Software
     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
     */

    /**
     * Nomad MIME Mail (aka Nexus MIME Mail)
     *
     * A class for sending MIME based e-mail messages with SMTP and Auth
     * SMTP support.
     *
     *  + Plain Text
     *  + HTML
     *  + Plain Text with Attachments
     *  + HTML with Attachments
     *  + HTML with Embedded Images
     *  + HTML with Embedded Images and Attachments
     *  + Send email messages via SMTP and Auth SMTP
     *
     * @author            Alejandro Garcia Gonzalez <nexus at developarts.com>
     * @package            nomad_mimemail
     * @version            1.6
     * @link            http://www.developarts.com/nomad_mimemail
     * @copyright        Copyright (c) 2008, Alejandro Garcia Gonzalez
     * @license            http://www.opensource.org/licenses/lgpl-license.html GNU Lesser General Public License (LGPL)
     */
    class Mail_gopher
    {
        
    /**
          * Debug Status set how show the errors. "yes" by default.
          * If "yes" show a line with error and continue
          * If "no" Don't show anything and continue
          * If "halt" show a line whit error and stop script
          * @see _debug()
          * @var string yes|no|halt
          * @access private
         */
        
    var $debug_status    "yes";

        
    /**
         * The charser of MIME construction. "ISO-8859-1" by default
         * @see function set_charset()
         * @var string
         * @access private
         */
        
    var $charset        "ISO-8859-1";

        
    /**
         * Subject text. "No subject" by default
         * @see function set_subject()
         * @var string
         * @access private
         */
        
    var $mail_subject    "No subject";

        
    /**
         * Email sender. "Anonymous <noreply@fake.com>" by default
         * @see function set_from()
         * @var string
         * @access private
         */
        
    var $mail_from        "Anonymous <noreply@fake.com>";

        
    /**
         * Collection of recipients email address separated by comma
         * @see function set_to()
         * @see function add_to()
         * @var string
         * @todo must be an array
         * @access private
         */
        
    var $mail_to;

        
    /**
         * Collection of carbon copy recipients email address separated by comma
         * @see function set_cc()
         * @see function add_cc()
         * @var string
         * @todo must be an array
         * @access private
         */
        
    var $mail_cc;

        
    /**
         * Collection of bind carbon copy recipients email address separated by comma
         * @see function set_bcc()
         * @see function add_bcc()
         * @var string
         * @todo must be an array
         * @access private
         */
        
    var $mail_bcc;

        
    /**
         * The plain text message of email
         * @see function set_text()
         * @var string
         * @access private
         */
        
    var $mail_text;

        
    /**
         * The HTML message of email
         * @see function set_html()
         * @var string
         * @access private
         */
        
    var $mail_html;

        
    /**
         * Numeric identifier based in elements of email
         * @see _parse_elements()
         * @var int
         * @access private
         */
        
    var $mail_type;

        
    /**
         * Header construction of email
         * @see function _build_header
         * @var string
         * @access private
         */
        
    var $mail_header;

        
    /**
         * Body construction of email
         * @see function _build_body
         * @var string
         * @access private
         */
        
    var $mail_body;

        
    /**
         * The reply email address
         * @see function set_reply_to
         * @var string
         * @access private
         */
        
    var $mail_reply_to;

        
    /**
         * The devilvery error return email address
         * @see function set_return_path
         * @var string
         * @access private
         */
        
    var $mail_return_path;

        
    /**
         * Attachments Index
         * @see function add_attachment()
         * @var int
         * @access private
         */
        
    var $attachments_index;

        
    /**
         * Mixed Attachments data
         * @see function add_attachment()
         * @var array
         * @access private
         */
        
    var $attachments = array();

        
    /**
         * Mixed Attachments images data
         * @see function add_attachment()
         * @var array
         * @access private
         */
        
    var $attachments_img = array();

        
    /**
         * Boundary Mixed Hash
         * @see function nomad_mimemail()
         * @var string
         * @access private
         */
        
    var $boundary_mix;

        
    /**
         * Boundary Related Hash
         * @see function nomad_mimemail()
         * @var string
         * @access private
         */
        
    var $boundary_rel;

        
    /**
         * Boundary Alternative Hash
         * @see function nomad_mimemail()
         * @var string
         * @access private
         */
        
    var $boundary_alt;

        
    /**
         * Mark if mail has been sent
         * @see function send()
         * @var init
         * @access private
         */
        
    var $sended_index;

        
    /**
         * SMTP connection pointer
         * @see function _open_smtp_conn()
         * @var resource
         * @access private
         */
        
    var $smtp_conn;

        
    /**
         * SMTP host name or IP
         * @see function set_smtp_host()
         * @var string
         * @access private
         */
        
    var $smtp_host;

        
    /**
         * SMTP host access port
         * @see function set_smtp_host()
         * @var int
         * @access private
         */
        
    var $smtp_port;

        
    /**
         * SMTP Username
         * @see function set_smtp_auth()
         * @var string
         * @access private
         */
        
    var $smtp_user;

        
    /**
         * SMTP Password
         * @see function set_smtp_auth()
         * @var string
         * @access private
         */
        
    var $smtp_pass;

        
    /**
         * SMTP log
         * @see function set_smtp_log()
         * @var bool
         * @access private
         */
        
    var $smtp_log false;

        
    /**
         * SMTP log messages text
         * @see function get_smtp_log()
         * @var string
         * @access private
         */
        
    var $smtp_msg;

        
    /**
         * Error string array
         * @see function _debug()
         * @var array
         * @access private
         */
        
    var $error_msg = array(
                
    1    =>    'Mail was not sent',
                
    2    =>    'Body Build Incomplete',
                
    3    =>    'Need a mail recipient in mail_to',
                
    4    =>    'No valid Email Address: ',
                
    5    =>    'Could not Open File',
                
    6    =>    'Could not connect to SMTP server.',
                
    7    =>    'Unespected SMTP answer: '
        
    );

        
    /**
         * Support MIME types
         * @see _get_mimetype()
         * @var array
         * @access private
         */
        
    var $mime_types = array(
                
    'gif'    => 'image/gif',
                
    'jpg'    => 'image/jpeg',
                
    'jpeg'    => 'image/jpeg',
                
    'jpe'    => 'image/jpeg',
                
    'bmp'    => 'image/bmp',
                
    'png'    => 'image/png',
                
    'tif'    => 'image/tiff',
                
    'tiff'    => 'image/tiff',
                
    'swf'    => 'application/x-shockwave-flash',
                
    'doc'    => 'application/msword',
                
    'xls'    => 'application/vnd.ms-excel',
                
    'ppt'    => 'application/vnd.ms-powerpoint',
                
    'pdf'    => 'application/pdf',
                
    'ps'    => 'application/postscript',
                
    'eps'    => 'application/postscript',
                
    'rtf'    => 'application/rtf',
                
    'bz2'    => 'application/x-bzip2',
                
    'gz'    => 'application/x-gzip',
                
    'tgz'    => 'application/x-gzip',
                
    'tar'    => 'application/x-tar',
                
    'zip'    => 'application/zip',
                
    'html'    => 'text/html',
                
    'htm'    => 'text/html',
                
    'txt'    => 'text/plain',
                
    'css'    => 'text/css',
                
    'js'    => 'text/javascript'
        
    );

        
        
    /**
         * Constructor
         * void nomad_mimemail()
         */
        
    public function __construct() 
        {
            
    $this->boundary_mix            "=-nxs_mix_" md5(uniqid(rand()));
            
    $this->boundary_rel            "=-nxs_rel_" md5(uniqid(rand()));
            
    $this->boundary_alt            "=-nxs_alt_" md5(uniqid(rand()));
            
    $this->attachments_index    0;
            
    $this->sended_index            0;

            
    // Line Break BR
            
    if(!defined('BR')){
                
    define('BR'"\r\n"TRUE);
            }
        }
        public function 
    __destruct() 
        {}


        
    /**
         * void set_from(string mail_from, [string name])
         * Set the "from" email address. "Anonymous <fake@mail.com>" by default
         * @access public
         * @param string mail_from The email from address
         * @param string name Optional name contact
         * @return void
         */
        
    function set_from($mail_from$name "")
        {
            if (
    $this->_validate_mail($mail_from)){
                
    $this->mail_from = !empty($name) ? "$name <$mail_from>" $mail_from;
            }
            else {
                
    $this->mail_from "Anonymous <noreply@fake.com>";
            }
        }


        
    /**
         * bool set_to(string mail_to, [string name])
         * Set the recipient email address
         * @access public
         * @param string mail_to The recipient email address
         * @param string name Optional name contact
         * @return bool
         */
        
    function set_to($mail_to$name "")
        {
            if (
    $this->_validate_mail($mail_to)){
                
    $this->mail_to = !empty($name) ? "$name <$mail_to>" $mail_to;
                return 
    true;
            }
            return 
    false;
        }


        
    /**
         * bool set_cc(string mail_cc, [string name])
         * Set the carbon copy recipient email address
         * @access public
         * @param string mail_cc The carbon copy recipient email address
         * @param string name Optional name contact
         * @return bool
         */
        
    function set_cc($mail_cc$name "")
        {
            if (
    $this->_validate_mail($mail_cc)){
                
    $this->mail_cc = !empty($name) ? "$name <$mail_cc>" $mail_cc;
                return 
    true;
            }
            return 
    false;
        }


        
    /**
         * bool set_bcc(string mail_bcc, [string name])
         * Set the blind carbon copy recipient email address
         * @access public
         * @param string mail_bcc The blind carbon copy recipient email address
         * @param string name Optional name contact
         * @return bool
         */
        
    function set_bcc($mail_bcc$name "")
        {
            if (
    $this->_validate_mail($mail_bcc)){
                
    $this->mail_bcc = !empty($name) ? "$name <$mail_bcc>" $mail_bcc;
                return 
    true;
            }
            return 
    false;
        }


        
    /**
         * bool set_reply_to(string mail_reply_to, [string name])
         * Set the reply email address. If this var is not set, the reply mail are the "from" email address
         * @access public
         * @param string mail_reply_to The reply email address
         * @param string name Optional name contact
         * @return bool
         */
        
    function set_reply_to($mail_reply_to$name "")
        {
            if (
    $this->_validate_mail($mail_reply_to)){
                
    $this->mail_reply_to = !empty($name) ? "$name <$mail_reply_to>" $mail_reply_to;
                return 
    true;
            }
            return 
    false;
        }


        
    /**
         * bool add_to(string mail_to, [string name])
         * Set or add a new recipient email address
         * @access public
         * @param string mail_to The recipient email address
         * @param string name Optional name contact
         * @return bool
         */
        
    function add_to($mail_to$name "")
        {
            if (
    $this->_validate_mail($mail_to)){
                
    $mail_to = !empty($name) ? "$name <$mail_to>" $mail_to;
                
    $this->mail_to = !empty($this->mail_to) ? $this->mail_to ", " $mail_to $mail_to;
                return 
    true;
            }
            return 
    false;
        }


        
    /**
         * bool add_cc(string mail_cc, [string name])
         * Set or add a new carbon copy recipient email address
         * @access public
         * @param string mail_cc The carbon copy recipient email address
         * @param string name Optional name contact
         * @return bool
         */
        
    function add_cc($mail_cc$name "")
        {
            if (
    $this->_validate_mail($mail_cc)){
                
    $mail_cc = !empty($name) ? "$name <$mail_cc>" $mail_cc;
                
    $this->mail_cc = !empty($this->mail_cc) ? $this->mail_cc ", " $mail_cc $mail_cc;
                return 
    true;
            }
            return 
    false;
        }


        
    /**
         * bool add_bcc(string mail_bcc, [string name])
         * Set or add a new blind carbon copy recipient email address
         * @access public
         * @param string mail_bcc The blind carbon copy recipient email address
         * @param string name Optional name contact
         * @return bool
         */
        
    function add_bcc($mail_bcc$name "")
        {
            if (
    $this->_validate_mail($mail_bcc)){
                
    $mail_bcc = !empty($name) ? "$name <$mail_bcc>" $mail_bcc;
                
    $this->mail_bcc = !empty($this->mail_bcc) ? $this->mail_bcc ", " $mail_bcc $mail_bcc;
                return 
    true;
            }
            return 
    false;
        }


        
    /**
         * bool add_reply_to(string mail_reply_to, [string name])
         * Set or add a new reply email address. If this var is not set, the reply mail are the "from" email address
         * @access public
         * @param string mail_reply_to The reply email address
         * @param string name Optional name contact
         * @return bool
         */
        
    function add_reply_to($mail_reply_to$name "")
        {
            if (
    $this->_validate_mail($mail_reply_to)){
                
    $mail_reply_to = !empty($name) ? "$name <$mail_reply_to>" $mail_reply_to;
                
    $this->mail_reply_to = !empty($this->mail_reply_to) ? $this->mail_reply_to ", " $mail_reply_to $mail_reply_to;
                return 
    true;
            }
            return 
    false;
        }


        
    /**
         * bool set_return_path(string mail_return_path)
         * Set the devilvery error return email address
         * @access public
         * @param string mail_return_path The delivery error email account
         * @return bool
         */
        
    function set_return_path($mail_return_path)
        {
            if (
    $this->_validate_mail($mail_return_path)){
                
    $this->mail_return_path $mail_return_path;
                return 
    true;
            }
            return 
    false;
        }


        
    /**
         * void set_subject(string subject)
         * Set the email subject string. "No subject" by default
         * @access public
         * @param string subject
         * @return void
         */
        
    function set_subject($subject)
        {
            
    $this->mail_subject = !empty($subject) ? trim($subject) : "No subject";
        }


        
    /**
         * void set_text(string text)
         * Set the plain text message in body of email
         * @access public
         * @param string text The plain text message
         * @return void
         */
        
    function set_text($text)
        {
            if (!empty(
    $text)){
                
    $this->mail_text preg_replace("(\r\n|\r|\n)"BR$text);
            }
        }


        
    /**
         * void set_html(string html)
         * Set the HTML message in body of email
         * @access public
         * @param string html The HTML message
         * @return void
         */
        
    function set_html($html)
        {
            if (!empty(
    $html)){
                
    $this->mail_html preg_replace("(\r\n|\r|\n)"BR$html);
            }
        }


        
    /**
         * void set_charset(string charset)
         * Set the charset if email
         * @access public
         * @param string charset The CharSet
         * @return void
         */
        
    function set_charset($charset)
        {
            if (!empty(
    $charset)){
                
    $this->charset $charset;
            }
        }


        
    /**
         * bool set_smtp_host(string host, [int port])
         * Set the SMTP host and port, if you call this method with valid parameters, the class sends email through SMTP
         * @access public
         * @param string host The Hostname/IP of the SMTP server
         * @param int port Optional, the port to connect to SMTP server
         * @return bool
         */
        
    function set_smtp_host($host$port 25)
        {
            if (!empty(
    $host) && is_numeric($port)){
                
    $this->smtp_host $host;
                
    $this->smtp_port $port;
                return 
    true;
            }
            return 
    false;
        }


        
    /**
         * bool set_smtp_host(string host, [int port])
         * Set the Auth SMTP user and password, you need to call method set_smtp_host before
         * @access public
         * @param string user The Username Authentication account
         * @param string pass The Password Authentication account
         * @return bool
         */
        
    function set_smtp_auth($user$pass)
        {
            if(!empty(
    $user) && !empty($pass)){
                
    $this->smtp_user $user;
                
    $this->smtp_pass $pass;
                return 
    true;
            }
            return 
    false;
        }


        
    /**
         * string get_eml()
         * Get the EML format message of the email
         * @access public
         * @return mixed string if message has build, false if not
         */
        
    function get_eml()
        {
            if (
    $this->_build_body()){
                return
                    
    $this->mail_header BR .
                    
    'Subject: ' $this->mail_subject BR .
                    
    $this->mail_body;
            }
            return 
    false;
        }


        
    /**
         * bool add_attachment(mixed file, string name, [string type])
         * Add a file attachment
         * @access public
         * @param string file
         * @param string name
         * @param string type
         * @return bool
         */
        
    function add_attachment($file$name$type "")
        {
            if ((
    $content $this->_open_file($file))){
                
    $this->attachments[$this->attachments_index] = array(
                    
    'content' => chunk_split(base64_encode($content), 76BR),
                    
    'name' => $name,
                    
    'type' => (empty($type) ? $this->_get_mimetype($name): $type),
                    
    'embedded' => false
                
    );
                
    $this->attachments_index++;
            }
        }


        
    /**
         * bool add_content_attachment(mixed file, string name, [string type])
         * Add a content to an attachment
         * @access public
         * @param string content
         * @param string name
         * @param string type
         * @return bool
         */
        
    function add_content_attachment($content$name$type "")
        {
            
    $this->attachments[$this->attachments_index] = array(
                
    'content' => chunk_split(base64_encode($content), 76BR),
                
    'name' => $name,
                
    'type' => (empty($type) ? $this->_get_mimetype($name): $type),
                
    'embedded' => false
            
    );
            
    $this->attachments_index++;
        }


        
    /**
         * void new_mail([mixed from], [mixed to], [string subject], [string text], [string html])
         * Method shortcut to create an email
         * @access public
         * @return void
         */
        
    function new_mail($from ""$to ""$subject ""$text ""$html "")
        {
            
    // First, clear all vars
            
    $this->mail_subject "";
            
    $this->mail_from "";
            
    $this->mail_to "";
            
    $this->mail_cc "";
            
    $this->mail_bcc "";
            
    $this->mail_text "";
            
    $this->mail_html "";
            
    $this->mail_header "";
            
    $this->mail_body "";
            
    $this->mail_reply_to "";
            
    $this->mail_return_path "";
            
    $this->attachments_index 0;
            
    $this->sended_index 0;

            
    // Clear Array Vars
            
    $this->attachments = array();
            
    $this->attachments_img = array();

            
    // Asign vars
            
    if (is_array($from)){
                
    $this->set_from($from[0],$from[1]);
                
    $this->set_return_path($from[0]);
            }
            else {
                
    $this->set_from($from);
                
    $this->set_return_path($from);
            }

            if (
    is_array($to)){
                
    $this->set_to($to[0],$to[1]);
            }
            else {
                
    $this->set_to($to);
            }

            
    $this->set_subject($subject);
            
    $this->set_text($text);
            
    $this->set_html($html);
        }


        
    /**
         * bool send()
         * Send the email message
         * @access public
         * @return bool
         */
        
    function send()
        {
            if (
    $this->sended_index == && !$this->_build_body()){
                
    $this->_debug(1);
                return 
    false;
            }

            if (empty(
    $this->smtp_host) && !empty($this->mail_return_path) && $this->_php_version_check('4.0.5') && !($this->_php_version_check('4.2.3') && ini_get('safe_mode'))){
                return 
    mail($this->mail_to$this->mail_subject$this->mail_body$this->mail_header'-f'.$this->mail_return_path);
            }
            elseif (empty(
    $this->smtp_host)) {
                return 
    mail($this->mail_to$this->mail_subject$this->mail_body$this->mail_header);
            }
            elseif (!empty(
    $this->smtp_host)){
                return 
    $this->_smtp_send();
            }
            else {
                return 
    false;
            }
        }


        
    /**
         * void _build_header()
         * Build all the headers of email
         * @access private
         * @param text content_type The Content Type of email
         * @return void
         */
        
    function _build_header($content_type)
        {
            
    $this->mail_header "";
            if (!empty(
    $this->smtp_host)){
                
    $this->mail_header .= "Subject: " $this->mail_subject BR;
            }
            if (!empty(
    $this->mail_from)){
                
    $this->mail_header .= "From: " $this->mail_from BR;
                
    $this->mail_header .= !empty($this->mail_reply_to) ? "Reply-To: " $this->mail_reply_to BR "Reply-To: " $this->mail_from BR;
            }
            if (!empty(
    $this->mail_to) && !empty($this->smtp_host)){    // FixBug: http://www.developarts.com/version_14_de_nomad_mime_mail#comment-294
                
    $this->mail_header .= "To: " $this->mail_to BR;
            }
            if (!empty(
    $this->mail_cc)){
                
    $this->mail_header .= "Cc: " $this->mail_cc BR;
            }
            if (!empty(
    $this->mail_bcc) && empty($this->smtp_host)){
                
    $this->mail_header .= "Bcc: " $this->mail_bcc BR;
            }
            if (!empty(
    $this->mail_return_path)){
                
    $this->mail_header .= "Return-Path: " $this->mail_return_path BR;
            }
            
    $this->mail_header .= $content_type BR;
            if (!empty(
    $this->smtp_host)){
                
    $this->mail_header .= "Date: " date("r") . BR;
            }
            
    $this->mail_header .= "Message-Id: <" md5(uniqid(rand())) . ".nomad_mimemail@" $_SERVER['SERVER_ADDR'] . ">" BR;
            
    $this->mail_header .= "MIME-Version: 1.0" BR;
            
    $this->mail_header .= "X-Mailer: Nomad MIME Mail "$this->get_version() . BR BR;
        }


        
    /**
         * bool _build_body()
         * Build body email message
         * @access private
         * @return bool
         */
        
    function _build_body()
        {
            switch (
    $this->_parse_elements()){
                case 
    1// Plain Text
                    
    $this->_build_header("Content-Type: text/plain; charset=\"$this->charset\"");
                    
    $this->mail_body $this->mail_text;
                    break;
                case 
    3// Plain Text + HTML
                    
    $this->_build_header("Content-Type: multipart/alternative; boundary=\"$this->boundary_alt\"");
                    
    $this->mail_body .= "--" $this->boundary_alt BR;
                    
    $this->mail_body .= "Content-Type: text/plain; charset=\"$this->charset\"" BR;
                    
    $this->mail_body .= "Content-Transfer-Encoding: 7bit" BR BR;
                    
    $this->mail_body .= $this->mail_text BR BR;
                    
    $this->mail_body .= "--" $this->boundary_alt BR;
                    
    $this->mail_body .= "Content-Type: text/html; charset=\"$this->charset\"" BR;
                    
    $this->mail_body .= "Content-Transfer-Encoding: 7bit" BR;
                    
    $this->mail_body .= $this->mail_html BR;
                    
    $this->mail_body .= "--" $this->boundary_alt "--" BR;
                    break;
                case 
    5// Plain Text + Attachments
                    
    $this->_build_header("Content-Type: multipart/mixed; boundary=\"$this->boundary_mix\"");
                    
    $this->mail_body .= "--" $this->boundary_mix BR;
                    
    $this->mail_body .= "Content-Type: text/plain; charset=\"$this->charset\"" BR;
                    
    $this->mail_body .= "Content-Transfer-Encoding: 7bit" BR BR;
                    
    $this->mail_body .= $this->mail_text BR BR;
                    foreach(
    $this->attachments as $value){
                        
    $this->mail_body .= "--" $this->boundary_mix BR;
                        
    $this->mail_body .= "Content-Type: " $value['type'] . "; name=\"" $value['name'] . "\"" BR;
                        
    $this->mail_body .= "Content-Disposition: attachment; filename=\"" $value['name'] . "\"" BR;
                        
    $this->mail_body .= "Content-Transfer-Encoding: base64" BR BR;
                        
    $this->mail_body .= $value['content'] . BR BR;
                    }
                    
    $this->mail_body .= "--" $this->boundary_mix "--" BR;
                    break;
                case 
    7:  // Plain Text + HTML + Attachments
                    
    $this->_build_header("Content-Type: multipart/mixed; boundary=\"$this->boundary_mix\"");
                    
    $this->mail_body .= "--" $this->boundary_mix BR;
                    
    $this->mail_body .= "Content-Type: multipart/alternative; boundary=\"$this->boundary_alt\"" BR BR;
                    
    $this->mail_body .= "--" $this->boundary_alt BR;
                    
    $this->mail_body .= "Content-Type: text/plain; charset=\"$this->charset\"" BR;
                    
    $this->mail_body .= "Content-Transfer-Encoding: 7bit" BR;
                    
    $this->mail_body .= $this->mail_text BR BR;
                    
    $this->mail_body .= "--" $this->boundary_alt BR BR;
                    
    $this->mail_body .= "Content-Type: text/html; charset=\"$this->charset\"" BR;
                    
    $this->mail_body .= "Content-Transfer-Encoding: 7bit" BR;
                    
    $this->mail_body .= $this->mail_html BR BR;
                    
    $this->mail_body .= "--" $this->boundary_alt "--" BR BR;
                    foreach(
    $this->attachments as $value){
                        
    $this->mail_body .= "--" $this->boundary_mix BR;
                        
    $this->mail_body .= "Content-Type: " $value['type'] . "; name=\"" $value['name'] . "\"" BR;
                        
    $this->mail_body .= "Content-Disposition: attachment; filename=\"" $value['name'] . "\"" BR;
                        
    $this->mail_body .= "Content-Transfer-Encoding: base64" BR BR;
                        
    $this->mail_body .= $value['content'] . BR BR;
                    }
                    
    $this->mail_body .= "--" $this->boundary_mix "--" BR;
                    break;
                case 
    11// Plain Text + HTML + Embedded Images
                    
    $this->_build_header("Content-Type: multipart/related; type=\"multipart/alternative\"; boundary=\"$this->boundary_rel\"");
                    
    $this->mail_body .= "--" $this->boundary_rel BR;
                    
    $this->mail_body .= "Content-Type: multipart/alternative; boundary=\"$this->boundary_alt\"" BR BR;
                    
    $this->mail_body .= "--" $this->boundary_alt BR;
                    
    $this->mail_body .= "Content-Type: text/plain; charset=\"$this->charset\"" BR;
                    
    $this->mail_body .= "Content-Transfer-Encoding: 7bit" BR BR;
                    
    $this->mail_body .= $this->mail_text BR BR;
                    
    $this->mail_body .= "--" $this->boundary_alt BR;
                    
    $this->mail_body .= "Content-Type: text/html; charset=\"$this->charset\"" BR;
                    
    $this->mail_body .= "Content-Transfer-Encoding: 7bit" BR BR;
                    
    $this->mail_body .= $this->mail_html BR BR;
                    
    $this->mail_body .= "--" $this->boundary_alt "--" BR BR;
                    foreach(
    $this->attachments as $value){
                        if (
    $value['embedded']){
                            
    $this->mail_body .= "--" $this->boundary_rel BR;
                            
    $this->mail_body .= "Content-ID: <" $value['embedded'] . ">" BR;
                            
    $this->mail_body .= "Content-Type: " $value['type'] . "; name=\"" $value['name'] . "\"" BR;
                            
    $this->mail_body .= "Content-Disposition: attachment; filename=\"" $value['name'] . "\"" BR;
                            
    $this->mail_body .= "Content-Transfer-Encoding: base64" BR BR;
                            
    $this->mail_body .= $value['content'] . BR BR;
                        }
                    }
                    
    $this->mail_body .= "--" $this->boundary_rel "--" BR;
                    break;
                case 
    15// Plain Text + HTML + Embedded Images + Attachments
                    
    $this->_build_header("Content-Type: multipart/mixed; boundary=\"$this->boundary_mix\"");
                    
    $this->mail_body .= "--" $this->boundary_mix BR;
                    
    $this->mail_body .= "Content-Type: multipart/related; type=\"multipart/alternative\"; boundary=\"$this->boundary_rel\"" BR BR;
                    
    $this->mail_body .= "--" $this->boundary_rel BR;
                    
    $this->mail_body .= "Content-Type: multipart/alternative; boundary=\"$this->boundary_alt\"" BR BR;
                    
    $this->mail_body .= "--" $this->boundary_alt BR;
                    
    $this->mail_body .= "Content-Type: text/plain; charset=\"$this->charset\"" BR;
                    
    $this->mail_body .= "Content-Transfer-Encoding: 7bit" BR BR;
                    
    $this->mail_body .= $this->mail_text BR BR;
                    
    $this->mail_body .= "--" $this->boundary_alt BR;
                    
    $this->mail_body .= "Content-Type: text/html; charset=\"$this->charset\"" BR;
                    
    $this->mail_body .= "Content-Transfer-Encoding: 7bit" BR BR;
                    
    $this->mail_body .= $this->mail_html BR BR;
                    
    $this->mail_body .= "--" $this->boundary_alt "--" BR BR;
                    foreach(
    $this->attachments as $value){
                        if (
    $value['embedded']){
                            
    $this->mail_body .= "--" $this->boundary_rel BR;
                            
    $this->mail_body .= "Content-ID: <" $value['embedded'] . ">" BR;
                            
    $this->mail_body .= "Content-Type: " $value['type'] . "; name=\"" $value['name'] . "\"" BR;
                            
    $this->mail_body .= "Content-Disposition: attachment; filename=\"" $value['name'] . "\"" BR;
                            
    $this->mail_body .= "Content-Transfer-Encoding: base64" BR BR;
                            
    $this->mail_body .= $value['content'] . BR BR;
                        }
                    }
                    
    $this->mail_body .= "--" $this->boundary_rel "--" BR BR;
                    foreach(
    $this->attachments as $value){
                        if (!
    $value['embedded']){
                            
    $this->mail_body .= "--" $this->boundary_mix BR;
                            
    $this->mail_body .= "Content-Type: " $value['type'] . "; name=\"" $value['name'] . "\"" BR;
                            
    $this->mail_body .= "Content-Disposition: attachment; filename=\"" $value['name'] . "\"" BR;
                            
    $this->mail_body .= "Content-Transfer-Encoding: base64" BR BR;
                            
    $this->mail_body .= $value['content'] . BR BR;
                        }
                    }
                    
    $this->mail_body .= "--" $this->boundary_mix "--" BR;
                    break;
                default:
                    return 
    $this->_debug(2);
            }
            
    $this->sended_index++;
            return 
    true;
        }


        
    /**
         * bool _php_version_check(string vercheck)
         * Check if current version of PHP is above than other
         * @access private
         * @param string vercheck The compare version of PHP
         * @return bool
         */
        
    function _php_version_check($vercheck)
        {
            if (
    version_compare(PHP_VERSION$vercheck) === 1){
                return 
    true;
            }
            return 
    false;
        }


        
    /**
         * mixed _parse_elements()
         * Check all email message elements and return a identifier
         * @access private
         * @return mixed int|false
         */
        
    function _parse_elements()
        {
            if (empty(
    $this->mail_to)){
                return 
    $this->_debug(3);
            }
            
    $this->_search_images();
            
    $this->mail_type 0// None
            
    if (!empty($this->mail_text)){
                
    $this->mail_type $this->mail_type 1// Plain Text
            
    }
            if (!empty(
    $this->mail_html)){
                
    $this->mail_type $this->mail_type 2// HTML
                
    if (empty($this->mail_text)){
                    
    $this->mail_text strip_tags(eregi_replace("<br>"BR$this->mail_html));
                    
    $this->mail_type $this->mail_type 1// Plain Text
                
    }
            }
            if (
    $this->attachments_index != 0){
                if (
    count($this->attachments_img) != 0){
                    
    $this->mail_type $this->mail_type 8// Embedded Images
                
    }
                if ((
    count($this->attachments) - count($this->attachments_img)) >= 1){
                    
    $this->mail_type $this->mail_type 4// Attachments
                
    }
            }
            return 
    $this->mail_type;
        }


        
    /**
         * void _search_images()
         * Search all embeded images in HTML and attachments
         * @access private
         * @return void
         */
        
    function _search_images()
        {
            if (
    $this->attachments_index != 0){
                foreach(
    $this->attachments as $key => $value){
                    if (
    preg_match('/(css|image)/i'$value['type']) && preg_match('/\s(background|href|src)\s*=\s*[\"|\'](' $value['name'] . ')[\"|\'].*>/is'$this->mail_html)) {
                        
    $img_id md5($value['name']) . ".nomad@mimemail";
                        
    $this->mail_html preg_replace('/\s(background|href|src)\s*=\s*[\"|\'](' $value['name'] . ')[\"|\']/is'' \\1="cid:' $img_id '"'$this->mail_html);
                        
    $this->attachments[$key]['embedded'] = $img_id;
                        
    $this->attachments_img[] = $value['name'];
                    }
                }
            }
        }


        
    /**
         * bool _validate_mail(string mail)
         * Validate an email address
         * @access private
         * @param string mail The email address string
         * @return bool
         */
        
    function _validate_mail($mail)
        {
        
    /*    if (ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$',$mail)){
                return true;
            }
            return $this->_debug(4, $mail);*/
            
    return true;
        }


        
    /**
         * mixed _extract_email(string parse)
         * Extract all email addresses from a string. If extracted more than one
         * return an array. If extraded only one email return string. Else return false
         * @access private
         * @param string parse String with one or more email addresses
         * @return mixed array|string|false
         */
        
    function _extract_email($parse)
        {
            
    preg_match_all("/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i"$parse$matches);
            if (
    count($matches[0]) == 1){
                return 
    $matches[0][0];
            }
            elseif (!
    count($matches[0])){
                return 
    false;
            }
            else {
                return 
    $matches[0];
            }
        }


        
    /**
         * string _get_mimetype(string name)
         * Search a mime type based in it's extension filename
         * @access private
         * @param string name The file name
         * @return mixed string
         */
        
    function _get_mimetype($name)
        {
            
    $ext_array explode("."$name);
            if ((
    $last count($ext_array) - 1) != 0){
                
    $ext $ext_array[$last];
                if (isset(
    $this->mime_types[$ext]))
                    return 
    $this->mime_types[$ext];
            }
            return 
    "application/octet-stream";
        }


        
    /**
         * mixed _open_file(string file)
         * Opens a file and returns it's content
         * @access private
         * @param string file The file path
         * @return mixed string|false
         */
        
    function _open_file($file)
        {
            if((
    $fp = @fopen($file'r'))){
                
    $content fread($fpfilesize($file));
                
    fclose($fp);
                return 
    $content;
            }
            return 
    $this->_debug(5$file);
        }


        
    /**
         * bool false _debug(int msg, [string element])
         * Printa a error and returns false
         * @access private
         * @param int msg The id error
         * @param string element Optional The extra message error
         * @return bool false
         */
        
    function _debug($msg$element="")
        {
            if (
    $this->debug_status == "yes"){
                echo 
    "<br><b>Error:</b> " $this->error_msg[$msg] . $element<br>";
            }
            elseif (
    $this->debug_status == "halt"){
                die (
    "<br><b>Error:</b> " $this->error_msg[$msg] . $element<br>");
            }
            return 
    false;
        }


        
    /**
         * bool _open_smtp_conn()
         * Opens a socket connection to SMTP server
         * @access private
         * @return bool
         */
        
    function _open_smtp_conn()
        {
            if (
    $this->smtp_conn = @fsockopen ($this->smtp_host$this->smtp_port)){
                if (
    in_array($this->_get_smtp_response(), array(220250354))){
                    return 
    true;
                }
            }
            return 
    $this->_debug(6);
        }


        
    /**
         * void _close_smtp_conn()
         * Close SMTP connection
         * @access private
         * @return void
         */
        
    function _close_smtp_conn()
        {
            
    $this->_send_smtp_command("QUIT");
            @
    fclose($this->smtp_conn);
        }


        
    /**
         * bool _send_smtp_command(string command, [array number])
         * Sends a Command to SMTP server
         * @access private
         * @param string command String of Command to send
         * @param array number Optional array of accepted numbers for response
         * @return bool
         */
        
    function _send_smtp_command($command$number="")
        {
            if (@
    fwrite($this->smtp_conn$command BR)){
                
    $this->smtp_msg .= $this->smtp_log == true $command "\n" "";
                if (!empty(
    $number)){
                    if (!
    in_array($this->_get_smtp_response(), (array)$number)){
                        
    $this->_close_smtp_conn();
                        return 
    $this->_debug(7);
                    }
                }
                return 
    true;
            }
            return 
    false;
        }


        
    /**
         * int _get_smtp_response()
         * Check the id number response from SMTP server
         * @access private
         * @return int
         */
        
    function _get_smtp_response()
        {
            do {
                
    $response chop(@fgets($this->smtp_conn1024));
                
    $this->smtp_msg .= $this->smtp_log == true $response "\n" "";
            } while(
    $response{3} == "-");
            return 
    intval(substr($response,0,3));
        }


        
    /**
         * bool _smtp_send()
         * Sends the email message via SMTP
         * @access private
         * @return bool
         */
        
    function _smtp_send()
        {
            if (
    $this->_open_smtp_conn()){
                if (!
    $this->_send_smtp_command("helo {$this->smtp_host}", array(220250354))){return false;}
                if(!empty(
    $this->smtp_user) && !empty($this->smtp_pass)){
                    if (!
    $this->_send_smtp_command("EHLO {$this->smtp_host}", array(220250354))){return false;}
                    if (!
    $this->_send_smtp_command("AUTH LOGIN", array(334))){return false;}
                    if (!
    $this->_send_smtp_command(base64_encode($this->smtp_user), array(334))){return false;}
                    if (!
    $this->_send_smtp_command(base64_encode($this->smtp_pass), array(235))){return false;}
                }
                if (!
    $this->_send_smtp_command("MAIL FROM:" $this->_extract_email($this->mail_from), array(220250354))){return false;}    // FixBug: http://www.developarts.com/version_14_de_nomad_mime_mail#comment-19
                
    $all_email $this->_extract_email(implode(", ", array($this->mail_to$this->mail_cc$this->mail_bcc)));
                foreach ((array)
    $all_email as $email){
                    if (!
    $this->_send_smtp_command("RCPT TO:{$email}", array(220250354))){return false;}
                }
                if (!
    $this->_send_smtp_command("DATA", array(220250354))){return false;}
                
    $this->_send_smtp_command($this->mail_header);
                
    $this->_send_smtp_command($this->mail_body);
                if (!
    $this->_send_smtp_command(".", array(220250354))){return false;}
                
    $this->_close_smtp_conn();
                return 
    true;
            }
            return 
    false;
        }


        
    /**
         * void set_smtp_log(bool log)
         * Activate or Deactivate SMTP log messages
         * @access public
         * @param bool log True if you can log SMTP messages, false by default
         * @return void
         */
        
    function set_smtp_log($log false)
        {
            if (
    $log == true){
                
    $this->smtp_log true;
            }
            else {
                
    $this->smtp_log false;
            }
        }


        
    /**
         * string get_smtp_log()
         * Get all SMTP log
         * @access public
         * @return string
         */
        
    function get_smtp_log()
        {
            if (
    $this->smtp_log == true){
                return 
    $this->smtp_msg;
            }
            else {
                return 
    "No logs activated";
            }
        }


        
    /**
         * string get_version()
         * Return the version of this class
         * @access public
         * @return string
         */
        
    function get_version()
        {
            return 
    "1.6.1";
        }
        
        public function 
    sendMail($SendTo$MessArr)
        {    
            foreach(
    $SendTo as $Receiver)
            {
                
    $this->set_from($MessArr['frommail']);
                
    $this->set_to($Receiver);
                
    $this->set_subject($MessArr['subject']);
                
    $this->set_html($MessArr['message']);
                if (
    $this->send()){
                       
                }
            }
        }
    }


    Добавлено через 7 минут
    там поменяй charset на ту которую хочешь, для русских лучше windows-1251 КОИ8 это анахронизм на который нужно тупо забивать. А нетт вообще юникод ставь UTF-8

    А вот пример его использования

    PHP:
    // массив кому
    $EmailsTo[] = "vais@adobe.com";
    $EmailsTo[] = "petya@linux.com";
    $EmailsTo[] = "grisha@symantec.com";

    // Оформляем сообщение
    $MailArr['subject']  = "Тема";
    $MailArr['frommail'] = "bill@microsoft.com"// от кого
    $MailArr['fromname'] = "Билл Гейтс";// от кого имя
    $MailArr['message'] = "Привет от билла гейтса";
    // отправляем
    $Mailer = new Mail_gopher();
    $Mailer->sendMail($EmailsTo$MailArr);


    Добавлено через 8 минут
    Ну а как текст с заголовком из файла брать думаю сам доделаешь ;)
     
    AdeQuAte нравится это.
  7. AdeQuAte

    AdeQuAte

    Регистр.:
    23 мар 2007
    Сообщения:
    353
    Симпатии:
    45
    Не показывает ошибок. И с этим кодом тоже письмо не уходит. Может не так что-то сделал :confused:
     
  8. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    Приведи несколько строк из save.txt
     
  9. AdeQuAte

    AdeQuAte

    Регистр.:
    23 мар 2007
    Сообщения:
    353
    Симпатии:
    45
    Код:
    123@123.name-+-123@123.name-+-тема-+-текст
     
  10. anarki

    anarki Прохожие

    А какие настройки для функции mail ?
     
Статус темы:
Закрыта.