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.
		
		
		
		
		
			
		
			
				
					
					
						
							237 lines
						
					
					
						
							5.0 KiB
						
					
					
				
			
		
		
	
	
							237 lines
						
					
					
						
							5.0 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; | |
|  | |
| /** | |
|  * Email message based on SwiftMailer library. | |
|  * | |
|  * @see http://swiftmailer.org/docs/messages.html | |
|  * @see \yii\swiftmailer\Mailer | |
|  * | |
|  * @method Mailer getMailer() returns mailer instance. | |
|  * @property \Swift_Message $swiftMessage vendor message instance. | |
|  * | |
|  * @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 charset($charset) | |
| 	{ | |
| 		$this->getSwiftMessage()->setCharset($charset); | |
| 		return $this; | |
| 	} | |
|  | |
| 	/** | |
| 	 * @inheritdoc | |
| 	 */ | |
| 	public function from($from) | |
| 	{ | |
| 		$this->getSwiftMessage()->setFrom($from); | |
| 		$this->getSwiftMessage()->setReplyTo($from); | |
| 		return $this; | |
| 	} | |
|  | |
| 	/** | |
| 	 * @inheritdoc | |
| 	 */ | |
| 	public function to($to) | |
| 	{ | |
| 		$this->getSwiftMessage()->setTo($to); | |
| 		return $this; | |
| 	} | |
|  | |
| 	/** | |
| 	 * @inheritdoc | |
| 	 */ | |
| 	public function cc($cc) | |
| 	{ | |
| 		$this->getSwiftMessage()->setCc($cc); | |
| 		return $this; | |
| 	} | |
|  | |
| 	/** | |
| 	 * @inheritdoc | |
| 	 */ | |
| 	public function bcc($bcc) | |
| 	{ | |
| 		$this->getSwiftMessage()->setBcc($bcc); | |
| 		return $this; | |
| 	} | |
|  | |
| 	/** | |
| 	 * @inheritdoc | |
| 	 */ | |
| 	public function subject($subject) | |
| 	{ | |
| 		$this->getSwiftMessage()->setSubject($subject); | |
| 		return $this; | |
| 	} | |
|  | |
| 	/** | |
| 	 * @inheritdoc | |
| 	 */ | |
| 	public function textBody($text) | |
| 	{ | |
| 		$this->setBody($text, 'text/plain'); | |
| 		return $this; | |
| 	} | |
|  | |
| 	/** | |
| 	 * @inheritdoc | |
| 	 */ | |
| 	public function htmlBody($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(); | |
| 		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) { | |
| 						unset($parts[$key]); | |
| 						$partFound = true; | |
| 						break; | |
| 					} | |
| 				} | |
| 			} | |
| 			if ($partFound) { | |
| 				reset($parts); | |
| 				$message->setChildren($parts); | |
| 				$message->addPart($body, $contentType); | |
| 			} 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); | |
| 				$message->addPart($body, $contentType); | |
| 			} | |
| 		} | |
| 	} | |
|  | |
| 	/** | |
| 	 * @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(); | |
| 	} | |
| } |