|
|
|
@ -24,281 +24,295 @@ use yii\mail\BaseMessage;
|
|
|
|
|
*/ |
|
|
|
|
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 \Swift_Mime_MimePart $part */ |
|
|
|
|
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(); |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* @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 \Swift_Mime_MimePart $part */ |
|
|
|
|
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(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|