Skip to main content
Version: 10.x



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


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

  • Ship may contain general Mails.


  • 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('[email protected]::user-registered')
->to($this->user->email, $this->user->name)
'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('[email protected]::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.


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.

Last updated on by Moslem Deris