Class luya\components\Mail
Inheritance | luya\components\Mail » yii\base\Component » yii\base\BaseObject |
---|---|
Implements | yii\base\Configurable |
Available since version | 1.0.0 |
Source Code | https://github.com/luyadev/luya/blob/master/core/components/Mail.php |
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('[email protected]')->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
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 [email protected] . |
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 [email protected] , if {{Mail::$isSMTP}} is disabled, this property has no effect. |
luya\components\Mail |
Public 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
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
Alternate text message if email client doesn't support HTML
When enabled the debug print is echoed directly into the frontend output, this is built in PHPMailer debug.
The host address of the SMTP server for authentification like mail.luya.io
, if {{Mail::$isSMTP}} is disabled, this property has no effect.
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}}
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>
The password which should be used for SMTP auth, if {{Mail::$isSMTP}} is disabled, this property has no effect.
The port which is used to connect to the SMTP server (default is 587), if {{Mail::$isSMTP}} is disabled, this property has no effect.
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}}
Posible values are tls
or ssl
or empty `` (default is tls), if {{Mail::$isSMTP}} is disabled, this property has no effect.
The username which should be used for SMTP auth e.g [email protected]
, if {{Mail::$isSMTP}} is disabled, this property has no effect.
Method Details
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()");
}
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;
}
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();
}
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);
}
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)
.
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;
}
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);
}
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)
.
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);
}
Add attachment.
public luya\components\Mail addAttachment ( $filePath, $name = null ) | ||
$filePath | string |
The path to the file, will be checked with |
$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;
}
Add ReplyTo Address.
public luya\components\Mail addReplyTo ( $email, $name = null ) | ||
string | ||
$name | string |
public function addReplyTo($email, $name = null)
{
$this->getMailer()->addReplyTo($email, empty($name) ? $email : $name);
return $this;
}
Add a single address with optional name
public luya\components\Mail address ( $email, $name = null ) | ||
string |
The email address e.g. [email protected] |
|
$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;
}
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(['[email protected]', '[email protected]']);
or with names
addresses(['John Doe' => '[email protected]', 'Jane Doe' => '[email protected]']);
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;
}
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);
}
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);
}
}
Add a single BCC address with optional name
public luya\components\Mail bccAddress ( $email, $name = null ) | ||
string |
The email address e.g. [email protected] |
|
$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;
}
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(['[email protected]', '[email protected]']);
or with names
bccAddresses(['John Doe' => '[email protected]', 'Jane Doe' => '[email protected]']);
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;
}
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 [];
}
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;
}
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;
}
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;
}
Add a single CC address with optional name
public luya\components\Mail ccAddress ( $email, $name = null ) | ||
string |
The email address e.g. [email protected] |
|
$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;
}
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(['[email protected]', '[email protected]']);
or with names
ccAddresses(['John Doe' => '[email protected]', 'Jane Doe' => '[email protected]']);
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;
}
::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();
}
Reset the mailer object to null
public void cleanup ( ) |
public function cleanup()
{
$this->_mailer = null;
}
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;
}
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;
}
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)));
}
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;
}
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);
}
}
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);
}
}
}
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;
}
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;
}
Get the mailer error info if any.
public string getError ( ) |
public function getError()
{
return $this->getMailer()->ErrorInfo;
}
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;
}
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);
}
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;
}
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);
}
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()
{
}
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;
}
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 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('[email protected]')->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;
}
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;
}
Test connection for smtp.
See also https://github.com/PHPMailer/PHPMailer/blob/master/examples/smtp_check.phps.
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());
}
}
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;
}
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);
}
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);
}