Mails
#
DefinitionThe Mail component allows you to describe an email and send it whenever needed.
For more details refer to this link.
#
PrinciplesContainers 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/{container}/Mails/Templates
.
#
Folder Structure - app - Containers - {container-name} - Mails - UserRegisteredMail.php - ... - Templates - user-registered.blade.php - ... - Ship - Mails - SomeMail.php - ... - Templates - some-template.blade.php - ...
#
Code SamplesExample: a simple Mail
<?php
namespace App\Containers\User\Mails;
use App\Containers\User\Models\User;use Illuminate\Bus\Queueable;use App\Ship\Parents\Mails\Mail;use Illuminate\Contracts\Queue\ShouldQueue;
class UserRegisteredMail extends Mail implements ShouldQueue{ use Queueable;
protected $user;
public function __construct(User $user) { $this->user = $user; }
public function build() { return $this->view('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 TemplatesTemplates 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 container name then the view name.
In the example below we're using the user-registered.blade.php
template in the User Container.
$this->view('user::user-registered')
#
Configure EmailsOpen 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 NotificationTo queue a notification you should use Illuminate\Bus\Queueable
and implement Illuminate\Contracts\Queue\ShouldQueue
.