Вход Регистрация
Файл: includes/emailer.php
Строк: 259
<?php
/***************************************************************************
                                emailer.php
                             -------------------
 *      Разработка: phpBB Group.
 *      Оптимизация под WAP: Гутник Игорь ( чел ).
 *          2009 год
 ***************************************************************************/

class emailer
{
    var 
$msg$subject$extra_headers;
    var 
$addresses$reply_to$from;
    var 
$use_smtp;

    var 
$tpl_msg = array();

    function 
emailer($use_smtp)
    {
        
$this->reset();
        
$this->use_smtp $use_smtp;
        
$this->reply_to $this->from '';
    }

    function 
reset()
    {
        
$this->addresses = array();
        
$this->vars $this->msg $this->extra_headers '';
    }

    function 
email_address($address)
    {
        
$this->addresses['to'] = trim($address);
    }

    function 
cc($address)
    {
        
$this->addresses['cc'][] = trim($address);
    }

    function 
bcc($address)
    {
        
$this->addresses['bcc'][] = trim($address);
    }

    function 
replyto($address)
    {
        
$this->reply_to trim($address);
    }

    function 
from($address)
    {
        
$this->from trim($address);
    }

    function 
set_subject($subject '')
    {
        
$subject u2w($subject);
        
$this->subject trim(preg_replace('#[nr]+#s'''$subject));
    }

    function 
extra_headers($headers)
    {
        
$this->extra_headers .= trim($headers) . "n";
    }

    function 
use_template($template_file$template_lang '')
    {
        global 
$board_config$phpbb_root_path;

        if (
trim($template_file) == '')
        {
            
message_die(GENERAL_ERROR'No template file set'''__LINE____FILE__);
        }

        if (
trim($template_lang) == '')
        {
            
$template_lang $board_config['default_lang'];
        }

        if (empty(
$this->tpl_msg[$template_lang $template_file]))
        {
            
$tpl_file $phpbb_root_path 'language/lang_' $template_lang '/email/' $template_file '.tpl';

            if (!@
file_exists(@phpbb_realpath($tpl_file)))
            {
                
$tpl_file $phpbb_root_path 'language/lang_' $board_config['default_lang'] . '/email/' $template_file '.tpl';

                if (!@
file_exists(@phpbb_realpath($tpl_file)))
                {
                    
message_die(GENERAL_ERROR'Could not find email template file :: ' $template_file''__LINE____FILE__);
                }
            }

            if (!(
$fd = @fopen($tpl_file'r')))
            {
                
message_die(GENERAL_ERROR'Failed opening template file :: ' $tpl_file''__LINE____FILE__);
            }

            
$this->tpl_msg[$template_lang $template_file] = fread($fdfilesize($tpl_file));
            
fclose($fd);
        }

        
$this->msg $this->tpl_msg[$template_lang $template_file];

        return 
true;
    }

    function 
assign_vars($vars)
    {
        
$this->vars = (empty($this->vars)) ? $vars $this->vars $vars;
    }

    function 
send()
    {
        global 
$board_config$lang$phpEx$phpbb_root_path$db;

        
$this->msg str_replace ("'""'"$this->msg);
        
$this->msg preg_replace('#{([a-z0-9-_]*?)}#is'"' . $\1 . '"$this->msg);

        
reset ($this->vars);
        while (list(
$key$val) = each($this->vars)) 
        {
            $
$key u2w($val);
        }

        eval(
"$this->msg = '$this->msg';");

        
reset ($this->vars);
        while (list(
$key$val) = each($this->vars)) 
        {
            unset($
$key);
        }

        
$drop_header '';
        
$match = array();
        if (
preg_match('#^(Subject:(.*?))$#m'$this->msg$match))
        {
            
$this->subject = (trim($match[2]) != '') ? trim($match[2]) : (($this->subject != '') ? $this->subject 'No Subject');
            
$drop_header .= '[rn]*?' preg_quote($match[1], '#');
        }
        else
        {
            
$this->subject = (($this->subject != '') ? $this->subject 'No Subject');
        }

        if (
preg_match('#^(Charset:(.*?))$#m'$this->msg$match))
        {
            
$this->encoding = (trim($match[2]) != '') ? trim($match[2]) : trim($lang['ENCODING']);
            
$drop_header .= '[rn]*?' preg_quote($match[1], '#');
        }
        else
        {
            
$this->encoding trim($lang['ENCODING']);
        }

        if (
$drop_header != '')
        {
            
$this->msg trim(preg_replace('#' $drop_header '#s'''$this->msg));
        }

        
$to $this->addresses['to'];

        
$cc = (count($this->addresses['cc'])) ? implode(', '$this->addresses['cc']) : '';
        
$bcc = (count($this->addresses['bcc'])) ? implode(', '$this->addresses['bcc']) : '';

        
$this->extra_headers = (($this->reply_to != '') ? "Reply-to: $this->reply_ton'') . (($this->from != '') ? "From: $this->fromn"From: " $board_config['board_email'] . "n") . "Return-Path: " $board_config['board_email'] . "nMessage-ID: <" md5(uniqid(time())) . "@" $board_config['server_name'] . ">nMIME-Version: 1.0nContent-type: text/plain; charset=" $this->encoding "nContent-transfer-encoding: 8bitnDate: " date('r'time()) . "nX-Priority: 3nX-MSMail-Priority: NormalnX-Mailer: PHPnX-MimeOLE: Produced By phpBB2n" $this->extra_headers . (($cc != '') ? "Cc: $ccn'')  . (($bcc != '') ? "Bcc: $bccn''); 

        if ( 
$this->use_smtp )
        {
            if ( !
defined('SMTP_INCLUDED') ) 
            {
                include(
$phpbb_root_path 'includes/smtp.' $phpEx);
            }

            
$result smtpmail($to$this->subject$this->msg$this->extra_headers);
        }
        else
        {
            
$empty_to_header = ($to == '') ? TRUE FALSE;
            
$to = ($to == '') ? (($board_config['sendmail_fix']) ? ' ' 'Undisclosed-recipients:;') : $to;
    
            
$result = @mail($to$this->subjectpreg_replace("#(?<!r)n#s""n"$this->msg), $this->extra_headers);
            
            if (!
$result && !$board_config['sendmail_fix'] && $empty_to_header)
            {
                
$to ' ';

                
$sql "UPDATE " CONFIG_TABLE 
                    SET config_value = '1'
                    WHERE config_name = 'sendmail_fix'"
;
                if (!
$db->sql_query($sql))
                {
                    
message_die(GENERAL_ERROR'Unable to update config table'''__LINE____FILE__$sql);
                }

                
$board_config['sendmail_fix'] = 1;
                
$result = @mail($to$this->subjectpreg_replace("#(?<!r)n#s""n"$this->msg), $this->extra_headers);
            }
        }

        if (!
$result)
        {
            
message_die(GENERAL_ERROR'Failed sending email :: ' . (($this->use_smtp) ? 'SMTP' 'PHP') . ' :: ' $result''__LINE____FILE__);
        }

        return 
true;
    }

    function 
encode($str)
    {
        if (
$this->encoding == '')
        {
            return 
$str;
        }

        
$end "?=";
        
$start "=?$this->encoding?B?";
        
$spacer "$endrn $start";
        
$length 75 strlen($start) - strlen($end);
        
$length floor($length 2) * 2;
        
$str chunk_split(base64_encode($str), $length$spacer);
        
$str preg_replace('#' preg_quote($spacer'#') . '$#'''$str);

        return 
$start $str $end;
    }

    function 
attachFile($filename$mimetype "application/octet-stream"$szFromAddress$szFilenameToDisplay)
    {
        global 
$lang;
        
$mime_boundary "--==================_846811060==_";

        
$this->msg '--' $mime_boundary "nContent-Type: text/plain;ntcharset="" . $lang['ENCODING'] . ""nn" $this->msg;

        if (
$mime_filename)
        {
            
$filename $mime_filename;
            
$encoded $this->encode_file($filename);
        }

        
$fd fopen($filename"r");
        
$contents fread($fdfilesize($filename));

        
$this->mimeOut "--" $mime_boundary "n";
        
$this->mimeOut .= "Content-Type: " $mimetype ";ntname="$szFilenameToDisplay"n";
        
$this->mimeOut .= "Content-Transfer-Encoding: quoted-printablen";
        
$this->mimeOut .= "Content-Disposition: attachment;ntfilename="$szFilenameToDisplay"nn";

        if ( 
$mimetype == "message/rfc822" )
        {
            
$this->mimeOut .= "From: ".$szFromAddress."n";
            
$this->mimeOut .= "To: ".$this->emailAddress."n";
            
$this->mimeOut .= "Date: ".date("D, d M Y H:i:s") . " UTn";
            
$this->mimeOut .= "Reply-To:".$szFromAddress."n";
            
$this->mimeOut .= "Subject: ".$this->mailSubject."n";
            
$this->mimeOut .= "X-Mailer: PHP/".phpversion()."n";
            
$this->mimeOut .= "MIME-Version: 1.0n";
        }

        
$this->mimeOut .= $contents."n";
        
$this->mimeOut .= "--" $mime_boundary "--" "n";

        return 
$out;
    }

    function 
getMimeHeaders($filename$mime_filename="")
    {
        
$mime_boundary "--==================_846811060==_";

        if (
$mime_filename)
        {
            
$filename $mime_filename;
        }

        
$out "MIME-Version: 1.0n";
        
$out .= "Content-Type: multipart/mixed;ntboundary="$mime_boundary"nn";
        
$out .= "This message is in MIME format. Since your mail reader does not understandn";
        
$out .= "this format, some or all of this message may not be legible.";

        return 
$out;
    }

    function 
myChunkSplit($str)
    {
        
$stmp $str;
        
$len strlen($stmp);
        
$out "";

        while (
$len 0)
        {
            if (
$len >= 76)
            {
                
$out .= substr($stmp076) . "rn";
                
$stmp substr($stmp76);
                
$len $len 76;
            }
            else
            {
                
$out .= $stmp "rn";
                
$stmp "";
                
$len 0;
            }
        }
        return 
$out;
    }

    function 
encode_file($sourcefile)
    {
        if (
is_readable(phpbb_realpath($sourcefile)))
        {
            
$fd fopen($sourcefile"r");
            
$contents fread($fdfilesize($sourcefile));
          
$encoded $this->myChunkSplit(base64_encode($contents));
          
fclose($fd);
        }

        return 
$encoded;
    }



?>
Онлайн: 0
Реклама