4 changed files with 2 additions and 217 deletions
			
			
		| @ -1,135 +0,0 @@ | ||||
| <?php | ||||
| /** | ||||
|  * @link http://www.yiiframework.com/ | ||||
|  * @copyright Copyright (c) 2008 Yii Software LLC | ||||
|  * @license http://www.yiiframework.com/license/ | ||||
|  */ | ||||
| 
 | ||||
| namespace yii\swiftmailer; | ||||
| 
 | ||||
| use yii\helpers\FileHelper; | ||||
| use yii\mail\BaseMailer; | ||||
| use Yii; | ||||
| 
 | ||||
| /** | ||||
|  * FileMailer implements a mailer that saves mails as files under runtime directory. | ||||
|  * | ||||
|  * To use FileMailer, you should configure it in the application configuration like the following, | ||||
|  * | ||||
|  * ~~~ | ||||
|  * 'components' => array( | ||||
|  *     ... | ||||
|  *     'email' => array( | ||||
|  *         'class' => 'yii\swiftmailer\FileMailer' | ||||
|  *     ), | ||||
|  *     ... | ||||
|  * ), | ||||
|  * ~~~ | ||||
|  * | ||||
|  * To send an email, you may use the following code: | ||||
|  * | ||||
|  * ~~~ | ||||
|  * Yii::$app->mail->compose('contact/html', ['contactForm' => $form]) | ||||
|  *     ->setFrom('from@domain.com') | ||||
|  *     ->setTo($form->email) | ||||
|  *     ->setSubject($form->subject) | ||||
|  *     ->send(); | ||||
|  * ~~~ | ||||
|  * | ||||
|  * @author Dmitry Erofeev <dmeroff@gmail.com> | ||||
|  * @since 2.0 | ||||
|  */ | ||||
| class FileMailer extends BaseMailer | ||||
| { | ||||
| 	/** | ||||
| 	 * @var string message default class name. | ||||
| 	 */ | ||||
| 	public $messageClass = 'yii\swiftmailer\Message'; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @var string The path under which mail files will be written. Defaults to "@app/runtime/mail". | ||||
| 	 */ | ||||
| 	protected $path; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @var callable Callback that will be used to generate name of the message to save. | ||||
| 	 */ | ||||
| 	protected $callback; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Sets path under which mail files will be written. | ||||
| 	 * Any trailing '/' and '\' characters in the given path will be trimmed. | ||||
| 	 * | ||||
| 	 * @param $path | ||||
| 	 * @throws \InvalidArgumentException | ||||
| 	 */ | ||||
| 	public function setPath($path) | ||||
| 	{ | ||||
| 		$path = Yii::getAlias($path); | ||||
| 		if (!is_dir($path) || !is_writable($path)) { | ||||
| 			throw new \InvalidArgumentException('Filemailer::setPath expects a valid path in which to write mail files'); | ||||
| 		} | ||||
| 
 | ||||
| 		$this->path = rtrim($path, '\\/'); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Gets path under which mail files will be written. | ||||
| 	 * | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	public function getPath() | ||||
| 	{ | ||||
| 		if ($this->path == null) { | ||||
| 			$path = Yii::getAlias('@app/runtime/mail'); | ||||
| 			if (!is_dir($path)) { | ||||
| 				FileHelper::createDirectory($path); | ||||
| 			} | ||||
| 			$this->setPath($path); | ||||
| 		} | ||||
| 
 | ||||
| 		return $this->path; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Sets callback that will be used to generate name of the message to save. | ||||
| 	 * | ||||
| 	 * @param callable $callback | ||||
| 	 */ | ||||
| 	public function setCallback(callable $callback) | ||||
| 	{ | ||||
| 		$this->callback = $callback; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Gets callback that will be used to generate name of the message to save. | ||||
| 	 * | ||||
| 	 * @return callable | ||||
| 	 */ | ||||
| 	public function getCallback() | ||||
| 	{ | ||||
| 		if ($this->callback == null) { | ||||
| 			$this->setCallback(function () { | ||||
| 				return uniqid('Message_') . '.txt'; | ||||
| 			}); | ||||
| 		} | ||||
| 
 | ||||
| 		return $this->callback; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @inheritdoc | ||||
| 	 */ | ||||
| 	public function send($message) | ||||
| 	{ | ||||
| 		$address = $message->getTo(); | ||||
| 		if (is_array($address)) { | ||||
| 			$address = implode(', ', array_keys($address)); | ||||
| 		} | ||||
| 		Yii::trace('Sending email "' . $message->getSubject() . '" to "' . $address . '"', __METHOD__); | ||||
| 
 | ||||
| 		$filename = $this->getPath() . DIRECTORY_SEPARATOR . call_user_func($this->getCallback()); | ||||
| 
 | ||||
| 		return file_put_contents($filename, $message->toString()) !== false; | ||||
| 	} | ||||
| } | ||||
| @ -1,62 +0,0 @@ | ||||
| <?php | ||||
| 
 | ||||
| namespace yiiunit\extensions\swiftmailer; | ||||
| 
 | ||||
| require __DIR__ . '/../../../../extensions/swiftmailer/FileMailer.php'; | ||||
| 
 | ||||
| use yii\swiftmailer\FileMailer; | ||||
| use yiiunit\VendorTestCase; | ||||
| 
 | ||||
| /** | ||||
|  * @group vendor | ||||
|  * @group mail | ||||
|  * @group swiftmailer | ||||
|  */ | ||||
| class FileMailerTest extends VendorTestCase | ||||
| { | ||||
| 	public function setUp() | ||||
| 	{ | ||||
| 		$this->mockApplication([ | ||||
| 			'components' => [ | ||||
| 				'mail' => $this->createTestEmailComponent() | ||||
| 			] | ||||
| 		]); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @return FileMailer test email component instance. | ||||
| 	 */ | ||||
| 	protected function createTestEmailComponent() | ||||
| 	{ | ||||
| 		$component = new FileMailer([ | ||||
| 			'callback' => function () { | ||||
| 				return 'Message_test.txt'; | ||||
| 			} | ||||
| 		]); | ||||
| 
 | ||||
| 		return $component; | ||||
| 	} | ||||
| 
 | ||||
| 	public function testConfigurePath() | ||||
| 	{ | ||||
| 		$mailer = new FileMailer(); | ||||
| 		$this->assertEquals(\Yii::getAlias('@app/runtime/mail'), $mailer->getPath()); | ||||
| 		$mailer->setPath('@yiiunit/runtime/'); | ||||
| 		$this->assertEquals(\Yii::getAlias('@yiiunit/runtime'), $mailer->getPath()); | ||||
| 	} | ||||
| 
 | ||||
| 	public function testSend() | ||||
| 	{ | ||||
| 		$message = \Yii::$app->mail->compose() | ||||
| 			->setTo('tester@example.com') | ||||
| 			->setFrom('admin@example.com') | ||||
| 			->setSubject('Just a test') | ||||
| 			->setHtmlBody('This is html body'); | ||||
| 		$message->send(); | ||||
| 		$this->assertEquals( | ||||
| 			$message->toString(), | ||||
| 			file_get_contents(\Yii::$app->getRuntimePath() . '/mail/Message_test.txt') | ||||
| 		); | ||||
| 	} | ||||
| } | ||||
|   | ||||
					Loading…
					
					
				
		Reference in new issue