/application/protected/extensions/mail/YiiMailMessage.php
PHP | 148 lines | 54 code | 11 blank | 83 comment | 5 complexity | 6e931c5dd60fff335d53c8fc7e73e48f MD5 | raw file
Possible License(s): GPL-3.0, BSD-3-Clause, CC0-1.0, BSD-2-Clause, GPL-2.0, LGPL-2.1, LGPL-3.0
- <?php
- /**
- * YiiMailMessage class file.
- *
- * @author Jonah Turnquist <poppitypop@gmail.com>
- * @link https://code.google.com/p/yii-mail/
- * @package Yii-Mail
- */
- /**
- * Any requests to set or get attributes or call methods on this class that are
- * not found in that class are redirected to the {@link Swift_Mime_Message}
- * object.
- *
- * This means you need to look at the Swift Mailer documentation to see what
- * methods are availiable for this class. There are a <b>lot</b> of methods,
- * more than I wish to document. Any methods availiable in
- * {@link Swift_Mime_Message} are availiable here.
- *
- * Documentation for the most important methods can be found at
- * {@link http://swiftmailer.org/docs/messages}
- *
- * The YiiMailMessage component also allows using a shorthand for methods in
- * {@link Swift_Mime_Message} that start with set* or get*
- * For instance, instead of calling $message->setFrom('...') you can use
- * $message->from = '...'.
- *
- * Here are a few methods to get you started:
- * <ul>
- * <li>setSubject('Your subject')</li>
- * <li>setFrom(array('john@doe.com' => 'John Doe'))</li>
- * <li>setTo(array('receiver@domain.org', 'other@domain.org' => 'Name'))</li>
- * <li>attach(Swift_Attachment::fromPath('my-document.pdf'))</li>
- * </ul>
- */
- class YiiMailMessage extends CComponent {
- /**
- * @var string the view to use for rendering the body, null if no view is
- * used. An extra variable $mail will be passed to the view .which you may
- * use to set e.g. the email subject from within the view
- */
- public $view;
- /**
- * @var Swift_Mime_Message
- */
- public $message;
- /**
- * Any requests to set or get attributes or call methods on this class that
- * are not found are redirected to the {@link Swift_Mime_Message} object.
- * @param string the attribute name
- */
- public function __get($name) {
- try {
- return parent::__get($name);
- } catch (CException $e) {
- $getter = 'get' . $name;
- if (method_exists($this->message, $getter))
- return $this->message->$getter();
- else
- throw $e;
- }
- }
- /**
- * Any requests to set or get attributes or call methods on this class that
- * are not found are redirected to the {@link Swift_Mime_Message} object.
- * @param string the attribute name
- */
- public function __set($name, $value) {
- try {
- return parent::__set($name, $value);
- } catch (CException $e) {
- $setter = 'set' . $name;
- if (method_exists($this->message, $setter))
- $this->message->$setter($value);
- else
- throw $e;
- }
- }
- /**
- * Any requests to set or get attributes or call methods on this class that
- * are not found are redirected to the {@link Swift_Mime_Message} object.
- * @param string the method name
- */
- public function __call($name, $parameters) {
- try {
- return parent::__call($name, $parameters);
- } catch (CException $e) {
- if (method_exists($this->message, $name))
- return call_user_func_array(array($this->message, $name), $parameters);
- else
- throw $e;
- }
- }
- /**
- * You may optionally set some message info using the paramaters of this
- * constructor.
- * Use {@link view} and {@link setBody()} for more control.
- *
- * @param string $subject
- * @param string $body
- * @param string $contentType
- * @param string $charset
- * @return Swift_Mime_Message
- */
- public function __construct($subject = null, $body = null, $contentType = null, $charset = null) {
- Yii::app()->mail->registerScripts();
- $this->message = Swift_Message::newInstance($subject = null, $body = null, $contentType = null, $charset = null);
- }
- /**
- * Set the body of this entity, either as a string, or array of view
- * variables if a view is set, or as an instance of
- * {@link Swift_OutputByteStream}.
- *
- * @param mixed the body of the message. If a $this->view is set and this
- * is a string, this is passed to the view as $body. If $this->view is set
- * and this is an array, the array values are passed to the view like in the
- * controller render() method
- * @param string content type optional. For html, set to 'html/text'
- * @param string charset optional
- */
- public function setHtml($body) {
- if ($this->view !== null) {
- if (!is_array($body))
- $body = array('body' => $body);
- // create a dummy controller to render the view (needed in the console app)
- $controller = new CController('YiiMail');
- // renderPartial won't work with CConsoleApplication, so use
- // renderInternal - this requires that we use an actual path to the
- // view rather than the usual alias
- $viewPath = Yii::getPathOfAlias(Yii::app()->mail->viewPath . '.' . $this->view) . '.php';
- $body = $controller->renderInternal($viewPath, array_merge($body, array('mail' => $this)), true);
- }
- return $this->message->addPart($body, 'text/html');
- }
- public function setText($body) {
- return $this->message->setBody($body, 'text/plain');
- }
- }