Class luya\components\Mail

Inheritanceluya\components\Mail » yii\base\Component » yii\base\BaseObject
Implementsyii\base\Configurable
Available since version1.0.0

LUYA mail component to compose messages and send them via SMTP.

This component is registered on each LUYA instance, how to use:

if (Yii::$app->mail->compose('Subject', 'Message body of the Mail')->address('info@example.com')->send()) {
    echo "Mail has been sent!";
} else {
    echo "Error" : Yii::$app->mail->error;
}

SMTP debug help:

swaks -s HOST -p 587 -ehlo localhost -au AUTH_USER -to TO_ADDRESSE -tls

Public Properties

Hide inherited properties

Property Type Description Defined By
$altBody string Alternate text message if email client doesn't support HTML luya\components\Mail
$behaviors yii\base\Behavior[] List of behaviors attached to this component. yii\base\Component
$debug boolean When enabled the debug print is echoed directly into the frontend output, this is built in PHPMailer debug. luya\components\Mail
$error string luya\components\Mail
$from string Sender email address, like php@luya.io. luya\components\Mail
$fromName string The from sender name like LUYA Mailer. luya\components\Mail
$host string The host address of the SMTP server for authentification like mail.luya.io, if {{Mail::$isSMTP}} is disabled, this property has no effect. luya\components\Mail
$isSMTP boolean Whether mailer sends mails trough an an smtp server or via php mail() function. luya\components\Mail
$layout string|boolean Define a layout template file which is going to be wrapped around the body() content. luya\components\Mail
$mailer \PHPMailer\PHPMailer\PHPMailer The PHP Mailer object luya\components\Mail
$password string The password which should be used for SMTP auth, if {{Mail::$isSMTP}} is disabled, this property has no effect. luya\components\Mail
$port integer The port which is used to connect to the SMTP server (default is 587), if {{Mail::$isSMTP}} is disabled, this property has no effect. luya\components\Mail
$smtpAuth boolean Whether the SMTP requires authentication or not, enabled by default. luya\components\Mail
$smtpSecure string Posible values are tls or ssl or empty `` (default is tls), if {{Mail::$isSMTP}} is disabled, this property has no effect. luya\components\Mail
$username string The username which should be used for SMTP auth e.g php@luya.io, if {{Mail::$isSMTP}} is disabled, this property has no effect. luya\components\Mail

Public Methods

Hide inherited methods

Method Description Defined By
__call() Calls the named method which is not a class method. yii\base\Component
__clone() This method is called after the object is created by cloning an existing one. yii\base\Component
__construct() Constructor. yii\base\BaseObject
__get() Returns the value of a component property. yii\base\Component
__isset() Checks if a property is set, i.e. defined and not null. yii\base\Component
__set() Sets the value of a component property. yii\base\Component
__unset() Sets a component property to be null. yii\base\Component
addAttachment() Add attachment. luya\components\Mail
addReplyTo() Add ReplyTo Address. luya\components\Mail
address() Add a single address with optional name luya\components\Mail
addresses() Add multiple addresses into the mailer object. luya\components\Mail
attachBehavior() Attaches a behavior to this component. yii\base\Component
attachBehaviors() Attaches a list of behaviors to the component. yii\base\Component
bccAddress() Add a single BCC address with optional name luya\components\Mail
bccAddresses() Add multiple BCC addresses into the mailer object. luya\components\Mail
behaviors() Returns a list of behaviors that this component should behave as. yii\base\Component
body() Set the HTML body for the mailer message, if a layout is defined the layout will automatically wrapped about the html body. luya\components\Mail
canGetProperty() Returns a value indicating whether a property can be read. yii\base\Component
canSetProperty() Returns a value indicating whether a property can be set. yii\base\Component
ccAddress() Add a single CC address with optional name luya\components\Mail
ccAddresses() Add multiple CC addresses into the mailer object. luya\components\Mail
className() Returns the fully qualified name of this class. yii\base\BaseObject
cleanup() Reset the mailer object to null luya\components\Mail
compose() Compose a new mail message. luya\components\Mail
context() Pass option parameters to the layout files. luya\components\Mail
convertMessageToAltBody() Try to convert the message into an alt body tag. luya\components\Mail
detachBehavior() Detaches a behavior from the component. yii\base\Component
detachBehaviors() Detaches all behaviors from the component. yii\base\Component
ensureBehaviors() Makes sure that the behaviors declared in behaviors() are attached to this component. yii\base\Component
getBehavior() Returns the named behavior object. yii\base\Component
getBehaviors() Returns all behaviors attached to this component. yii\base\Component
getError() Get the mailer error info if any. luya\components\Mail
getMailer() Getter for the mailer object luya\components\Mail
hasEventHandlers() Returns a value indicating whether there is any handler attached to the named event. yii\base\Component
hasMethod() Returns a value indicating whether a method is defined. yii\base\Component
hasProperty() Returns a value indicating whether a property is defined for this component. yii\base\Component
init() Initializes the object. yii\base\BaseObject
off() Detaches an existing event handler from this component. yii\base\Component
on() Attaches an event handler to an event. yii\base\Component
render() Render a view file for the given Controller context. luya\components\Mail
send() Trigger the send event of the mailer luya\components\Mail
smtpTest() Test connection for smtp. luya\components\Mail
subject() Set the mail message subject of the mailer instance luya\components\Mail
trigger() Triggers an event. yii\base\Component

Protected Methods

Hide inherited methods

Method Description Defined By
wrapLayout() Wrap the layout from the $layout propertie and store the passed content as $content variable in the view. luya\components\Mail

Property Details

Hide inherited properties

$altBody public property

Alternate text message if email client doesn't support HTML

public string $altBody null
$debug public property

When enabled the debug print is echoed directly into the frontend output, this is built in PHPMailer debug.

public boolean $debug false
$error public read-only property
public string getError ( )
$from public property

Sender email address, like php@luya.io.

public string $from null
$fromName public property

The from sender name like LUYA Mailer.

public string $fromName null
$host public property

The host address of the SMTP server for authentification like mail.luya.io, if {{Mail::$isSMTP}} is disabled, this property has no effect.

public string $host null
$isSMTP public property

Whether mailer sends mails trough an an smtp server or via php mail() function. In order to configure the smtp use:

  • {{Mail::$username}}
  • {{Mail::$password}}
  • {{Mail::$host}}
  • {{Mail::$port}}
  • {{Mail::$smtpSecure}}
  • {{Mail::$smtpAuth}}
public boolean $isSMTP true
$layout public property

Define a layout template file which is going to be wrapped around the body() content. The file alias will be resolved so an example layout could look as followed:

$layout = '@app/views/maillayout.php';

In your config or any mailer object. As in layouts the content of the mail specific html can be access in the $content variable. The example content of maillayout.php from above could look like this:

<h1>My Company</h1>
<div><?= $content; ?></div>
public string|boolean $layout false
$mailer public property

The PHP Mailer object

public \PHPMailer\PHPMailer\PHPMailer $mailer null
$password public property

The password which should be used for SMTP auth, if {{Mail::$isSMTP}} is disabled, this property has no effect.

public string $password null
$port public property

The port which is used to connect to the SMTP server (default is 587), if {{Mail::$isSMTP}} is disabled, this property has no effect.

public integer $port 587
$smtpAuth public property

Whether the SMTP requires authentication or not, enabled by default. If {{Mail::$isSMTP}} is disabled, this property has no effect. If enabled the following properties can be used:

  • {{Mail::$username}}
  • {{Mail::$password}}
public boolean $smtpAuth true
$smtpSecure public property

Posible values are tls or ssl or empty `` (default is tls), if {{Mail::$isSMTP}} is disabled, this property has no effect.

public string $smtpSecure 'tls'
$username public property

The username which should be used for SMTP auth e.g php@luya.io, if {{Mail::$isSMTP}} is disabled, this property has no effect.

public string $username null

Method Details

Hide inherited methods

__call() public method

Defined in: yii\base\Component::__call()

Calls the named method which is not a class method.

This method will check if any attached behavior has the named method and will execute it if available.

Do not call this method directly as it is a PHP magic method that will be implicitly called when an unknown method is being invoked.

public mixed __call ( $name, $params )
$name string

The method name

$params array

Method parameters

return mixed

The method return value

throws yii\base\UnknownMethodException

when calling unknown method

                public function __call($name, $params)
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $object) {
        if ($object->hasMethod($name)) {
            return call_user_func_array([$object, $name], $params);
        }
    }
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__clone() public method

Defined in: yii\base\Component::__clone()

This method is called after the object is created by cloning an existing one.

It removes all behaviors because they are attached to the old object.

public void __clone ( )

                public function __clone()
{
    $this->_events = [];
    $this->_eventWildcards = [];
    $this->_behaviors = null;
}

            
__construct() public method

Defined in: yii\base\BaseObject::__construct()

Constructor.

The default implementation does two things:

  • Initializes the object with the given configuration $config.
  • Call init().

If this method is overridden in a child class, it is recommended that

  • the last parameter of the constructor is a configuration array, like $config here.
  • call the parent implementation at the end of the constructor.
public void __construct ( $config = [] )
$config array

Name-value pairs that will be used to initialize the object properties

                public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

            
__get() public method

Defined in: yii\base\Component::__get()

Returns the value of a component property.

This method will check in the following order and act accordingly:

  • a property defined by a getter: return the getter result
  • a property of a behavior: return the behavior property value

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing $value = $component->property;.

See also __set().

public mixed __get ( $name )
$name string

The property name

return mixed

The property value or the value of a behavior's property

throws yii\base\UnknownPropertyException

if the property is not defined

throws yii\base\InvalidCallException

if the property is write-only.

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        // read property, e.g. getName()
        return $this->$getter();
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name;
        }
    }
    if (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() public method

Defined in: yii\base\Component::__isset()

Checks if a property is set, i.e. defined and not null.

This method will check in the following order and act accordingly:

  • a property defined by a setter: return whether the property is set
  • a property of a behavior: return whether the property is set
  • return false for non existing properties

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing isset($component->property).

See also https://www.php.net/manual/en/function.isset.php.

public boolean __isset ( $name )
$name string

The property name or the event name

return boolean

Whether the named property is set

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name !== null;
        }
    }
    return false;
}

            
__set() public method

Defined in: yii\base\Component::__set()

Sets the value of a component property.

This method will check in the following order and act accordingly:

  • a property defined by a setter: set the property value
  • an event in the format of "on xyz": attach the handler to the event "xyz"
  • a behavior in the format of "as xyz": attach the behavior named as "xyz"
  • a property of a behavior: set the behavior property value

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing $component->property = $value;.

See also __get().

public void __set ( $name, $value )
$name string

The property name or the event name

$value mixed

The property value

throws yii\base\UnknownPropertyException

if the property is not defined

throws yii\base\InvalidCallException

if the property is read-only.

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        // set property
        $this->$setter($value);
        return;
    } elseif (strncmp($name, 'on ', 3) === 0) {
        // on event: attach event handler
        $this->on(trim(substr($name, 3)), $value);
        return;
    } elseif (strncmp($name, 'as ', 3) === 0) {
        // as behavior: attach behavior
        $name = trim(substr($name, 3));
        $this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = $value;
            return;
        }
    }
    if (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}

            
__unset() public method

Defined in: yii\base\Component::__unset()

Sets a component property to be null.

This method will check in the following order and act accordingly:

  • a property defined by a setter: set the property value to be null
  • a property of a behavior: set the property value to be null

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing unset($component->property).

See also https://www.php.net/manual/en/function.unset.php.

public void __unset ( $name )
$name string

The property name

throws yii\base\InvalidCallException

if the property is read only.

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = null;
            return;
        }
    }
    throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}

            
addAttachment() public method

Add attachment.

public luya\components\Mail addAttachment ( $filePath, $name null )
$filePath string

The path to the file, will be checked with is_file.

$name string

An optional name to use for the Attachment.

                public function addAttachment($filePath, $name = null)
{
    $this->getMailer()->addAttachment($filePath, empty($name) ? pathinfo($filePath, PATHINFO_BASENAME) : $name);
    
    return $this;
}

            
addReplyTo() public method

Add ReplyTo Address.

public luya\components\Mail addReplyTo ( $email, $name null )
$email string
$name string

                public function addReplyTo($email, $name = null)
{
    $this->getMailer()->addReplyTo($email, empty($name) ? $email : $name);
    
    return $this;
}

            
address() public method

Add a single address with optional name

public luya\components\Mail address ( $email, $name null )
$email string

The email address e.g. john@example.com

$name string

The name for the address e.g. John Doe

                public function address($email, $name = null)
{
    $this->getMailer()->addAddress($email, (empty($name)) ? $email : $name);
    return $this;
}

            
addresses() public method

Add multiple addresses into the mailer object.

If no key is used, the name is going to be ignored, if a string key is available it represents the name.

addresses(['foo@example.com', 'bar@example.com']);

or with names

addresses(['John Doe' => 'john.doe@example.com', 'Jane Doe' => 'jane.doe@example.com']);
public luya\components\Mail addresses ( array $emails )
$emails array

An array with email addresses or name => email paring to use names.

                public function addresses(array $emails)
{
    foreach ($emails as $name => $mail) {
        if (is_int($name)) {
            $this->address($mail);
        } else {
            $this->address($mail, $name);
        }
    }
    
    return $this;
}

            
attachBehavior() public method

Defined in: yii\base\Component::attachBehavior()

Attaches a behavior to this component.

This method will create the behavior object based on the given configuration. After that, the behavior object will be attached to this component by calling the yii\base\Behavior::attach() method.

See also detachBehavior().

public yii\base\Behavior attachBehavior ( $name, $behavior )
$name string

The name of the behavior.

$behavior string|array|yii\base\Behavior

The behavior configuration. This can be one of the following:

return yii\base\Behavior

The behavior object

                public function attachBehavior($name, $behavior)
{
    $this->ensureBehaviors();
    return $this->attachBehaviorInternal($name, $behavior);
}

            
attachBehaviors() public method

Defined in: yii\base\Component::attachBehaviors()

Attaches a list of behaviors to the component.

Each behavior is indexed by its name and should be a yii\base\Behavior object, a string specifying the behavior class, or an configuration array for creating the behavior.

See also attachBehavior().

public void attachBehaviors ( $behaviors )
$behaviors array

List of behaviors to be attached to the component

                public function attachBehaviors($behaviors)
{
    $this->ensureBehaviors();
    foreach ($behaviors as $name => $behavior) {
        $this->attachBehaviorInternal($name, $behavior);
    }
}

            
bccAddress() public method

Add a single BCC address with optional name

public luya\components\Mail bccAddress ( $email, $name null )
$email string

The email address e.g. john@example.com

$name string

The name for the address e.g. John Doe

                public function bccAddress($email, $name = null)
{
    $this->getMailer()->addBCC($email, (empty($name)) ? $email : $name);
    return $this;
}

            
bccAddresses() public method

Add multiple BCC addresses into the mailer object.

If no key is used, the name is going to be ignored, if a string key is available it represents the name.

bccAddresses(['foo@example.com', 'bar@example.com']);

or with names

bccAddresses(['John Doe' => 'john.doe@example.com', 'Jane Doe' => 'jane.doe@example.com']);
public luya\components\Mail bccAddresses ( array $emails )
$emails array

An array with email addresses or name => email paring to use names.

                public function bccAddresses(array $emails)
{
    foreach ($emails as $name => $mail) {
        if (is_int($name)) {
            $this->bccAddress($mail);
        } else {
            $this->bccAddress($mail, $name);
        }
    }
    return $this;
}

            
behaviors() public method

Defined in: yii\base\Component::behaviors()

Returns a list of behaviors that this component should behave as.

Child classes may override this method to specify the behaviors they want to behave as.

The return value of this method should be an array of behavior objects or configurations indexed by behavior names. A behavior configuration can be either a string specifying the behavior class or an array of the following structure:

'behaviorName' => [
    'class' => 'BehaviorClass',
    'property1' => 'value1',
    'property2' => 'value2',
]

Note that a behavior class must extend from yii\base\Behavior. Behaviors can be attached using a name or anonymously. When a name is used as the array key, using this name, the behavior can later be retrieved using getBehavior() or be detached using detachBehavior(). Anonymous behaviors can not be retrieved or detached.

Behaviors declared in this method will be attached to the component automatically (on demand).

public array behaviors ( )
return array

The behavior configurations.

                public function behaviors()
{
    return [];
}

            
body() public method

Set the HTML body for the mailer message, if a layout is defined the layout will automatically wrapped about the html body.

public luya\components\Mail body ( $body )
$body string

The HTML body message

                public function body($body)
{
    $message = $this->wrapLayout($body);
    $this->getMailer()->Body = $message;
    $alt = empty($this->altBody) ? $this->convertMessageToAltBody($message) : $this->altBody;
    $this->getMailer()->AltBody = $alt;
    return $this;
}

            
canGetProperty() public method

Defined in: yii\base\Component::canGetProperty()

Returns a value indicating whether a property can be read.

A property can be read if:

  • the class has a getter method associated with the specified name (in this case, property name is case-insensitive);
  • the class has a member variable with the specified name (when $checkVars is true);
  • an attached behavior has a readable property of the given name (when $checkBehaviors is true).

See also canSetProperty().

public boolean canGetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

The property name

$checkVars boolean

Whether to treat member variables as properties

$checkBehaviors boolean

Whether to treat behaviors' properties as properties of this component

return boolean

Whether the property can be read

                public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canGetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
canSetProperty() public method

Defined in: yii\base\Component::canSetProperty()

Returns a value indicating whether a property can be set.

A property can be written if:

  • the class has a setter method associated with the specified name (in this case, property name is case-insensitive);
  • the class has a member variable with the specified name (when $checkVars is true);
  • an attached behavior has a writable property of the given name (when $checkBehaviors is true).

See also canGetProperty().

public boolean canSetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

The property name

$checkVars boolean

Whether to treat member variables as properties

$checkBehaviors boolean

Whether to treat behaviors' properties as properties of this component

return boolean

Whether the property can be written

                public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canSetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
ccAddress() public method

Add a single CC address with optional name

public luya\components\Mail ccAddress ( $email, $name null )
$email string

The email address e.g. john@example.com

$name string

The name for the address e.g. John Doe

                public function ccAddress($email, $name = null)
{
    $this->getMailer()->addCC($email, (empty($name)) ? $email : $name);
    return $this;
}

            
ccAddresses() public method

Add multiple CC addresses into the mailer object.

If no key is used, the name is going to be ignored, if a string key is available it represents the name.

ccAddresses(['foo@example.com', 'bar@example.com']);

or with names

ccAddresses(['John Doe' => 'john.doe@example.com', 'Jane Doe' => 'jane.doe@example.com']);
public luya\components\Mail ccAddresses ( array $emails )
$emails array

An array with email addresses or name => email paring to use names.

                public function ccAddresses(array $emails)
{
    foreach ($emails as $name => $mail) {
        if (is_int($name)) {
            $this->ccAddress($mail);
        } else {
            $this->ccAddress($mail, $name);
        }
    }
    return $this;
}

            
className() public static method
Deprecated since 2.0.14. On PHP >=5.5, use ::class instead.

Defined in: yii\base\BaseObject::className()

Returns the fully qualified name of this class.

public static string className ( )
return string

The fully qualified name of this class.

                public static function className()
{
    return get_called_class();
}

            
cleanup() public method

Reset the mailer object to null

public void cleanup ( )

                public function cleanup()
{
    $this->_mailer = null;
}

            
compose() public method

Compose a new mail message.

Make sure to change mailer object or global variables after composer command, as before it will flush the mailer object.

public luya\components\Mail compose ( $subject null, $body null )
$subject string

The subject of the mail

$body string

The HTML body of the mail message.

                public function compose($subject = null, $body = null)
{
    $this->cleanup();
    if ($subject !== null) {
        $this->subject($subject);
    }
    if ($body !== null) {
        $this->body($body);
    }
    return $this;
}

            
context() public method

Pass option parameters to the layout files.

public luya\components\Mail context ( array $vars )
$vars array

                public function context(array $vars)
{
    $this->_context = $vars;
    
    return $this;
}

            
convertMessageToAltBody() public method (available since version 1.0.11)

Try to convert the message into an alt body tag.

The alt body can only contain chars and newline. Therefore strip all tags and replace ending tags with newlines. Also remove html head if there is any.

public string convertMessageToAltBody ( $message )
$message string

The message to convert into alt body format.

return string

Returns the alt body message compatible content

                public function convertMessageToAltBody($message)
{
    $message = preg_replace('/<head>(.*?)<\/head>/s', '', $message);
    $tags = ['</p>', '<br />', '<br>', '<hr />', '<hr>', '</h1>', '</h2>', '</h3>', '</h4>', '</h5>', '</h6>'];
    return trim(strip_tags(str_replace($tags, PHP_EOL, $message)));
}

            
detachBehavior() public method

Defined in: yii\base\Component::detachBehavior()

Detaches a behavior from the component.

The behavior's yii\base\Behavior::detach() method will be invoked.

public yii\base\Behavior|null detachBehavior ( $name )
$name string

The behavior's name.

return yii\base\Behavior|null

The detached behavior. Null if the behavior does not exist.

                public function detachBehavior($name)
{
    $this->ensureBehaviors();
    if (isset($this->_behaviors[$name])) {
        $behavior = $this->_behaviors[$name];
        unset($this->_behaviors[$name]);
        $behavior->detach();
        return $behavior;
    }
    return null;
}

            
detachBehaviors() public method

Defined in: yii\base\Component::detachBehaviors()

Detaches all behaviors from the component.

public void detachBehaviors ( )

                public function detachBehaviors()
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $name => $behavior) {
        $this->detachBehavior($name);
    }
}

            
ensureBehaviors() public method

Defined in: yii\base\Component::ensureBehaviors()

Makes sure that the behaviors declared in behaviors() are attached to this component.

public void ensureBehaviors ( )

                public function ensureBehaviors()
{
    if ($this->_behaviors === null) {
        $this->_behaviors = [];
        foreach ($this->behaviors() as $name => $behavior) {
            $this->attachBehaviorInternal($name, $behavior);
        }
    }
}

            
getBehavior() public method

Defined in: yii\base\Component::getBehavior()

Returns the named behavior object.

public yii\base\Behavior|null getBehavior ( $name )
$name string

The behavior name

return yii\base\Behavior|null

The behavior object, or null if the behavior does not exist

                public function getBehavior($name)
{
    $this->ensureBehaviors();
    return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}

            
getBehaviors() public method

Defined in: yii\base\Component::getBehaviors()

Returns all behaviors attached to this component.

public yii\base\Behavior[] getBehaviors ( )
return yii\base\Behavior[]

List of behaviors attached to this component

                public function getBehaviors()
{
    $this->ensureBehaviors();
    return $this->_behaviors;
}

            
getError() public method

Get the mailer error info if any.

public string getError ( )

                public function getError()
{
    return $this->getMailer()->ErrorInfo;
}

            
getMailer() public method

Getter for the mailer object

public \PHPMailer\PHPMailer\PHPMailer getMailer ( )

                public function getMailer()
{
    if ($this->_mailer === null) {
        $this->_mailer = new PHPMailer();
        $this->_mailer->CharSet = 'UTF-8';
        $this->_mailer->setFrom((string) $this->from, (string) $this->fromName);
        $this->_mailer->isHTML(true);
        $this->_mailer->XMailer = ' ';
        // if sending over smtp, define the settings for the smpt server
        if ($this->isSMTP) {
            if ($this->debug) {
                $this->_mailer->SMTPDebug = 2;
            }
            $this->_mailer->isSMTP();
            $this->_mailer->SMTPSecure = $this->smtpSecure;
            $this->_mailer->Host = (string) $this->host;
            $this->_mailer->SMTPAuth= $this->smtpAuth;
            $this->_mailer->Username = $this->username;
            $this->_mailer->Password = $this->password;
            $this->_mailer->Port = $this->port;
            $this->_mailer->SMTPOptions = [
                'ssl' => ['verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true],
            ];
        }
    }
    return $this->_mailer;
}

            
hasEventHandlers() public method

Defined in: yii\base\Component::hasEventHandlers()

Returns a value indicating whether there is any handler attached to the named event.

public boolean hasEventHandlers ( $name )
$name string

The event name

return boolean

Whether there is any handler attached to the event.

                public function hasEventHandlers($name)
{
    $this->ensureBehaviors();
    if (!empty($this->_events[$name])) {
        return true;
    }
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
            return true;
        }
    }
    return Event::hasHandlers($this, $name);
}

            
hasMethod() public method

Defined in: yii\base\Component::hasMethod()

Returns a value indicating whether a method is defined.

A method is defined if:

  • the class has a method with the specified name
  • an attached behavior has a method with the given name (when $checkBehaviors is true).
public boolean hasMethod ( $name, $checkBehaviors true )
$name string

The property name

$checkBehaviors boolean

Whether to treat behaviors' methods as methods of this component

return boolean

Whether the method is defined

                public function hasMethod($name, $checkBehaviors = true)
{
    if (method_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->hasMethod($name)) {
                return true;
            }
        }
    }
    return false;
}

            
hasProperty() public method

Defined in: yii\base\Component::hasProperty()

Returns a value indicating whether a property is defined for this component.

A property is defined if:

  • the class has a getter or setter method associated with the specified name (in this case, property name is case-insensitive);
  • the class has a member variable with the specified name (when $checkVars is true);
  • an attached behavior has a property of the given name (when $checkBehaviors is true).

See also:

public boolean hasProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

The property name

$checkVars boolean

Whether to treat member variables as properties

$checkBehaviors boolean

Whether to treat behaviors' properties as properties of this component

return boolean

Whether the property is defined

                public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
    return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}

            
init() public method

Defined in: yii\base\BaseObject::init()

Initializes the object.

This method is invoked at the end of the constructor after the object is initialized with the given configuration.

public void init ( )

                public function init()
{
}

            
off() public method

Defined in: yii\base\Component::off()

Detaches an existing event handler from this component.

This method is the opposite of on().

Note: in case wildcard pattern is passed for event name, only the handlers registered with this wildcard will be removed, while handlers registered with plain names matching this wildcard will remain.

See also on().

public boolean off ( $name, $handler null )
$name string

Event name

$handler callable|null

The event handler to be removed. If it is null, all handlers attached to the named event will be removed.

return boolean

If a handler is found and detached

                public function off($name, $handler = null)
{
    $this->ensureBehaviors();
    if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
        return false;
    }
    if ($handler === null) {
        unset($this->_events[$name], $this->_eventWildcards[$name]);
        return true;
    }
    $removed = false;
    // plain event names
    if (isset($this->_events[$name])) {
        foreach ($this->_events[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_events[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_events[$name] = array_values($this->_events[$name]);
            return true;
        }
    }
    // wildcard event names
    if (isset($this->_eventWildcards[$name])) {
        foreach ($this->_eventWildcards[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_eventWildcards[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
            // remove empty wildcards to save future redundant regex checks:
            if (empty($this->_eventWildcards[$name])) {
                unset($this->_eventWildcards[$name]);
            }
        }
    }
    return $removed;
}

            
on() public method

Defined in: yii\base\Component::on()

Attaches an event handler to an event.

The event handler must be a valid PHP callback. The following are some examples:

function ($event) { ... }         // anonymous function
[$object, 'handleClick']          // $object->handleClick()
['Page', 'handleClick']           // Page::handleClick()
'handleClick'                     // global function handleClick()

The event handler must be defined with the following signature,

function ($event)

where $event is an yii\base\Event object which includes parameters associated with the event.

Since 2.0.14 you can specify event name as a wildcard pattern:

$component->on('event.group.*', function ($event) {
    Yii::trace($event->name . ' is triggered.');
});

See also off().

public void on ( $name, $handler, $data null, $append true )
$name string

The event name

$handler callable

The event handler

$data mixed

The data to be passed to the event handler when the event is triggered. When the event handler is invoked, this data can be accessed via yii\base\Event::$data.

$append boolean

Whether to append new event handler to the end of the existing handler list. If false, the new handler will be inserted at the beginning of the existing handler list.

                public function on($name, $handler, $data = null, $append = true)
{
    $this->ensureBehaviors();
    if (strpos($name, '*') !== false) {
        if ($append || empty($this->_eventWildcards[$name])) {
            $this->_eventWildcards[$name][] = [$handler, $data];
        } else {
            array_unshift($this->_eventWildcards[$name], [$handler, $data]);
        }
        return;
    }
    if ($append || empty($this->_events[$name])) {
        $this->_events[$name][] = [$handler, $data];
    } else {
        array_unshift($this->_events[$name], [$handler, $data]);
    }
}

            
render() public method

Render a view file for the given Controller context.

Assuming the following example inside a controller:

Yii::$app->mail->compose('Send E-Mail')->render('@app/views/_mail', ['foo' => 'bar'])->address('info@luya.io')->send();
public luya\components\Mail render ( $viewFile, array $params = [] )
$viewFile string

The view file to render

$params array

The parameters to pass to the view file.

                public function render($viewFile, array $params = [])
{
    $this->body(Yii::$app->view->render($viewFile, $params));
    
    return $this;
}

            
send() public method

Trigger the send event of the mailer

public boolean send ( )
throws luya\Exception

                public function send()
{
    if (empty($this->mailer->Subject) || empty($this->mailer->Body)) {
        throw new Exception("Mail subject() and body() can not be empty in order to send mail.");
    }
    if (!$this->getMailer()->send()) {
        Yii::error($this->getError(), __METHOD__);
        return false;
    }
    return true;
}

            
smtpTest() public method
public void smtpTest ( $verbose )
$verbose
throws luya\Exception

                public function smtpTest($verbose)
{
    //Create a new SMTP instance
    $smtp = new SMTP();
    
    if ($verbose) {
        // Enable connection-level debug output
        $smtp->do_debug = 3;
    }
    
    try {
        // connect to an SMTP server
        if ($smtp->connect((string) $this->host, $this->port)) {
            // yay hello
            if ($smtp->hello('localhost')) {
                if ($smtp->authenticate($this->username, $this->password)) {
                    return true;
                } else {
                    $data = [$this->host, $this->port, $this->smtpSecure, $this->username];
                    throw new Exception('Authentication failed ('.implode(',', $data).'): '.$smtp->getLastReply() . PHP_EOL . print_r($smtp->getError(), true));
                }
            } else {
                throw new Exception('HELO failed: '.$smtp->getLastReply());
            }
        } else {
            throw new Exception('Connect failed');
        }
    } catch (\Exception $e) {
        $smtp->quit(true);
        throw new \yii\base\Exception($e->getMessage());
    }
}

            
subject() public method

Set the mail message subject of the mailer instance

public luya\components\Mail subject ( $subject )
$subject string

The subject message

                public function subject($subject)
{
    $this->getMailer()->Subject = $subject;
    return $this;
}

            
trigger() public method

Defined in: yii\base\Component::trigger()

Triggers an event.

This method represents the happening of an event. It invokes all attached handlers for the event including class-level handlers.

public void trigger ( $name, yii\base\Event $event null )
$name string

The event name

$event yii\base\Event|null

The event instance. If not set, a default yii\base\Event object will be created.

                public function trigger($name, Event $event = null)
{
    $this->ensureBehaviors();
    $eventHandlers = [];
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (StringHelper::matchWildcard($wildcard, $name)) {
            $eventHandlers[] = $handlers;
        }
    }
    if (!empty($this->_events[$name])) {
        $eventHandlers[] = $this->_events[$name];
    }
    if (!empty($eventHandlers)) {
        $eventHandlers = call_user_func_array('array_merge', $eventHandlers);
        if ($event === null) {
            $event = new Event();
        }
        if ($event->sender === null) {
            $event->sender = $this;
        }
        $event->handled = false;
        $event->name = $name;
        foreach ($eventHandlers as $handler) {
            $event->data = $handler[1];
            call_user_func($handler[0], $event);
            // stop further handling if the event is handled
            if ($event->handled) {
                return;
            }
        }
    }
    // invoke class-level attached handlers
    Event::trigger($this, $name, $event);
}

            
wrapLayout() protected method

Wrap the layout from the $layout propertie and store the passed content as $content variable in the view.

protected string wrapLayout ( $content )
$content string

The content to wrapp inside the layout.

                protected function wrapLayout($content)
{
    // do not wrap the content if layout is turned off.
    if ($this->layout === false) {
        return $content;
    }
    
    $view = Yii::$app->getView();
    
    $vars = array_merge($this->_context, ['content' => $content]);
    
    return $view->renderPhpFile(Yii::getAlias($this->layout), $vars);
}