You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							319 lines
						
					
					
						
							7.2 KiB
						
					
					
				
			
		
		
	
	
							319 lines
						
					
					
						
							7.2 KiB
						
					
					
				<?php | 
						|
/** | 
						|
 * @link http://www.yiiframework.com/ | 
						|
 * @copyright Copyright (c) 2008 Yii Software LLC | 
						|
 * @license http://www.yiiframework.com/license/ | 
						|
 */ | 
						|
 | 
						|
namespace yii\swiftmailer; | 
						|
 | 
						|
use yii\mail\BaseMessage; | 
						|
 | 
						|
/** | 
						|
 * Message implements a message class based on SwiftMailer. | 
						|
 * | 
						|
 * @see http://swiftmailer.org/docs/messages.html | 
						|
 * @see Mailer | 
						|
 * | 
						|
 * @method Mailer getMailer() returns mailer instance. | 
						|
 * | 
						|
 * @property \Swift_Message $swiftMessage Swift message instance. This property is read-only. | 
						|
 * | 
						|
 * @author Paul Klimov <klimov.paul@gmail.com> | 
						|
 * @since 2.0 | 
						|
 */ | 
						|
class Message extends BaseMessage | 
						|
{ | 
						|
    /** | 
						|
     * @var \Swift_Message Swift message instance. | 
						|
     */ | 
						|
    private $_swiftMessage; | 
						|
 | 
						|
 | 
						|
    /** | 
						|
     * @return \Swift_Message Swift message instance. | 
						|
     */ | 
						|
    public function getSwiftMessage() | 
						|
    { | 
						|
        if (!is_object($this->_swiftMessage)) { | 
						|
            $this->_swiftMessage = $this->createSwiftMessage(); | 
						|
        } | 
						|
 | 
						|
        return $this->_swiftMessage; | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function getCharset() | 
						|
    { | 
						|
        return $this->getSwiftMessage()->getCharset(); | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function setCharset($charset) | 
						|
    { | 
						|
        $this->getSwiftMessage()->setCharset($charset); | 
						|
 | 
						|
        return $this; | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function getFrom() | 
						|
    { | 
						|
        return $this->getSwiftMessage()->getFrom(); | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function setFrom($from) | 
						|
    { | 
						|
        $this->getSwiftMessage()->setFrom($from); | 
						|
 | 
						|
        return $this; | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function getReplyTo() | 
						|
    { | 
						|
        return $this->getSwiftMessage()->getReplyTo(); | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function setReplyTo($replyTo) | 
						|
    { | 
						|
        $this->getSwiftMessage()->setReplyTo($replyTo); | 
						|
 | 
						|
        return $this; | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function getTo() | 
						|
    { | 
						|
        return $this->getSwiftMessage()->getTo(); | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function setTo($to) | 
						|
    { | 
						|
        $this->getSwiftMessage()->setTo($to); | 
						|
 | 
						|
        return $this; | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function getCc() | 
						|
    { | 
						|
        return $this->getSwiftMessage()->getCc(); | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function setCc($cc) | 
						|
    { | 
						|
        $this->getSwiftMessage()->setCc($cc); | 
						|
 | 
						|
        return $this; | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function getBcc() | 
						|
    { | 
						|
        return $this->getSwiftMessage()->getBcc(); | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function setBcc($bcc) | 
						|
    { | 
						|
        $this->getSwiftMessage()->setBcc($bcc); | 
						|
 | 
						|
        return $this; | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function getSubject() | 
						|
    { | 
						|
        return $this->getSwiftMessage()->getSubject(); | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function setSubject($subject) | 
						|
    { | 
						|
        $this->getSwiftMessage()->setSubject($subject); | 
						|
 | 
						|
        return $this; | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function setTextBody($text) | 
						|
    { | 
						|
        $this->setBody($text, 'text/plain'); | 
						|
 | 
						|
        return $this; | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function setHtmlBody($html) | 
						|
    { | 
						|
        $this->setBody($html, 'text/html'); | 
						|
 | 
						|
        return $this; | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * Sets the message body. | 
						|
     * If body is already set and its content type matches given one, it will | 
						|
     * be overridden, if content type miss match the multipart message will be composed. | 
						|
     * @param string $body body content. | 
						|
     * @param string $contentType body content type. | 
						|
     */ | 
						|
    protected function setBody($body, $contentType) | 
						|
    { | 
						|
        $message = $this->getSwiftMessage(); | 
						|
        $oldBody = $message->getBody(); | 
						|
        $charset = $message->getCharset(); | 
						|
        if (empty($oldBody)) { | 
						|
            $parts = $message->getChildren(); | 
						|
            $partFound = false; | 
						|
            foreach ($parts as $key => $part) { | 
						|
                if (!($part instanceof \Swift_Mime_Attachment)) { | 
						|
                    /* @var $part \Swift_Mime_MimePart */ | 
						|
                    if ($part->getContentType() == $contentType) { | 
						|
                        $charset = $part->getCharset(); | 
						|
                        unset($parts[$key]); | 
						|
                        $partFound = true; | 
						|
                        break; | 
						|
                    } | 
						|
                } | 
						|
            } | 
						|
            if ($partFound) { | 
						|
                reset($parts); | 
						|
                $message->setChildren($parts); | 
						|
                $message->addPart($body, $contentType, $charset); | 
						|
            } else { | 
						|
                $message->setBody($body, $contentType); | 
						|
            } | 
						|
        } else { | 
						|
            $oldContentType = $message->getContentType(); | 
						|
            if ($oldContentType == $contentType) { | 
						|
                $message->setBody($body, $contentType); | 
						|
            } else { | 
						|
                $message->setBody(null); | 
						|
                $message->setContentType(null); | 
						|
                $message->addPart($oldBody, $oldContentType, $charset); | 
						|
                $message->addPart($body, $contentType, $charset); | 
						|
            } | 
						|
        } | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function attach($fileName, array $options = []) | 
						|
    { | 
						|
        $attachment = \Swift_Attachment::fromPath($fileName); | 
						|
        if (!empty($options['fileName'])) { | 
						|
            $attachment->setFilename($options['fileName']); | 
						|
        } | 
						|
        if (!empty($options['contentType'])) { | 
						|
            $attachment->setContentType($options['contentType']); | 
						|
        } | 
						|
        $this->getSwiftMessage()->attach($attachment); | 
						|
 | 
						|
        return $this; | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function attachContent($content, array $options = []) | 
						|
    { | 
						|
        $attachment = \Swift_Attachment::newInstance($content); | 
						|
        if (!empty($options['fileName'])) { | 
						|
            $attachment->setFilename($options['fileName']); | 
						|
        } | 
						|
        if (!empty($options['contentType'])) { | 
						|
            $attachment->setContentType($options['contentType']); | 
						|
        } | 
						|
        $this->getSwiftMessage()->attach($attachment); | 
						|
 | 
						|
        return $this; | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function embed($fileName, array $options = []) | 
						|
    { | 
						|
        $embedFile = \Swift_EmbeddedFile::fromPath($fileName); | 
						|
        if (!empty($options['fileName'])) { | 
						|
            $embedFile->setFilename($options['fileName']); | 
						|
        } | 
						|
        if (!empty($options['contentType'])) { | 
						|
            $embedFile->setContentType($options['contentType']); | 
						|
        } | 
						|
 | 
						|
        return $this->getSwiftMessage()->embed($embedFile); | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function embedContent($content, array $options = []) | 
						|
    { | 
						|
        $embedFile = \Swift_EmbeddedFile::newInstance($content); | 
						|
        if (!empty($options['fileName'])) { | 
						|
            $embedFile->setFilename($options['fileName']); | 
						|
        } | 
						|
        if (!empty($options['contentType'])) { | 
						|
            $embedFile->setContentType($options['contentType']); | 
						|
        } | 
						|
 | 
						|
        return $this->getSwiftMessage()->embed($embedFile); | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * @inheritdoc | 
						|
     */ | 
						|
    public function toString() | 
						|
    { | 
						|
        return $this->getSwiftMessage()->toString(); | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * Creates the Swift email message instance. | 
						|
     * @return \Swift_Message email message instance. | 
						|
     */ | 
						|
    protected function createSwiftMessage() | 
						|
    { | 
						|
        return new \Swift_Message(); | 
						|
    } | 
						|
}
 | 
						|
 |