Message.php 5.95 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
 *
 * @property \Swift_Message $swiftMessage Swift message instance. This property is read-only.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
 *
 * @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)) {
38
			$this->_swiftMessage = $this->createSwiftMessage();
39 40 41 42
		}
		return $this->_swiftMessage;
	}

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

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

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

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

	/**
Qiang Xue committed
78
	 * @inheritdoc
79
	 */
Qiang Xue committed
80 81
	public function getReplyTo()
	{
82
		return $this->getSwiftMessage()->getReplyTo();
Qiang Xue committed
83 84 85
	}

	/**
Qiang Xue committed
86
	 * @inheritdoc
Qiang Xue committed
87 88 89 90 91 92 93 94
	 */
	public function setReplyTo($replyTo)
	{
		$this->getSwiftMessage()->setReplyTo($replyTo);
		return $this;
	}

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

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

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

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

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

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

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

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

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

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

	/**
	 * 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();
191
		$charset = $message->getCharset();
192 193 194 195 196
		if (empty($oldBody)) {
			$parts = $message->getChildren();
			$partFound = false;
			foreach ($parts as $key => $part) {
				if (!($part instanceof \Swift_Mime_Attachment)) {
slavcodev committed
197
					/* @var \Swift_Mime_MimePart $part */
198
					if ($part->getContentType() == $contentType) {
199
						$charset = $part->getCharset();
200 201 202 203 204 205 206 207 208
						unset($parts[$key]);
						$partFound = true;
						break;
					}
				}
			}
			if ($partFound) {
				reset($parts);
				$message->setChildren($parts);
209
				$message->addPart($body, $contentType, $charset);
210 211 212 213 214 215 216 217 218 219
			} else {
				$message->setBody($body, $contentType);
			}
		} else {
			$oldContentType = $message->getContentType();
			if ($oldContentType == $contentType) {
				$message->setBody($body, $contentType);
			} else {
				$message->setBody(null);
				$message->setContentType(null);
220 221
				$message->addPart($oldBody, $oldContentType, $charset);
				$message->addPart($body, $contentType, $charset);
222 223
			}
		}
224 225
	}

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

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

	/**
Qiang Xue committed
259
	 * @inheritdoc
260
	 */
261
	public function embed($fileName, array $options = [])
262 263 264 265 266 267 268 269 270 271 272 273
	{
		$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);
	}

	/**
Qiang Xue committed
274
	 * @inheritdoc
275 276 277 278 279
	 */
	public function embedContent($content, array $options = [])
	{
		$embedFile = \Swift_EmbeddedFile::newInstance($content);
		if (!empty($options['fileName'])) {
280 281
			$embedFile->setFilename($options['fileName']);
		}
282 283 284 285 286 287
		if (!empty($options['contentType'])) {
			$embedFile->setContentType($options['contentType']);
		}
		return $this->getSwiftMessage()->embed($embedFile);
	}

288
	/**
Qiang Xue committed
289
	 * @inheritdoc
290
	 */
291
	public function toString()
292 293 294
	{
		return $this->getSwiftMessage()->toString();
	}
295 296 297 298 299 300 301 302 303

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