Skip to main content
Version: 11.x

Mails

Definition

The Mail component allows you to describe an email and send it whenever needed.

Principles

  • Containers MAY or MAY NOT have one or more Mail.

  • Ship may contain general Mails.

Rules

  • All Notifications MUST extend from App\Ship\Parents\Mails\Mail.
  • Email Templates must be placed inside the Mail directory in a Templates directory app/Containers/{section}/{container}/Mails/Templates.

Folder Structure

- app
- Containers
- {section-name}
- {container-name}
- Mails
- UserRegisteredMail.php
- ...
- Templates
- user-registered.blade.php
- ...
- Ship
- Mails
- SomeMail.php
- ...
- Templates
- some-template.blade.php
- ...

Code Samples

A simple Mail

class UserRegisteredMail extends Mail implements ShouldQueue
{
use Queueable;

protected $user;

public function __construct(User $user)
{
$this->user = $user;
}

public function build()
{
return $this->view('appSection@user::user-registered')
->to($this->user->email, $this->user->name)
->with([
'name' => $this->user->name,
]);
}
}

Usage from an Action

Notifications can be sent from Actions or Tasks using the Mail Facade.

Mail::send(new UserRegisteredMail($user));

Email Templates

Templates should be placed inside a folder Templates inside the Mail folder.

To access a Mail template (same like accessing a web view) you must call the camelCase of its Section name + @ + camelCase of its Container name.

In the example below we're using the user-registered.blade.php template in the AppSection Section > User Container.

$this->view('appSection@user::user-registered');

Configure Emails

Open the .env file and set the from mail and address. This will be used globally whenever the from function is not called in the Mail.

[email protected]
MAIL_FROM_NAME="apiato"

To use different email address in some classes add ->to($this->email, $this->name) to the build function in your Mail class.

By default Apiato is configured to use Log Driver MAIL_DRIVER=log, you can change that from the .env file.

Queueing A Notification

To queue a notification you should use Illuminate\Bus\Queueable and implement Illuminate\Contracts\Queue\ShouldQueue.

Further reading

More info at Laravel Docs.