Вход Регистрация
Файл: 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($fd, filesize($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->subject, preg_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->subject, preg_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($fd, filesize($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($stmp, 0, 76) . "rn";
                
$stmp = substr($stmp, 76);
                
$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($fd, filesize($sourcefile));
          
$encoded = $this->myChunkSplit(base64_encode($contents));
          
fclose($fd);
        }

        return 
$encoded;
    }

} 

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