Class yii\swiftmailer\Mailer
| Inheritance | yii\swiftmailer\Mailer » yii\mail\BaseMailer |
|---|---|
| Available since extension's version | 2.0 |
| Source Code | https://github.com/yiisoft/yii2-swiftmailer/blob/master/src/Mailer.php |
Mailer implements a mailer based on SwiftMailer.
To use Mailer, you should configure it in the application configuration like the following:
[
'components' => [
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'localhost',
'username' => 'username',
'password' => 'password',
'port' => '587',
'encryption' => 'tls',
],
],
// ...
],
// ...
],
You may also skip the configuration of the $transport property. In that case, the default
\Swift_SendmailTransport transport will be used to send emails.
You specify the transport constructor arguments using 'constructArgs' key in the config. You can also specify the list of plugins, which should be registered to the transport using 'plugins' key. For example:
'transport' => [
'class' => 'Swift_SmtpTransport',
'constructArgs' => ['localhost', 25],
'plugins' => [
[
'class' => 'Swift_Plugins_ThrottlerPlugin',
'constructArgs' => [20],
],
],
],
To send an email, you may use the following code:
Yii::$app->mailer->compose('contact/html', ['contactForm' => $form])
->setFrom('from@domain.com')
->setTo($form->email)
->setSubject($form->subject)
->send();
See also http://swiftmailer.org.
Public Properties
| Property | Type | Description | Defined By |
|---|---|---|---|
| $enableSwiftMailerLogging | boolean | Whether to enable writing of the SwiftMailer internal logs using Yii log mechanism. | yii\swiftmailer\Mailer |
| $messageClass | string | Message default class name. | yii\swiftmailer\Mailer |
| $swiftMailer | \Swift_Mailer | Swift mailer instance. | yii\swiftmailer\Mailer |
| $transport | \Swift_Transport | yii\swiftmailer\Mailer |
Public Methods
| Method | Description | Defined By |
|---|---|---|
| getSwiftMailer() | yii\swiftmailer\Mailer | |
| getTransport() | yii\swiftmailer\Mailer | |
| setTransport() | yii\swiftmailer\Mailer |
Protected Methods
| Method | Description | Defined By |
|---|---|---|
| createSwiftMailer() | Creates Swift mailer instance. | yii\swiftmailer\Mailer |
| createSwiftObject() | Creates Swift library object, from given array configuration. | yii\swiftmailer\Mailer |
| createTransport() | Creates email transport instance by its array configuration. | yii\swiftmailer\Mailer |
| sendMessage() | yii\swiftmailer\Mailer |
Property Details
Whether to enable writing of the SwiftMailer internal logs using Yii log mechanism. If enabled yii\swiftmailer\Logger plugin will be attached to the $transport for this purpose.
See also yii\swiftmailer\Logger.
Message default class name.
Method Details
Creates Swift mailer instance.
| protected createSwiftMailer( ): \Swift_Mailer | ||
| return | \Swift_Mailer |
Mailer instance. |
|---|---|---|
protected function createSwiftMailer()
{
return new \Swift_Mailer($this->getTransport());
}
Creates Swift library object, from given array configuration.
| protected createSwiftObject( array $config ): object | ||
| $config | array |
Object configuration |
| return | object |
Created object |
|---|---|---|
| throws | \yii\base\InvalidConfigException |
on invalid configuration. |
protected function createSwiftObject(array $config)
{
if (isset($config['class'])) {
$className = $config['class'];
unset($config['class']);
} else {
throw new InvalidConfigException('Object configuration must be an array containing a "class" element.');
}
if (isset($config['constructArgs'])) {
$args = [];
foreach ($config['constructArgs'] as $arg) {
if (is_array($arg) && isset($arg['class'])) {
$args[] = $this->createSwiftObject($arg);
} else {
$args[] = $arg;
}
}
unset($config['constructArgs']);
$object = Yii::createObject($className, $args);
} else {
$object = Yii::createObject($className);
}
if (!empty($config)) {
$reflection = new \ReflectionObject($object);
foreach ($config as $name => $value) {
if ($reflection->hasProperty($name) && $reflection->getProperty($name)->isPublic()) {
$object->$name = $value;
} else {
$setter = 'set' . $name;
if ($reflection->hasMethod($setter) || $reflection->hasMethod('__call')) {
$object->$setter($value);
} else {
throw new InvalidConfigException('Setting unknown property: ' . $className . '::' . $name);
}
}
}
}
return $object;
}
Creates email transport instance by its array configuration.
| protected createTransport( array $config ): \Swift_Transport | ||
| $config | array |
Transport configuration. |
| return | \Swift_Transport |
Transport instance. |
|---|---|---|
| throws | \yii\base\InvalidConfigException |
on invalid transport configuration. |
protected function createTransport(array $config)
{
if (!isset($config['class'])) {
$config['class'] = 'Swift_SendmailTransport';
}
if (isset($config['plugins'])) {
$plugins = $config['plugins'];
unset($config['plugins']);
} else {
$plugins = [];
}
if ($this->enableSwiftMailerLogging) {
$plugins[] = [
'class' => 'Swift_Plugins_LoggerPlugin',
'constructArgs' => [
[
'class' => 'yii\swiftmailer\Logger'
]
],
];
}
/* @var $transport \Swift_Transport */
$transport = $this->createSwiftObject($config);
if (!empty($plugins)) {
foreach ($plugins as $plugin) {
if (is_array($plugin) && isset($plugin['class'])) {
$plugin = $this->createSwiftObject($plugin);
}
$transport->registerPlugin($plugin);
}
}
return $transport;
}
| public getSwiftMailer( ): \Swift_Mailer | ||
| return | \Swift_Mailer |
Swift mailer instance. |
|---|---|---|
public function getSwiftMailer()
{
if (!is_object($this->_swiftMailer)) {
$this->_swiftMailer = $this->createSwiftMailer();
}
if (!$this->_transport->ping()) {
$this->_transport->stop();
$this->_transport->start();
}
return $this->_swiftMailer;
}
| public getTransport( ): \Swift_Transport |
public function getTransport()
{
if (!is_object($this->_transport)) {
$this->_transport = $this->createTransport($this->_transport);
}
return $this->_transport;
}
| protected sendMessage( mixed $message ): | ||
| $message | mixed | |
protected function sendMessage($message)
{
/* @var $message Message */
$address = $message->getTo();
if (is_array($address)) {
$address = implode(', ', array_keys($address));
}
Yii::info('Sending email "' . $message->getSubject() . '" to "' . $address . '"', __METHOD__);
return $this->getSwiftMailer()->send($message->getSwiftMessage()) > 0;
}
| public setTransport( array|\Swift_Transport $transport ): mixed | ||
| $transport | array|\Swift_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;
$this->_swiftMailer = null;
}