Вход Регистрация
Файл: silawar.ru/protected/extensions/email/Email.php
Строк: 150
<?php
/**
 * Email class file.
 * 
 * @author Jonah Turnquist <poppitypop@gmail.com>
 * @link http://php-thoughts.cubedwater.com/
 * @version 1.0
 */
class Email extends CApplicationComponent {
    
/**
     * @var string Type of email.  Options include "text/html" and "text/plain"
     */
    
public $type 'text/html';
    
/**
     * @var string Receiver, or receivers of the mail.
     */
    
public $to null;
    
    
/**
     * @var string Email subject
     */
    
public $subject '';
    
    
/**
     * @var string from address
     */
    
public $from null;
    
    
/**
     * @var string Reply-to address
     */
    
public $replyTo 'support@mland.mobi';
    
    
/**
     * @var string Return-path address
     */
    
public $returnPath 'support@mland.mobi';
    
    
/**
     * @var string Carbon Copy
     *
     * List of email's that should receive a copy of the email.
     * The Recipient WILL be able to see this list
     */
    
public $cc null;

    
/**
     * @var string Blind Carbon Copy
     *
     * List of email's that should receive a copy of the email.
     * The Recipient WILL NOT be able to see this list
     */
    
public $bcc null;
    
    
/**
     * @var string Main content
     */
    
public $message '';
    
    
/**
     * @var string Delivery type.  If set to 'php' it will use php's mail() function, and if set to 'debug'
     * it will not actually send it but output it to the screen
     */
    
public $delivery 'php';
    
    
/**
     * @var string language to encode the message in (eg "Japanese", "ja", "English", "en" and "uni" (UTF-8))
     */
    
public $language'uni';
    
    
/**
     * @var string the content-type of the email
     */
    
public $contentType'utf-8';
    
    
/**
     * @var string The view to use as the content of the email, as an alternative to setting $this->message.
     * Must be located in application.views.email directory.  This email object is availiable within the view
     * through $email, thus letting you define things such as the subject within the view (helps maintain 
     * seperation of logic and output).
     */
    
public $view null;
    
    
/**
     * @var array Variable to be sent to the view.
     */
    
public $viewVars null;    
    
    
/**
     * @var string The layout for the view to be imbedded in. Must be located in
     * application.views.email.layouts directory.  Not required even if you are using a view
     */
    
public $layout null;
    
    
/**
     * @var integer line length of email as per RFC2822 Section 2.1.1
     */
    
public $lineLength 999999999999999999999999999;
    
    public function 
__construct() {
        
Yii::setPathOfAlias('email'dirname(__FILE__).'/views');
    }
    
    
/**
     * Sends email.
     * @param mixed the content of the email, or variables to be sent to the view.
     * If not set, it will use $this->message instead for the content of the email
     */
    
public function send($arg1=null) {
        if (
$this->view !== null) {
            if (
$arg1 == null)
                
$vars $this->viewVars;
            else
                
$vars $arg1;
            
            
$view Yii::app()->controller->renderPartial('application.views.email.'.$this->viewarray_merge($vars, array('email'=>$this)), true);
            if (
$this->layout === null) {
                
$message $view;
            } else {
                
$message Yii::app()->controller->renderPartial('application.views.email.layouts.'.$this->layout, array('content'=>$view), true);
            }
        } else {
            if (
$arg1 === null) {
                
$message $this->message;
            } else {
                
$message $arg1;
            }
        }

        
//process 'to' attribute
        
$to $this->processAddresses($this->to);
        return 
$this->mail($to$this->subject$message);
    }
    
    private function 
mail($to$subject$message) {
        switch (
$this->delivery) {
            case 
'php':
                
$message wordwrap($message$this->lineLength);
                                
$message '<html><body>'.$message.'</body></html>';
                                
$subject '=?UTF-8?B?'.base64_encode($subject).'?=';
                return 
mail($to$subject$messageimplode("rn"$this->createHeaders()));
            case 
'debug':
                
$debug Yii::app()->controller->renderPartial('email.debug',
                        
array_merge(compact('to''subject''message'), array('headers'=>$this->createHeaders())),
                        
true);
                
Yii::app()->user->setFlash('email'$debug);
                break;
        }
    }
    private function 
createHeaders() {
        
$headers = array();
        
                if (
ereg("(.*)<(.*)>"$this->from$regs)) {
                   
// There is a name for the expeditor !
                   
$this->from '=?UTF-8?B?'.base64_encode($regs[1]).'?= <'.$regs[2].'>';
                } else {
                   
// Nothing to do, the from is directly the email !
                   
$this->from $this->from;
                }

        
//maps class variable names to header names
        
$map = array(
            
'from' => 'From',
            
'cc' => 'Cc',
            
'bcc' => 'Bcc',
            
'replyTo' => 'Reply-To',
            
'returnPath' => 'Return-Path',
        );
        foreach (
$map as $key => $value) {
            if (isset(
$this->$key))
                
$headers[] = "$value{$this->processAddresses($this->$key)}";
        }
        
$headers[] = "Content-Type: {$this->type}; charset=".$this->contentType;
        
$headers[] = "MIME-Version: 1.0";
        
        return 
$headers;
    }
    private function 
processAddresses($addresses) {
        return (
is_array($addresses)) ? implode(', '$addresses) : $addresses;
    }
}
Онлайн: 1
Реклама