Вход Регистрация
Файл: protected/extensions/yii-mail/vendors/swiftMailer/classes/Swift/Mime/SimpleMessage.php
Строк: 460
<?php

/*
 * This file is part of SwiftMailer.
 * (c) 2004-2009 Chris Corbyn
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

//@require 'Swift/Mime/Message.php';
//@require 'Swift/Mime/MimePart.php';
//@require 'Swift/Mime/MimeEntity.php';
//@require 'Swift/Mime/HeaderSet.php';
//@require 'Swift/Mime/ContentEncoder.php';

/**
 * The default email message class.
 * @package Swift
 * @subpackage Mime
 * @author Chris Corbyn
 */
class Swift_Mime_SimpleMessage extends Swift_Mime_MimePart
  
implements Swift_Mime_Message
{
  
  
/**
   * Create a new SimpleMessage with $headers, $encoder and $cache.
   * @param Swift_Mime_HeaderSet $headers
   * @param Swift_Mime_ContentEncoder $encoder
   * @param Swift_KeyCache $cache
   * @param string $charset
   */
  
public function __construct(Swift_Mime_HeaderSet $headers,
    
Swift_Mime_ContentEncoder $encoderSwift_KeyCache $cache$charset null)
  {
    
parent::__construct($headers$encoder$cache$charset);
    
$this->getHeaders()->defineOrdering(array(
      
'Return-Path',
      
'Sender',
      
'Message-ID',
      
'Date',
      
'Subject',
      
'From',
      
'Reply-To',
      
'To',
      
'Cc',
      
'Bcc',
      
'MIME-Version',
      
'Content-Type',
      
'Content-Transfer-Encoding'
      
));
    
$this->getHeaders()->setAlwaysDisplayed(
      array(
'Date''Message-ID''From')
      );
    
$this->getHeaders()->addTextHeader('MIME-Version''1.0');
    
$this->setDate(time());
    
$this->setId($this->getId());
    
$this->getHeaders()->addMailboxHeader('From');
  }
  
  
/**
   * Always returns {@link LEVEL_TOP} for a message instance.
   * @return int
   */
  
public function getNestingLevel()
  {
    return 
self::LEVEL_TOP;
  }
  
  
/**
   * Set the subject of this message.
   * @param string $subject
   */
  
public function setSubject($subject)
  {
    if (!
$this->_setHeaderFieldModel('Subject'$subject))
    {
      
$this->getHeaders()->addTextHeader('Subject'$subject);
    }
    return 
$this;
  }
  
  
/**
   * Get the subject of this message.
   * @return string
   */
  
public function getSubject()
  {
    return 
$this->_getHeaderFieldModel('Subject');
  }
  
  
/**
   * Set the date at which this message was created.
   * @param int $date
   */
  
public function setDate($date)
  {
    if (!
$this->_setHeaderFieldModel('Date'$date))
    {
      
$this->getHeaders()->addDateHeader('Date'$date);
    }
    return 
$this;
  }
  
  
/**
   * Get the date at which this message was created.
   * @return int
   */
  
public function getDate()
  {
    return 
$this->_getHeaderFieldModel('Date');
  }
  
  
/**
   * Set the return-path (the bounce address) of this message.
   * @param string $address
   */
  
public function setReturnPath($address)
  {
    if (!
$this->_setHeaderFieldModel('Return-Path'$address))
    {
      
$this->getHeaders()->addPathHeader('Return-Path'$address);
    }
    return 
$this;
  }
  
  
/**
   * Get the return-path (bounce address) of this message.
   * @return string
   */
  
public function getReturnPath()
  {
    return 
$this->_getHeaderFieldModel('Return-Path');
  }
  
  
/**
   * Set the sender of this message.
   * This does not override the From field, but it has a higher significance.
   * @param string $sender
   * @param string $name optional
   */
  
public function setSender($address$name null)
  {
    if (!
is_array($address) && isset($name))
    {
      
$address = array($address => $name);
    }
    
    if (!
$this->_setHeaderFieldModel('Sender', (array) $address))
    {
      
$this->getHeaders()->addMailboxHeader('Sender', (array) $address);
    }
    return 
$this;
  }
  
  
/**
   * Get the sender of this message.
   * @return string
   */
  
public function getSender()
  {
    return 
$this->_getHeaderFieldModel('Sender');
  }
  
  
/**
   * Add a From: address to this message.
   * 
   * If $name is passed this name will be associated with the address.
   * 
   * @param string $address
   * @param string $name optional
   */
  
public function addFrom($address$name null)
  {
    
$current $this->getFrom();
    
$current[$address] = $name;
    return 
$this->setFrom($current);
  }
  
  
/**
   * Set the from address of this message.
   * 
   * You may pass an array of addresses if this message is from multiple people.
   * 
   * If $name is passed and the first parameter is a string, this name will be
   * associated with the address.
   * 
   * @param string $addresses
   * @param string $name optional
   */
  
public function setFrom($addresses$name null)
  {
    if (!
is_array($addresses) && isset($name))
    {
      
$addresses = array($addresses => $name);
    }
    
    if (!
$this->_setHeaderFieldModel('From', (array) $addresses))
    {
      
$this->getHeaders()->addMailboxHeader('From', (array) $addresses);
    }
    return 
$this;
  }
  
  
/**
   * Get the from address of this message.
   * 
   * @return string
   */
  
public function getFrom()
  {
    return 
$this->_getHeaderFieldModel('From');
  }
  
  
/**
   * Add a Reply-To: address to this message.
   * 
   * If $name is passed this name will be associated with the address.
   * 
   * @param string $address
   * @param string $name optional
   */
  
public function addReplyTo($address$name null)
  {
    
$current $this->getReplyTo();
    
$current[$address] = $name;
    return 
$this->setReplyTo($current);
  }
  
  
/**
   * Set the reply-to address of this message.
   * 
   * You may pass an array of addresses if replies will go to multiple people.
   * 
   * If $name is passed and the first parameter is a string, this name will be
   * associated with the address.
   *
   * @param string $addresses
   * @param string $name optional
   */
  
public function setReplyTo($addresses$name null)
  {
    if (!
is_array($addresses) && isset($name))
    {
      
$addresses = array($addresses => $name);
    }
    
    if (!
$this->_setHeaderFieldModel('Reply-To', (array) $addresses))
    {
      
$this->getHeaders()->addMailboxHeader('Reply-To', (array) $addresses);
    }
    return 
$this;
  }
  
  
/**
   * Get the reply-to address of this message.
   * 
   * @return string
   */
  
public function getReplyTo()
  {
    return 
$this->_getHeaderFieldModel('Reply-To');
  }
  
  
/**
   * Add a To: address to this message.
   * 
   * If $name is passed this name will be associated with the address.
   * 
   * @param string $address
   * @param string $name optional
   */
  
public function addTo($address$name null)
  {
    
$current $this->getTo();
    
$current[$address] = $name;
    return 
$this->setTo($current);
  }
  
  
/**
   * Set the to addresses of this message.
   * 
   * If multiple recipients will receive the message and array should be used.
   * 
   * If $name is passed and the first parameter is a string, this name will be
   * associated with the address.
   * 
   * @param array $addresses
   * @param string $name optional
   */
  
public function setTo($addresses$name null)
  {
    if (!
is_array($addresses) && isset($name))
    {
      
$addresses = array($addresses => $name);
    }
    
    if (!
$this->_setHeaderFieldModel('To', (array) $addresses))
    {
      
$this->getHeaders()->addMailboxHeader('To', (array) $addresses);
    }
    return 
$this;
  }
  
  
/**
   * Get the To addresses of this message.
   * 
   * @return array
   */
  
public function getTo()
  {
    return 
$this->_getHeaderFieldModel('To');
  }
  
  
/**
   * Add a Cc: address to this message.
   * 
   * If $name is passed this name will be associated with the address.
   * 
   * @param string $address
   * @param string $name optional
   */
  
public function addCc($address$name null)
  {
    
$current $this->getCc();
    
$current[$address] = $name;
    return 
$this->setCc($current);
  }
  
  
/**
   * Set the Cc addresses of this message.
   * 
   * If $name is passed and the first parameter is a string, this name will be
   * associated with the address.
   *
   * @param array $addresses
   * @param string $name optional
   */
  
public function setCc($addresses$name null)
  {
    if (!
is_array($addresses) && isset($name))
    {
      
$addresses = array($addresses => $name);
    }
    
    if (!
$this->_setHeaderFieldModel('Cc', (array) $addresses))
    {
      
$this->getHeaders()->addMailboxHeader('Cc', (array) $addresses);
    }
    return 
$this;
  }
  
  
/**
   * Get the Cc address of this message.
   * 
   * @return array
   */
  
public function getCc()
  {
    return 
$this->_getHeaderFieldModel('Cc');
  }
  
  
/**
   * Add a Bcc: address to this message.
   * 
   * If $name is passed this name will be associated with the address.
   * 
   * @param string $address
   * @param string $name optional
   */
  
public function addBcc($address$name null)
  {
    
$current $this->getBcc();
    
$current[$address] = $name;
    return 
$this->setBcc($current);
  }
  
  
/**
   * Set the Bcc addresses of this message.
   * 
   * If $name is passed and the first parameter is a string, this name will be
   * associated with the address.
   * 
   * @param array $addresses
   * @param string $name optional
   */
  
public function setBcc($addresses$name null)
  {
    if (!
is_array($addresses) && isset($name))
    {
      
$addresses = array($addresses => $name);
    }
    
    if (!
$this->_setHeaderFieldModel('Bcc', (array) $addresses))
    {
      
$this->getHeaders()->addMailboxHeader('Bcc', (array) $addresses);
    }
    return 
$this;
  }
  
  
/**
   * Get the Bcc addresses of this message.
   * 
   * @return array
   */
  
public function getBcc()
  {
    return 
$this->_getHeaderFieldModel('Bcc');
  }
  
  
/**
   * Set the priority of this message.
   * The value is an integer where 1 is the highest priority and 5 is the lowest.
   * @param int $priority
   */
  
public function setPriority($priority)
  {
    
$priorityMap = array(
      
=> 'Highest',
      
=> 'High',
      
=> 'Normal',
      
=> 'Low',
      
=> 'Lowest'
      
);
    
$pMapKeys array_keys($priorityMap);
    if (
$priority max($pMapKeys))
    {
      
$priority max($pMapKeys);
    }
    elseif (
$priority min($pMapKeys))
    {
      
$priority min($pMapKeys);
    }
    if (!
$this->_setHeaderFieldModel('X-Priority',
      
sprintf('%d (%s)'$priority$priorityMap[$priority])))
    {
      
$this->getHeaders()->addTextHeader('X-Priority',
        
sprintf('%d (%s)'$priority$priorityMap[$priority]));
    }
    return 
$this;
  }
  
  
/**
   * Get the priority of this message.
   * The returned value is an integer where 1 is the highest priority and 5
   * is the lowest.
   * @return int
   */
  
public function getPriority()
  {
    list(
$priority) = sscanf($this->_getHeaderFieldModel('X-Priority'),
      
'%[1-5]'
      
);
    return isset(
$priority) ? $priority 3;
  }
  
  
/**
   * Ask for a delivery receipt from the recipient to be sent to $addresses
   * @param array $addresses
   */
  
public function setReadReceiptTo($addresses)
  {
    if (!
$this->_setHeaderFieldModel('Disposition-Notification-To'$addresses))
    {
      
$this->getHeaders()
        ->
addMailboxHeader('Disposition-Notification-To'$addresses);
    }
    return 
$this;
  }
  
  
/**
   * Get the addresses to which a read-receipt will be sent.
   * @return string
   */
  
public function getReadReceiptTo()
  {
    return 
$this->_getHeaderFieldModel('Disposition-Notification-To');
  }
  
  
/**
   * Attach a {@link Swift_Mime_MimeEntity} such as an Attachment or MimePart.
   * @param Swift_Mime_MimeEntity $entity
   */
  
public function attach(Swift_Mime_MimeEntity $entity)
  {
    
$this->setChildren(array_merge($this->getChildren(), array($entity)));
    return 
$this;
  }
  
  
/**
   * Remove an already attached entity.
   * @param Swift_Mime_MimeEntity $entity
   */
  
public function detach(Swift_Mime_MimeEntity $entity)
  {
    
$newChildren = array();
    foreach (
$this->getChildren() as $child)
    {
      if (
$entity !== $child)
      {
        
$newChildren[] = $child;
      }
    }
    
$this->setChildren($newChildren);
    return 
$this;
  }
  
  
/**
   * Attach a {@link Swift_Mime_MimeEntity} and return it's CID source.
   * This method should be used when embedding images or other data in a message.
   * @param Swift_Mime_MimeEntity $entity
   * @return string
   */
  
public function embed(Swift_Mime_MimeEntity $entity)
  {
    
$this->attach($entity);
    return 
'cid:' $entity->getId();
  }
  
  
/**
   * Get this message as a complete string.
   * @return string
   */
  
public function toString()
  {
    if (
count($children $this->getChildren()) > && $this->getBody() != '')
    {
      
$this->setChildren(array_merge(array($this->_becomeMimePart()), $children));
      
$string parent::toString();
      
$this->setChildren($children);
    }
    else
    {
      
$string parent::toString();
    }
    return 
$string;
  }
  
  
/**
   * Returns a string representation of this object.
   *
   * @return string
   *
   * @see toString()
   */
  
public function __toString()
  {
    return 
$this->toString();
  }
  
  
/**
   * Write this message to a {@link Swift_InputByteStream}.
   * @param Swift_InputByteStream $is
   */
  
public function toByteStream(Swift_InputByteStream $is)
  {
    if (
count($children $this->getChildren()) > && $this->getBody() != '')
    {
      
$this->setChildren(array_merge(array($this->_becomeMimePart()), $children));
      
parent::toByteStream($is);
      
$this->setChildren($children);
    }
    else
    {
      
parent::toByteStream($is);
    }
  }
  
  
// -- Protected methods
  
  /** @see Swift_Mime_SimpleMimeEntity::_getIdField() */
  
protected function _getIdField()
  {
    return 
'Message-ID';
  }
  
  
// -- Private methods
  
  /** Turn the body of this message into a child of itself if needed */
  
private function _becomeMimePart()
  {
    
$part = new parent($this->getHeaders()->newInstance(), $this->getEncoder(),
      
$this->_getCache(), $this->_userCharset
      
);
    
$part->setContentType($this->_userContentType);
    
$part->setBody($this->getBody());
    
$part->setFormat($this->_userFormat);
    
$part->setDelSp($this->_userDelSp);
    
$part->_setNestingLevel($this->_getTopNestingLevel());
    return 
$part;
  }
  
  
/** Get the highest nesting level nested inside this message */
  
private function _getTopNestingLevel()
  {
    
$highestLevel $this->getNestingLevel();
    foreach (
$this->getChildren() as $child)
    {
      
$childLevel $child->getNestingLevel();
      if (
$highestLevel $childLevel)
      {
        
$highestLevel $childLevel;
      }
    }
    return 
$highestLevel;
  }
  
}
Онлайн: 1
Реклама