167 lines
3.5 KiB
PHP
167 lines
3.5 KiB
PHP
<?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);
|
|
}
|
|
});
|
|
}
|
|
}
|