Вход Регистрация
Файл: system/core/mailer.php
Строк: 164
<?php
class cmsMailer {

    private 
$mailer;
    private 
$errorInfo;

    public function 
__construct($config false) {

        if(!
$config){
            
$config cmsConfig::getInstance();
        }

        
cmsCore::loadLib('phpmailer/class.phpmailer''PHPMailer');

        
$this->mailer = new PHPMailer();

        
$this->mailer->CharSet  'UTF-8';
        
$this->mailer->XMailer  ' ';
        
$this->mailer->Hostname ltrim(strstr($config->mail_from'@'), '@');

        
$this->mailer->setLanguage($config->language);

        
$this->initTransport($config)->
            
setFrom$config->mail_from, (!empty($config->mail_from_name) ? $config->mail_from_name '') )->
            
setBodyTextLANG_MAIL_DEFAULT_ALT );

    }

    
/**
     * Возвращает объект PHPMailer
     * @return PHPMailer
     */
    
public function callMailer() {
        return 
$this->mailer;
    }

    
/**
     * Инициализирует почтовый транспорт по настройкам
     *
     * @param object $config
     * @return cmsMailer
     */
    
public function initTransport($config){

        
// PHP mail()
        
if ($config->mail_transport == 'mail') {
            
$this->mailer->isMail();
        } else

        
// SMTP Server
        
if ($config->mail_transport == 'smtp') {

            
cmsCore::loadLib('phpmailer/class.smtp''SMTP');

            
$this->mailer->IsSMTP();
            
$this->mailer->Host          $config->mail_smtp_server;
            
$this->mailer->Port          $config->mail_smtp_port;
            
$this->mailer->SMTPAuth      = (bool)$config->mail_smtp_auth;
            
$this->mailer->SMTPKeepAlive true;
            
$this->mailer->Username      $config->mail_smtp_user;
            
$this->mailer->Password      $config->mail_smtp_pass;

            if (!empty(
$config->mail_smtp_enc)){
                
$this->mailer->SMTPSecure $config->mail_smtp_enc;
            }

        } else

        
// SendMail
        
if ($config->mail_transport == 'sendmail') {
            
$this->mailer->IsSendmail();
        }

        return 
$this;

    }

//============================================================================//
//============================================================================//

    /**
     * Добавляет заголовок к письму
     *
     * @param string $name Имя заголовка (Может быть в формате name:value, при этом параметр $value не требуется)
     * @param string $value Значение заголовка
     * @return cmsMailer
     */
    
public function addCustomHeader($name$value null) {
        
$this->mailer->addCustomHeader($name$value);
        return 
$this;
    }

    
/**
     * Устанавливает адрес отправителя
     * @param string $email
     * @param string $name
     * @return cmsMailer
     */
    
public function setFrom($email$name=''){
        
$this->mailer->SetFrom($email$name);
        return 
$this;
    }

    
/**
     * Устанавливает обратный адрес
     * @param string $email
     * @param string $name
     * @return cmsMailer
     */
    
public function setReplyTo($email$name=''){
        
$this->mailer->ClearReplyTos();
        
$this->mailer->AddReplyTo($email$name);
        return 
$this;
    }

    
/**
     * Добавляет адрес получателя
     * @param string $email
     * @param string $name
     * @return cmsMailer
     */
    
public function addTo($email$name=''){
        
$this->mailer->AddAddress($email$name);
        return 
$this;
    }

    
/**
     * Устанавливает тему письма
     * @param string $subject
     * @return cmsMailer
     */
    
public function setSubject($subject){
        
$this->mailer->Subject $subject;
        return 
$this;
    }

    
/**
     * Устанавливает HTML-тело письма
     * @param string $message
     * @param bool $is_auto_alt Создавать альтернативное текстовое тело письма, вырезанием тегов из HTML-тела
     * @return cmsMailer
     */
    
public function setBodyHTML($message$is_auto_alt true){

        
$this->mailer->MsgHTML$message );

        if (
$is_auto_alt){
            
$this->setBodyText$this->mailer->html2text($message) );
        }

        return 
$this;

    }

    
/**
     * Устанавливает текстовое тело письма
     * @param string $message
     * @return cmsMailer
     */
    
public function setBodyText($message){
        
$this->mailer->AltBody $message;
        return 
$this;
    }

//============================================================================//
//============================================================================//

    /**
     * Находит в тексте письма выражение [subject:Тема письма] и заполняет
     * тему письма
     *
     * @param string $letter_text
     * @return string
     */
    
public function parseSubject($letter_text){

        
// Парсим тему письма
        
if(preg_match('/[subject:(.+)]/iu'$letter_text$matches)){

            list(
$subj_tag$subject) = $matches;

            
$letter_text trim(str_replace($subj_tag''$letter_text));

            
$this->setSubject($subject);

        }

        return 
$letter_text;

    }

    
/**
     * Находит в тексте письма все выражения [attachment:path/to/file.ext]
     * и добавляет во вложение указанные файлы
     *
     * @param string $letter_text
     * @return string
     */
    
public function parseAttachments($letter_text){

        
// Парсим вложения
        
if(preg_match_all('/[attachment:(.+?)]/iu'$letter_text$matches)){

            
$config cmsConfig::getInstance();

            list(
$tags$files) = $matches;

            foreach(
$tags as $idx => $att_tag){

                
$letter_text trim(str_replace($att_tag''$letter_text));

                
$this->addAttachment($config->root_path $files[$idx]);

            }

        }

        return 
$letter_text;

    }

    
/**
     * Добавляет файл во вложение к письму
     * @param string $file Абсолютный путь к файлу
     * @param string $name Имя файла
     * @return cmsMailer
     */
    
public function addAttachment($file$name ''){
        
$this->mailer->AddAttachment($file$name);
        return 
$this;
    }

    
/**
     * Очищает список получателей
     * @return cmsMailer
     */
    
public function clearTo(){
        
$this->mailer->ClearAddresses();
        return 
$this;
    }

    
/**
     * Очищает список вложений
     * @return cmsMailer
     */
    
public function clearAttachments(){
        
$this->mailer->ClearAttachments();
        return 
$this;
    }

//============================================================================//
//============================================================================//

    
public function getErrorInfo(){
        return 
$this->errorInfo;
    }

    
/**
     * Отправляет письмо
     * @return bool Результат отправки
     */
    
public function send(){
        
$result $this->mailer->Send();
        if (!
$result) {
            
$this->errorInfo $this->mailer->ErrorInfo;
        }
        return 
$result;
    }

}
Онлайн: 0
Реклама