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/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
PHP mail()
function 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 | array|\Swift_Mailer | Swift mailer instance or array configuration. | yii\swiftmailer\Mailer |
$transport | array|\Swift_Transport | This property is read-only. | 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.
Swift mailer instance or array configuration. This property is read-only.
This property is read-only.
Method Details
Creates Swift mailer instance.
protected \Swift_Mailer createSwiftMailer ( ) | ||
return | \Swift_Mailer |
Mailer instance. |
---|
protected function createSwiftMailer()
{
return \Swift_Mailer::newInstance($this->getTransport());
}
Creates Swift library object, from given array configuration.
protected object createSwiftObject ( array $config ) | ||
$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 \Swift_Transport createTransport ( array $config ) | ||
$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_MailTransport';
}
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_MailTransport */
$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 array|\Swift_Mailer getSwiftMailer ( ) | ||
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;
}
public array|\Swift_Transport getTransport ( ) |
public function getTransport()
{
if (!is_object($this->_transport)) {
$this->_transport = $this->createTransport($this->_transport);
}
return $this->_transport;
}
protected void sendMessage ( $message ) | ||
$message |
protected function sendMessage($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 void setTransport ( $transport ) | ||
$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;
}