Message.php 5.85 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 191 192 193 194 195
	}

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

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

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

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

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

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