master

laravel/framework

Last updated at: 29/12/2023 09:23

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);
                }
            });
    }
}