PendingMail.php
TLDR
The PendingMail
class in the Illuminate\Mail
namespace is a class used for sending emails. It provides methods for setting the recipients, locale, and sending emails.
Methods
__construct(MailerContract $mailer)
This method is the constructor of the PendingMail
class. It accepts an instance of MailerContract
and assigns it to the $mailer
property.
locale(string $locale)
This method sets the locale of the email message. It accepts a string $locale
and returns the current instance of PendingMail
(method chaining).
to(mixed $users)
This method sets the "to" recipients of the email message. It accepts a parameter $users
and assigns it to the $to
property. If a preferred locale is not set and the $users
parameter is an instance of HasLocalePreference
, it automatically sets the locale based on the preferred locale of the user. It returns the current instance of PendingMail
.
cc(mixed $users)
This method sets the "cc" recipients of the email message. It accepts a parameter $users
and assigns it to the $cc
property. It returns the current instance of PendingMail
.
bcc(mixed $users)
This method sets the "bcc" recipients of the email message. It accepts a parameter $users
and assigns it to the $bcc
property. It returns the current instance of PendingMail
.
send(MailableContract $mailable)
This method sends a new mailable message instance. It accepts an instance of MailableContract
and returns an instance of SentMessage
or null
.
queue(MailableContract $mailable)
This method pushes the given mailable onto the queue. It accepts an instance of MailableContract
and returns a mixed result.
later($delay, MailableContract $mailable)
This method delivers the queued message after a specified delay. It accepts a $delay
parameter representing the delay duration and an instance of MailableContract
. It returns a mixed result.
protected function fill(MailableContract $mailable)
This method populates the mailable with the addresses (to, cc, bcc) and locale. It accepts an instance of MailableContract
and returns an instance of Mailable
.
END
<?php
namespace Illuminate\Mail;
use Illuminate\Contracts\Mail\Mailable as MailableContract;
use Illuminate\Contracts\Mail\Mailer as MailerContract;
use Illuminate\Contracts\Translation\HasLocalePreference;
use Illuminate\Support\Traits\Conditionable;
class PendingMail
{
use Conditionable;
/**
* The mailer instance.
*
* @var \Illuminate\Contracts\Mail\Mailer
*/
protected $mailer;
/**
* The locale of the message.
*
* @var string
*/
protected $locale;
/**
* The "to" recipients of the message.
*
* @var array
*/
protected $to = [];
/**
* The "cc" recipients of the message.
*
* @var array
*/
protected $cc = [];
/**
* The "bcc" recipients of the message.
*
* @var array
*/
protected $bcc = [];
/**
* Create a new mailable mailer instance.
*
* @param \Illuminate\Contracts\Mail\Mailer $mailer
* @return void
*/
public function __construct(MailerContract $mailer)
{
$this->mailer = $mailer;
}
/**
* Set the locale of the message.
*
* @param string $locale
* @return $this
*/
public function locale($locale)
{
$this->locale = $locale;
return $this;
}
/**
* Set the recipients of the message.
*
* @param mixed $users
* @return $this
*/
public function to($users)
{
$this->to = $users;
if (! $this->locale && $users instanceof HasLocalePreference) {
$this->locale($users->preferredLocale());
}
return $this;
}
/**
* Set the recipients of the message.
*
* @param mixed $users
* @return $this
*/
public function cc($users)
{
$this->cc = $users;
return $this;
}
/**
* Set the recipients of the message.
*
* @param mixed $users
* @return $this
*/
public function bcc($users)
{
$this->bcc = $users;
return $this;
}
/**
* Send a new mailable message instance.
*
* @param \Illuminate\Contracts\Mail\Mailable $mailable
* @return \Illuminate\Mail\SentMessage|null
*/
public function send(MailableContract $mailable)
{
return $this->mailer->send($this->fill($mailable));
}
/**
* Push the given mailable onto the queue.
*
* @param \Illuminate\Contracts\Mail\Mailable $mailable
* @return mixed
*/
public function queue(MailableContract $mailable)
{
return $this->mailer->queue($this->fill($mailable));
}
/**
* Deliver the queued message after (n) seconds.
*
* @param \DateTimeInterface|\DateInterval|int $delay
* @param \Illuminate\Contracts\Mail\Mailable $mailable
* @return mixed
*/
public function later($delay, MailableContract $mailable)
{
return $this->mailer->later($delay, $this->fill($mailable));
}
/**
* Populate the mailable with the addresses.
*
* @param \Illuminate\Contracts\Mail\Mailable $mailable
* @return \Illuminate\Mail\Mailable
*/
protected function fill(MailableContract $mailable)
{
return tap($mailable->to($this->to)
->cc($this->cc)
->bcc($this->bcc), function (MailableContract $mailable) {
if ($this->locale) {
$mailable->locale($this->locale);
}
});
}
}