Paul Klimov
11 years ago
10 changed files with 817 additions and 1 deletions
@ -0,0 +1,125 @@
|
||||
<?php |
||||
/** |
||||
* @link http://www.yiiframework.com/ |
||||
* @copyright Copyright (c) 2008 Yii Software LLC |
||||
* @license http://www.yiiframework.com/license/ |
||||
*/ |
||||
|
||||
namespace yii\email; |
||||
|
||||
use yii\base\Component; |
||||
use yii\base\InvalidConfigException; |
||||
use Yii; |
||||
|
||||
/** |
||||
* BaseMailer provides the basic interface for the email mailer application component. |
||||
* It provides the default configuration for the email messages. |
||||
* Particular implementation of mailer should provide implementation for the [[send()]] method. |
||||
* |
||||
* @see BaseMessage |
||||
* |
||||
* @property array $view view instance or its array configuration. |
||||
* @property array $defaultMessageConfig configuration, which should be applied by default to any |
||||
* new created email message instance. |
||||
* |
||||
* @author Paul Klimov <klimov.paul@gmail.com> |
||||
* @since 2.0 |
||||
*/ |
||||
abstract class BaseMailer extends Component |
||||
{ |
||||
/** |
||||
* @var \yii\base\View|array view instance or its array configuration. |
||||
*/ |
||||
private $_view = []; |
||||
/** |
||||
* @var array configuration, which should be applied by default to any new created |
||||
* email message instance. |
||||
* For example: |
||||
* ~~~ |
||||
* array( |
||||
* 'encoding' => 'UTF-8', |
||||
* 'from' => 'noreply@mydomain.com', |
||||
* 'bcc' => 'email.test@mydomain.com', |
||||
* ) |
||||
* ~~~ |
||||
*/ |
||||
private $_defaultMessageConfig = []; |
||||
|
||||
/** |
||||
* @param array|\yii\base\View $view view instance or its array configuration. |
||||
* @throws \yii\base\InvalidConfigException on invalid argument. |
||||
*/ |
||||
public function setView($view) |
||||
{ |
||||
if (!is_array($view) && !is_object($view)) { |
||||
throw new InvalidConfigException('"' . get_class($this) . '::view" should be either object or array, "' . gettype($view) . '" given.'); |
||||
} |
||||
$this->_view = $view; |
||||
} |
||||
|
||||
/** |
||||
* @return \yii\base\View view instance. |
||||
*/ |
||||
public function getView() |
||||
{ |
||||
if (!is_object($this->_view)) { |
||||
$this->_view = $this->createView($this->_view); |
||||
} |
||||
return $this->_view; |
||||
} |
||||
|
||||
/** |
||||
* @param array $defaultMessageConfig default message config |
||||
*/ |
||||
public function setDefaultMessageConfig(array $defaultMessageConfig) |
||||
{ |
||||
$this->_defaultMessageConfig = $defaultMessageConfig; |
||||
} |
||||
|
||||
/** |
||||
* @return array default message config |
||||
*/ |
||||
public function getDefaultMessageConfig() |
||||
{ |
||||
return $this->_defaultMessageConfig; |
||||
} |
||||
|
||||
/** |
||||
* Creates view instance from given configuration. |
||||
* @param array $config view configuration. |
||||
* @return \yii\base\View view instance. |
||||
*/ |
||||
protected function createView(array $config) |
||||
{ |
||||
if (!array_key_exists('class', $config)) { |
||||
$config['class'] = '\yii\base\View'; |
||||
} |
||||
$config['context'] = $this; |
||||
return Yii::createObject($config); |
||||
} |
||||
|
||||
/** |
||||
* Sends the given email message. |
||||
* @param object $message email message instance |
||||
* @return boolean whether the message has been sent. |
||||
*/ |
||||
abstract public function send($message); |
||||
|
||||
/** |
||||
* Sends a couple of messages at once. |
||||
* Note: some particular mailers may benefit from sending messages as batch, |
||||
* saving resources, for example on open/close connection operations, |
||||
* they may override this method to create their specific implementation. |
||||
* @param array $messages list of email messages, which should be sent. |
||||
* @return integer number of successfull sends |
||||
*/ |
||||
public function sendMultiple(array $messages) { |
||||
$successCount = 0; |
||||
foreach ($messages as $message) { |
||||
if ($this->send($message)) { |
||||
$successCount++; |
||||
} |
||||
} |
||||
return $successCount; |
||||
} |
||||
} |
@ -0,0 +1,125 @@
|
||||
<?php |
||||
/** |
||||
* @link http://www.yiiframework.com/ |
||||
* @copyright Copyright (c) 2008 Yii Software LLC |
||||
* @license http://www.yiiframework.com/license/ |
||||
*/ |
||||
|
||||
namespace yii\email; |
||||
|
||||
use yii\base\InvalidParamException; |
||||
use yii\base\Object; |
||||
use yii\helpers\FileHelper; |
||||
use Yii; |
||||
|
||||
/** |
||||
* BaseMessage represent the single email message. |
||||
* It functionality depends on application component 'email', |
||||
* which should provide the actual email sending functionality as well as |
||||
* default message configuration. |
||||
* |
||||
* @see BaseMailer |
||||
* |
||||
* @property \yii\email\BaseMailer $mailer mailer component instance. This property is read-only. |
||||
* @property string|array $from sender email address, if array is given, its first element should |
||||
* be sender email address, second - sender name. |
||||
* @property string|array $to receiver email address, if array is given, its first element should |
||||
* be receiver email address, second - receiver name. |
||||
* @property string $subject message subject. |
||||
* @property string $text message plain text content. |
||||
* @property string $html message HTML content. |
||||
* |
||||
* @author Paul Klimov <klimov.paul@gmail.com> |
||||
* @since 2.0 |
||||
*/ |
||||
abstract class BaseMessage extends Object |
||||
{ |
||||
/** |
||||
* @return \yii\email\BaseMailer |
||||
*/ |
||||
public function getMailer() |
||||
{ |
||||
return Yii::$app->getComponent('email'); |
||||
} |
||||
|
||||
/** |
||||
* Initializes the object. |
||||
* This method is invoked at the end of the constructor after the object is initialized with the |
||||
* given configuration. |
||||
*/ |
||||
public function init() |
||||
{ |
||||
Yii::configure($this, $this->getMailer()->getDefaultMessageConfig()); |
||||
} |
||||
|
||||
/** |
||||
* Sends this email message. |
||||
* @return boolean success. |
||||
*/ |
||||
public function send() |
||||
{ |
||||
return $this->getMailer()->send($this); |
||||
} |
||||
|
||||
/** |
||||
* Sets message sender. |
||||
* @param string|array $from sender email address, if array is given, |
||||
* its first element should be sender email address, second - sender name. |
||||
*/ |
||||
abstract public function setFrom($from); |
||||
|
||||
/** |
||||
* Sets message receiver. |
||||
* @param string|array $to receiver email address, if array is given, |
||||
* its first element should be receiver email address, second - receiver name. |
||||
*/ |
||||
abstract public function setTo($to); |
||||
|
||||
/** |
||||
* Sets message subject. |
||||
* @param string $subject message subject |
||||
*/ |
||||
abstract public function setSubject($subject); |
||||
|
||||
/** |
||||
* Sets message plain text content. |
||||
* @param string $text message plain text content. |
||||
*/ |
||||
abstract public function setText($text); |
||||
|
||||
/** |
||||
* Sets message HTML content. |
||||
* @param string $html message HTML content. |
||||
*/ |
||||
abstract public function setHtml($html); |
||||
|
||||
/** |
||||
* Create file attachment for the email message. |
||||
* @param string $content attachment file content. |
||||
* @param string $fileName attachment file name. |
||||
* @param string $contentType MIME type of the attachment file, by default 'application/octet-stream' will be used. |
||||
*/ |
||||
abstract public function createAttachment($content, $fileName, $contentType = 'application/octet-stream'); |
||||
|
||||
/** |
||||
* Attaches existing file to the email message. |
||||
* @param string $fileName full file name |
||||
* @param string $contentType MIME type of the attachment file, if empty it will be suggested automatically. |
||||
* @param string $attachFileName name, which should be used for attachment, if empty file base name will be used. |
||||
* @throws \yii\base\InvalidParamException if given file does not exist. |
||||
*/ |
||||
public function attachFile($fileName, $contentType = null, $attachFileName = null) |
||||
{ |
||||
if (!file_exists($fileName)) { |
||||
throw new InvalidParamException('Unable to attach file "' . $fileName . '": file does not exists!'); |
||||
} |
||||
if (empty($contentType)) { |
||||
$contentType = FileHelper::getMimeType($fileName); |
||||
} |
||||
if (empty($attachFileName)) { |
||||
$attachFileName = basename($fileName); |
||||
} |
||||
$content = file_get_contents($fileName); |
||||
$this->createAttachment($content, $attachFileName, $contentType); |
||||
} |
||||
} |
@ -0,0 +1,34 @@
|
||||
<?php |
||||
/** |
||||
* @link http://www.yiiframework.com/ |
||||
* @copyright Copyright (c) 2008 Yii Software LLC |
||||
* @license http://www.yiiframework.com/license/ |
||||
*/ |
||||
|
||||
namespace yii\email; |
||||
|
||||
use yii\email\swift\Message as SwiftMessage; |
||||
|
||||
/** |
||||
* Message provides the email message sending functionality. |
||||
* |
||||
* Usage: |
||||
* ~~~ |
||||
* $email = new Message(); |
||||
* $email->from = 'sender@domain.com'; |
||||
* $email->to = 'receiver@domain.com'; |
||||
* $email->subject = 'Message Subject'; |
||||
* $email->text = 'Message Content'; |
||||
* $email->send(); |
||||
* ~~~ |
||||
* |
||||
* This particular class uses 'SwiftMailer' library to perform the message sending. |
||||
* Note: you can replace usage of this class by your own one, using [[Yii::$classMap]]: |
||||
* ~~~ |
||||
* Yii::$classMap['yii\email\Message'] = '/path/to/my/email/Message.php' |
||||
* ~~~ |
||||
* |
||||
* @author Paul Klimov <klimov.paul@gmail.com> |
||||
* @since 2.0 |
||||
*/ |
||||
class Message extends SwiftMessage {} |
@ -0,0 +1,180 @@
|
||||
<?php |
||||
/** |
||||
* @link http://www.yiiframework.com/ |
||||
* @copyright Copyright (c) 2008 Yii Software LLC |
||||
* @license http://www.yiiframework.com/license/ |
||||
*/ |
||||
|
||||
namespace yii\email\swift; |
||||
|
||||
use yii\base\InvalidConfigException; |
||||
use yii\email\BaseMailer; |
||||
|
||||
/** |
||||
* Mailer based on SwiftMailer library. |
||||
* |
||||
* By default PHP 'mail' function will be used as default email transport. |
||||
* You can setup different email transport via [[vendorMailer]] property: |
||||
* ~~~ |
||||
* 'components' => array( |
||||
* ... |
||||
* 'email' => array( |
||||
* 'class' => 'yii\email\swift\Mailer', |
||||
* 'transport' => [ |
||||
* 'class' => 'Swift_SmtpTransport', |
||||
* 'host' => 'localhost', |
||||
* 'username' => 'username', |
||||
* 'password' => 'password', |
||||
* 'port' => '587', |
||||
* 'encryption' => 'tls', |
||||
* ], |
||||
* ), |
||||
* ... |
||||
* ), |
||||
* ~~~ |
||||
* |
||||
* @see http://swiftmailer.org |
||||
* |
||||
* @author Paul Klimov <klimov.paul@gmail.com> |
||||
* @since 2.0 |
||||
*/ |
||||
class Mailer extends BaseMailer |
||||
{ |
||||
/** |
||||
* @var string|callback SwiftMailer autoloader callback or path to autoloader file. |
||||
* If the SwiftMailer classes autoloading is already managed in some other place, |
||||
* for example via Composer, you should leave this field blank. |
||||
*/ |
||||
public $autoload; |
||||
/** |
||||
* @var \Swift_Mailer Swift mailer instance. |
||||
*/ |
||||
private $_swiftMailer; |
||||
/** |
||||
* @var \Swift_Transport|array Swift transport instance or its array configuration. |
||||
*/ |
||||
private $_transport = []; |
||||
|
||||
/** |
||||
* @return array|\Swift_Mailer Swift mailer instance or array configuration. |
||||
*/ |
||||
public function getSwiftMailer() |
||||
{ |
||||
if (!is_object($this->_swiftMailer)) { |
||||
$this->_swiftMailer = $this->createSwiftMailer(); |
||||
} |
||||
return $this->_swiftMailer; |
||||
} |
||||
|
||||
/** |
||||
* @param array|\Swift_Transport $transport |
||||
* @throws \yii\base\InvalidConfigException on invalid argument. |
||||
*/ |
||||
public function setTransport($transport) |
||||
{ |
||||
if (!is_array($transport) && !is_object($transport)) { |
||||
throw new InvalidConfigException('"' . get_class($this) . '::transport" should be either object or array, "' . gettype($transport) . '" given.'); |
||||
} |
||||
$this->_transport = $transport; |
||||
} |
||||
|
||||
/** |
||||
* @return array|\Swift_Transport |
||||
*/ |
||||
public function getTransport() |
||||
{ |
||||
if (!is_object($this->_transport)) { |
||||
$this->_transport = $this->createTransport($this->_transport); |
||||
} |
||||
return $this->_transport; |
||||
} |
||||
|
||||
/** |
||||
* @inheritdoc |
||||
*/ |
||||
public function init() |
||||
{ |
||||
$this->setupSwiftMailerAutoload(); |
||||
} |
||||
|
||||
/** |
||||
* Sets up the SwiftMailer autoloader, if it is specified. |
||||
*/ |
||||
protected function setupSwiftMailerAutoload() |
||||
{ |
||||
if (!class_exists('Swift', false)) { |
||||
if (empty($this->autoload)) { |
||||
$this->autoload = __DIR__ . '/autoload.php'; |
||||
} |
||||
if (is_string($this->autoload)) { |
||||
if (file_exists($this->autoload)) { |
||||
require_once($this->autoload); |
||||
} elseif (function_exists($this->autoload)) { |
||||
spl_autoload_register($this->autoload); |
||||
} else { |
||||
throw new InvalidConfigException('"' . get_class($this) . '::autoload" value "' . $this->autoload . '" is invalid: no such function or file exists.'); |
||||
} |
||||
} else { |
||||
spl_autoload_register($this->autoload); |
||||
} |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* @inheritdoc |
||||
*/ |
||||
public function send($message) |
||||
{ |
||||
return ($this->getSwiftMailer()->send($message->getSwiftMessage()) > 0); |
||||
} |
||||
|
||||
/** |
||||
* Creates Swift mailer instance. |
||||
* @return \Swift_Mailer mailer instance. |
||||
*/ |
||||
protected function createSwiftMailer() |
||||
{ |
||||
return \Swift_Mailer::newInstance($this->getTransport()); |
||||
} |
||||
|
||||
/** |
||||
* Creates email transport instance by its array configuration. |
||||
* @param array $config transport configuration. |
||||
* @throws \yii\base\InvalidConfigException on invalid transport configuration. |
||||
* @return \Swift_Transport transport instance. |
||||
*/ |
||||
protected function createTransport(array $config) |
||||
{ |
||||
if (array_key_exists('class', $config)) { |
||||
$className = $config['class']; |
||||
unset($config['class']); |
||||
} else { |
||||
$className = 'Swift_MailTransport'; |
||||
} |
||||
$transport = call_user_func([$className, 'newInstance']); |
||||
if (!empty($config)) { |
||||
foreach ($config as $name => $value) { |
||||
if (property_exists($transport, $name)) { |
||||
$transport->$name = $value; |
||||
} else { |
||||
$setter = 'set' . $name; |
||||
if (method_exists($transport, $setter)) { |
||||
$transport->$setter($value); |
||||
} else { |
||||
throw new InvalidConfigException('Setting unknown property: ' . get_class($transport) . '::' . $name); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
return $transport; |
||||
} |
||||
|
||||
/** |
||||
* Creates the Swift email message instance. |
||||
* @return \Swift_Message email message instance. |
||||
*/ |
||||
public function createSwiftMessage() |
||||
{ |
||||
return new \Swift_Message(); |
||||
} |
||||
} |
@ -0,0 +1,116 @@
|
||||
<?php |
||||
/** |
||||
* @link http://www.yiiframework.com/ |
||||
* @copyright Copyright (c) 2008 Yii Software LLC |
||||
* @license http://www.yiiframework.com/license/ |
||||
*/ |
||||
|
||||
namespace yii\email\swift; |
||||
|
||||
use yii\email\BaseMessage; |
||||
|
||||
/** |
||||
* Email message based on SwiftMailer library. |
||||
* |
||||
* @see http://swiftmailer.org/docs/messages.html |
||||
* @see \yii\email\swift\Mailer |
||||
* |
||||
* @method \yii\email\swift\Mailer getMailer() returns mailer instance. |
||||
* @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)) { |
||||
$this->_swiftMessage = $this->getMailer()->createSwiftMessage(); |
||||
} |
||||
return $this->_swiftMessage; |
||||
} |
||||
|
||||
/** |
||||
* Sets message sender. |
||||
* @param string|array $from sender email address, if array is given, |
||||
* its first element should be sender email address, second - sender name. |
||||
*/ |
||||
public function setFrom($from) |
||||
{ |
||||
if (is_array($from)) { |
||||
list ($address, $name) = $from; |
||||
} else { |
||||
$address = $from; |
||||
$name = null; |
||||
} |
||||
$this->getSwiftMessage()->setFrom($address, $name); |
||||
$this->getSwiftMessage()->setReplyTo($address, $name); |
||||
} |
||||
|
||||
/** |
||||
* Sets message receiver. |
||||
* @param string|array $to receiver email address, if array is given, |
||||
* its first element should be receiver email address, second - receiver name. |
||||
*/ |
||||
public function setTo($to) |
||||
{ |
||||
if (is_array($to)) { |
||||
list ($address, $name) = $to; |
||||
} else { |
||||
$address = $to; |
||||
$name = null; |
||||
} |
||||
$this->getSwiftMessage()->setTo($address, $name); |
||||
} |
||||
|
||||
/** |
||||
* Sets message subject. |
||||
* @param string $subject message subject |
||||
*/ |
||||
public function setSubject($subject) |
||||
{ |
||||
$this->getSwiftMessage()->setSubject($subject); |
||||
} |
||||
|
||||
/** |
||||
* Sets message plain text content. |
||||
* @param string $text message plain text content. |
||||
*/ |
||||
public function setText($text) |
||||
{ |
||||
$this->getSwiftMessage()->setBody($text, 'text/plain'); |
||||
} |
||||
|
||||
/** |
||||
* Sets message HTML content. |
||||
* @param string $html message HTML content. |
||||
*/ |
||||
public function setHtml($html) |
||||
{ |
||||
$this->getSwiftMessage()->setBody($html, 'text/html'); |
||||
} |
||||
|
||||
/** |
||||
* Create file attachment for the email message. |
||||
* @param string $content - attachment file content. |
||||
* @param string $fileName - attachment file name. |
||||
* @param string $contentType - MIME type of the attachment file, by default 'application/octet-stream' will be used. |
||||
*/ |
||||
public function createAttachment($content, $fileName, $contentType = 'application/octet-stream') |
||||
{ |
||||
if (empty($contentType)) { |
||||
$contentType = 'application/octet-stream'; |
||||
} |
||||
$attachment = \Swift_Attachment::newInstance($content, $fileName, $contentType); |
||||
$this->getSwiftMessage()->attach($attachment); |
||||
} |
||||
} |
@ -0,0 +1,9 @@
|
||||
<?php |
||||
/** |
||||
* This file attempts to register autoloader for the Swift library, assuming |
||||
* it is located under the 'vendor' path. |
||||
* |
||||
* @var $this \yii\email\swift\Mailer |
||||
*/ |
||||
$swiftMailerLibPath = Yii::getAlias('@vendor/swiftmailer/swiftmailer/lib'); |
||||
require_once $swiftMailerLibPath . '/swift_required.php'; |
@ -0,0 +1,97 @@
|
||||
<?php |
||||
|
||||
namespace yiiunit\framework\email; |
||||
|
||||
use Yii; |
||||
use yii\base\View; |
||||
use yii\email\BaseMailer; |
||||
use yii\email\BaseMessage; |
||||
use yiiunit\TestCase; |
||||
|
||||
/** |
||||
* @group email |
||||
*/ |
||||
class BaseMailerTest extends TestCase |
||||
{ |
||||
public function setUp() |
||||
{ |
||||
$this->mockApplication(); |
||||
Yii::$app->setComponent('email', $this->createTestEmailComponent()); |
||||
} |
||||
|
||||
/** |
||||
* @return Mailer test email component instance. |
||||
*/ |
||||
protected function createTestEmailComponent() |
||||
{ |
||||
$component = new Mailer(); |
||||
return $component; |
||||
} |
||||
|
||||
// Tests : |
||||
|
||||
public function testSetupView() |
||||
{ |
||||
$mailer = new Mailer(); |
||||
|
||||
$view = new View(); |
||||
$mailer->setView($view); |
||||
$this->assertEquals($view, $mailer->getView(), 'Unable to setup view!'); |
||||
} |
||||
|
||||
public function testGetDefaultView() |
||||
{ |
||||
$mailer = new Mailer(); |
||||
$view = $mailer->getView(); |
||||
$this->assertTrue(is_object($view), 'Unable to get default view!'); |
||||
} |
||||
|
||||
public function testDefaultMessageConfig() |
||||
{ |
||||
$defaultMessageConfig = array( |
||||
'id' => 'test-id', |
||||
'encoding' => 'test-encoding', |
||||
); |
||||
Yii::$app->getComponent('email')->setDefaultMessageConfig($defaultMessageConfig); |
||||
|
||||
$message = new Message(); |
||||
|
||||
foreach ($defaultMessageConfig as $name => $value) { |
||||
$this->assertEquals($value, $message->$name); |
||||
} |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Test Mailer class |
||||
*/ |
||||
class Mailer extends BaseMailer |
||||
{ |
||||
public $sentMessages = array(); |
||||
|
||||
public function send($message) |
||||
{ |
||||
$this->sentMessages[] = $message; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Test Message class |
||||
*/ |
||||
class Message extends BaseMessage |
||||
{ |
||||
public $id; |
||||
public $encoding; |
||||
|
||||
public function setFrom($from) {} |
||||
|
||||
public function setTo($to) {} |
||||
|
||||
public function setSubject($subject) {} |
||||
|
||||
public function setText($text) {} |
||||
|
||||
public function setHtml($html) {} |
||||
|
||||
public function createAttachment($content, $fileName, $contentType = 'application/octet-stream') {} |
||||
} |
@ -0,0 +1,90 @@
|
||||
<?php |
||||
|
||||
namespace yiiunit\framework\email\swift; |
||||
|
||||
use Yii; |
||||
use yii\email\swift\Mailer; |
||||
use yii\email\swift\Message; |
||||
use yiiunit\TestCase; |
||||
|
||||
/** |
||||
* @group email |
||||
* @group swiftmailer |
||||
*/ |
||||
class MailerTest extends TestCase |
||||
{ |
||||
public function setUp() |
||||
{ |
||||
$this->mockApplication(array( |
||||
'vendorPath' => Yii::getAlias('@yiiunit/vendor') |
||||
)); |
||||
Yii::$app->setComponent('email', $this->createTestEmailComponent()); |
||||
} |
||||
|
||||
/** |
||||
* @return Mailer test email component instance. |
||||
*/ |
||||
protected function createTestEmailComponent() |
||||
{ |
||||
$component = new Mailer(); |
||||
return $component; |
||||
} |
||||
|
||||
// Tests : |
||||
|
||||
public function testSetupTransport() |
||||
{ |
||||
$mailer = new Mailer(); |
||||
|
||||
$transport = \Swift_MailTransport::newInstance(); |
||||
$mailer->setTransport($transport); |
||||
$this->assertEquals($transport, $mailer->getTransport(), 'Unable to setup transport!'); |
||||
} |
||||
|
||||
/** |
||||
* @depends testSetupTransport |
||||
*/ |
||||
public function testConfigureTransport() |
||||
{ |
||||
$mailer = new Mailer(); |
||||
|
||||
$transportConfig = [ |
||||
'class' => 'Swift_SmtpTransport', |
||||
'host' => 'localhost', |
||||
]; |
||||
$mailer->setTransport($transportConfig); |
||||
$transport = $mailer->getTransport(); |
||||
$this->assertTrue(is_object($transport), 'Unable to setup transport via config!'); |
||||
$this->assertEquals($transportConfig['class'], get_class($transport), 'Invalid transport class!'); |
||||
$this->assertEquals($transportConfig['host'], $transport->getHost(), 'Invalid transport host!'); |
||||
} |
||||
|
||||
public function testGetSwiftMailer() |
||||
{ |
||||
$mailer = new Mailer(); |
||||
$this->assertTrue(is_object($mailer->getSwiftMailer()), 'Unable to get Swift mailer instance!'); |
||||
} |
||||
|
||||
public function testCreateSwiftMessage() |
||||
{ |
||||
$mailer = new Mailer(); |
||||
$message = $mailer->createSwiftMessage(); |
||||
$this->assertTrue(is_object($message), 'Unable to create Swift message instance!'); |
||||
} |
||||
|
||||
/** |
||||
* @depends testGetSwiftMailer |
||||
* @depends testCreateSwiftMessage |
||||
*/ |
||||
public function testSend() |
||||
{ |
||||
$emailAddress = 'someuser@somedomain.com'; |
||||
$message = new Message(); |
||||
$message->setTo($emailAddress); |
||||
$message->setFrom($emailAddress); |
||||
$message->setSubject('Yii Swift Test'); |
||||
$message->setText('Yii Swift Test body'); |
||||
$message->send(); |
||||
$this->assertTrue(true); |
||||
} |
||||
} |
@ -0,0 +1,40 @@
|
||||
<?php |
||||
|
||||
namespace yiiunit\framework\email\swift; |
||||
|
||||
use Yii; |
||||
use yii\email\swift\Mailer; |
||||
use yii\email\swift\Message; |
||||
use yiiunit\TestCase; |
||||
|
||||
/** |
||||
* @group email |
||||
* @group swiftmailer |
||||
*/ |
||||
class MessageTest extends TestCase |
||||
{ |
||||
public function setUp() |
||||
{ |
||||
$this->mockApplication(array( |
||||
'vendorPath' => Yii::getAlias('@yiiunit/vendor') |
||||
)); |
||||
Yii::$app->setComponent('email', $this->createTestEmailComponent()); |
||||
} |
||||
|
||||
/** |
||||
* @return Mailer test email component instance. |
||||
*/ |
||||
protected function createTestEmailComponent() |
||||
{ |
||||
$component = new Mailer(); |
||||
return $component; |
||||
} |
||||
|
||||
// Tests : |
||||
|
||||
public function testGetSwiftMessage() |
||||
{ |
||||
$message = new Message(); |
||||
$this->assertTrue(is_object($message->getSwiftMessage()), 'Unable to get Swift message!'); |
||||
} |
||||
} |
Loading…
Reference in new issue