Message.php 5.82 KB
Newer Older
1 2 3 4 5 6 7
<?php
/**
 * @link http://www.yiiframework.com/
 * @copyright Copyright (c) 2008 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

Paul Klimov committed
8
namespace yii\swiftmailer;
9

10
use yii\mail\BaseMessage;
11 12

/**
Qiang Xue committed
13
 * Message implements a message class based on SwiftMailer.
14 15
 *
 * @see http://swiftmailer.org/docs/messages.html
Qiang Xue committed
16
 * @see Mailer
17
 *
Paul Klimov committed
18
 * @method Mailer getMailer() returns mailer instance.
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
 * @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)) {
37
			$this->_swiftMessage = $this->createSwiftMessage();
38 39 40 41
		}
		return $this->_swiftMessage;
	}

42 43 44
	/**
	 * @inheritdoc
	 */
Qiang Xue committed
45 46
	public function getCharset()
	{
47
		return $this->getSwiftMessage()->getCharset();
Qiang Xue committed
48 49 50 51 52 53
	}

	/**
	 * @inheritdoc
	 */
	public function setCharset($charset)
54 55
	{
		$this->getSwiftMessage()->setCharset($charset);
56
		return $this;
57 58
	}

59
	/**
60
	 * @inheritdoc
61
	 */
Qiang Xue committed
62 63
	public function getFrom()
	{
64
		return $this->getSwiftMessage()->getFrom();
Qiang Xue committed
65 66 67 68 69 70
	}

	/**
	 * @inheritdoc
	 */
	public function setFrom($from)
71
	{
72
		$this->getSwiftMessage()->setFrom($from);
73
		return $this;
74 75 76
	}

	/**
77
	 * @inheritdoc
78
	 */
Qiang Xue committed
79 80
	public function getReplyTo()
	{
81
		return $this->getSwiftMessage()->getReplyTo();
Qiang Xue committed
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
	}

	/**
	 * @inheritdoc
	 */
	public function setReplyTo($replyTo)
	{
		$this->getSwiftMessage()->setReplyTo($replyTo);
		return $this;
	}

	/**
	 * @inheritdoc
	 */
	public function getTo()
	{
98
		return $this->getSwiftMessage()->getTo();
Qiang Xue committed
99 100 101 102 103 104
	}

	/**
	 * @inheritdoc
	 */
	public function setTo($to)
105
	{
106
		$this->getSwiftMessage()->setTo($to);
107
		return $this;
108 109 110 111 112
	}

	/**
	 * @inheritdoc
	 */
Qiang Xue committed
113 114
	public function getCc()
	{
115
		return $this->getSwiftMessage()->getCc();
Qiang Xue committed
116 117 118 119 120 121
	}

	/**
	 * @inheritdoc
	 */
	public function setCc($cc)
122 123
	{
		$this->getSwiftMessage()->setCc($cc);
124
		return $this;
125 126 127 128 129
	}

	/**
	 * @inheritdoc
	 */
Qiang Xue committed
130 131
	public function getBcc()
	{
132
		return $this->getSwiftMessage()->getBcc();
Qiang Xue committed
133 134 135 136 137 138
	}

	/**
	 * @inheritdoc
	 */
	public function setBcc($bcc)
139 140
	{
		$this->getSwiftMessage()->setBcc($bcc);
141
		return $this;
142 143 144
	}

	/**
145
	 * @inheritdoc
146
	 */
Qiang Xue committed
147 148
	public function getSubject()
	{
149
		return $this->getSwiftMessage()->getSubject();
Qiang Xue committed
150 151 152 153 154 155
	}

	/**
	 * @inheritdoc
	 */
	public function setSubject($subject)
156 157
	{
		$this->getSwiftMessage()->setSubject($subject);
158
		return $this;
159 160 161
	}

	/**
162
	 * @inheritdoc
163
	 */
Qiang Xue committed
164
	public function setTextBody($text)
165
	{
166
		$this->setBody($text, 'text/plain');
167
		return $this;
168 169 170
	}

	/**
171
	 * @inheritdoc
172
	 */
Qiang Xue committed
173
	public function setHtmlBody($html)
174
	{
175
		$this->setBody($html, 'text/html');
176
		return $this;
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
	}

	/**
	 * 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)) {
slavcodev committed
195
					/* @var \Swift_Mime_MimePart $part */
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
					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);
			}
		}
221 222
	}

223
	/**
224
	 * @inheritdoc
225
	 */
226
	public function attach($fileName, array $options = [])
227
	{
228 229 230 231 232 233
		$attachment = \Swift_Attachment::fromPath($fileName);
		if (!empty($options['fileName'])) {
			$attachment->setFilename($options['fileName']);
		}
		if (!empty($options['contentType'])) {
			$attachment->setContentType($options['contentType']);
234 235
		}
		$this->getSwiftMessage()->attach($attachment);
236
		return $this;
237
	}
238

239 240 241 242 243 244 245 246 247 248 249 250 251
	/**
	 * @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);
252
		return $this;
253 254 255 256 257
	}

	/**
	 * @inheritdoc
	 */
258
	public function embed($fileName, array $options = [])
259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276
	{
		$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'])) {
277 278
			$embedFile->setFilename($options['fileName']);
		}
279 280 281 282 283 284
		if (!empty($options['contentType'])) {
			$embedFile->setContentType($options['contentType']);
		}
		return $this->getSwiftMessage()->embed($embedFile);
	}

285 286 287
	/**
	 * @inheritdoc
	 */
288
	public function toString()
289 290 291
	{
		return $this->getSwiftMessage()->toString();
	}
292 293 294 295 296 297 298 299 300

	/**
	 * Creates the Swift email message instance.
	 * @return \Swift_Message email message instance.
	 */
	protected function createSwiftMessage()
	{
		return new \Swift_Message();
	}
Qiang Xue committed
301
}