Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Mail/Message.php
Строк: 330
<?php

namespace IlluminateMail;

use 
IlluminateContractsMailAttachable;
use 
IlluminateSupportStr;
use 
IlluminateSupportTraitsForwardsCalls;
use 
SymfonyComponentMimeAddress;
use 
SymfonyComponentMimeEmail;
use 
SymfonyComponentMimePartDataPart;
use 
SymfonyComponentMimePartFile;

/**
 * @mixin SymfonyComponentMimeEmail
 */
class Message
{
    use 
ForwardsCalls;

    
/**
     * The Symfony Email instance.
     *
     * @var SymfonyComponentMimeEmail
     */
    
protected $message;

    
/**
     * CIDs of files embedded in the message.
     *
     * @deprecated Will be removed in a future Laravel version.
     *
     * @var array
     */
    
protected $embeddedFiles = [];

    
/**
     * Create a new message instance.
     *
     * @param  SymfonyComponentMimeEmail  $message
     * @return void
     */
    
public function __construct(Email $message)
    {
        
$this->message $message;
    }

    
/**
     * Add a "from" address to the message.
     *
     * @param  string|array  $address
     * @param  string|null  $name
     * @return $this
     */
    
public function from($address$name null)
    {
        
is_array($address)
            ? 
$this->message->from(...$address)
            : 
$this->message->from(new Address($address, (string) $name));

        return 
$this;
    }

    
/**
     * Set the "sender" of the message.
     *
     * @param  string|array  $address
     * @param  string|null  $name
     * @return $this
     */
    
public function sender($address$name null)
    {
        
is_array($address)
            ? 
$this->message->sender(...$address)
            : 
$this->message->sender(new Address($address, (string) $name));

        return 
$this;
    }

    
/**
     * Set the "return path" of the message.
     *
     * @param  string  $address
     * @return $this
     */
    
public function returnPath($address)
    {
        
$this->message->returnPath($address);

        return 
$this;
    }

    
/**
     * Add a recipient to the message.
     *
     * @param  string|array  $address
     * @param  string|null  $name
     * @param  bool  $override
     * @return $this
     */
    
public function to($address$name null$override false)
    {
        if (
$override) {
            
is_array($address)
                ? 
$this->message->to(...$address)
                : 
$this->message->to(new Address($address, (string) $name));

            return 
$this;
        }

        return 
$this->addAddresses($address$name'To');
    }

    
/**
     * Remove all "to" addresses from the message.
     *
     * @return $this
     */
    
public function forgetTo()
    {
        if (
$header $this->message->getHeaders()->get('To')) {
            
$this->addAddressDebugHeader('X-To'$this->message->getTo());

            
$header->setAddresses([]);
        }

        return 
$this;
    }

    
/**
     * Add a carbon copy to the message.
     *
     * @param  string|array  $address
     * @param  string|null  $name
     * @param  bool  $override
     * @return $this
     */
    
public function cc($address$name null$override false)
    {
        if (
$override) {
            
is_array($address)
                ? 
$this->message->cc(...$address)
                : 
$this->message->cc(new Address($address, (string) $name));

            return 
$this;
        }

        return 
$this->addAddresses($address$name'Cc');
    }

    
/**
     * Remove all carbon copy addresses from the message.
     *
     * @return $this
     */
    
public function forgetCc()
    {
        if (
$header $this->message->getHeaders()->get('Cc')) {
            
$this->addAddressDebugHeader('X-Cc'$this->message->getCC());

            
$header->setAddresses([]);
        }

        return 
$this;
    }

    
/**
     * Add a blind carbon copy to the message.
     *
     * @param  string|array  $address
     * @param  string|null  $name
     * @param  bool  $override
     * @return $this
     */
    
public function bcc($address$name null$override false)
    {
        if (
$override) {
            
is_array($address)
                ? 
$this->message->bcc(...$address)
                : 
$this->message->bcc(new Address($address, (string) $name));

            return 
$this;
        }

        return 
$this->addAddresses($address$name'Bcc');
    }

    
/**
     * Remove all of the blind carbon copy addresses from the message.
     *
     * @return $this
     */
    
public function forgetBcc()
    {
        if (
$header $this->message->getHeaders()->get('Bcc')) {
            
$this->addAddressDebugHeader('X-Bcc'$this->message->getBcc());

            
$header->setAddresses([]);
        }

        return 
$this;
    }

    
/**
     * Add a "reply to" address to the message.
     *
     * @param  string|array  $address
     * @param  string|null  $name
     * @return $this
     */
    
public function replyTo($address$name null)
    {
        return 
$this->addAddresses($address$name'ReplyTo');
    }

    
/**
     * Add a recipient to the message.
     *
     * @param  string|array  $address
     * @param  string  $name
     * @param  string  $type
     * @return $this
     */
    
protected function addAddresses($address$name$type)
    {
        if (
is_array($address)) {
            
$type lcfirst($type);

            
$addresses collect($address)->map(function ($address$key) {
                if (
is_string($key) && is_string($address)) {
                    return new 
Address($key$address);
                }

                if (
is_array($address)) {
                    return new 
Address($address['email'] ?? $address['address'], $address['name'] ?? null);
                }

                if (
is_null($address)) {
                    return new 
Address($key);
                }

                return 
$address;
            })->
all();

            
$this->message->{"{$type}"}(...$addresses);
        } else {
            
$this->message->{"add{$type}"}(new Address($address, (string) $name));
        }

        return 
$this;
    }

    
/**
     * Add an address debug header for a list of recipients.
     *
     * @param  string  $header
     * @param  SymfonyComponentMimeAddress[]  $addresses
     * @return $this
     */
    
protected function addAddressDebugHeader(string $header, array $addresses)
    {
        
$this->message->getHeaders()->addTextHeader(
            
$header,
            
implode(', 'array_map(fn ($a) => $a->toString(), $addresses)),
        );

        return 
$this;
    }

    
/**
     * Set the subject of the message.
     *
     * @param  string  $subject
     * @return $this
     */
    
public function subject($subject)
    {
        
$this->message->subject($subject);

        return 
$this;
    }

    
/**
     * Set the message priority level.
     *
     * @param  int  $level
     * @return $this
     */
    
public function priority($level)
    {
        
$this->message->priority($level);

        return 
$this;
    }

    
/**
     * Attach a file to the message.
     *
     * @param  string|IlluminateContractsMailAttachable|IlluminateMailAttachment  $file
     * @param  array  $options
     * @return $this
     */
    
public function attach($file, array $options = [])
    {
        if (
$file instanceof Attachable) {
            
$file $file->toMailAttachment();
        }

        if (
$file instanceof Attachment) {
            return 
$file->attachTo($this);
        }

        
$this->message->attachFromPath($file$options['as'] ?? null$options['mime'] ?? null);

        return 
$this;
    }

    
/**
     * Attach in-memory data as an attachment.
     *
     * @param  string|resource  $data
     * @param  string  $name
     * @param  array  $options
     * @return $this
     */
    
public function attachData($data$name, array $options = [])
    {
        
$this->message->attach($data$name$options['mime'] ?? null);

        return 
$this;
    }

    
/**
     * Embed a file in the message and get the CID.
     *
     * @param  string|IlluminateContractsMailAttachable|IlluminateMailAttachment  $file
     * @return string
     */
    
public function embed($file)
    {
        if (
$file instanceof Attachable) {
            
$file $file->toMailAttachment();
        }

        if (
$file instanceof Attachment) {
            return 
$file->attachWith(
                function (
$path) use ($file) {
                    
$cid $file->as ?? Str::random();

                    
$this->message->addPart(
                        (new 
DataPart(new File($path), $cid$file->mime))->asInline()
                    );

                    return 
"cid:{$cid}";
                },
                function (
$data) use ($file) {
                    
$this->message->addPart(
                        (new 
DataPart($data(), $file->as$file->mime))->asInline()
                    );

                    return 
"cid:{$file->as}";
                }
            );
        }

        
$cid Str::random(10);

        
$this->message->addPart(
            (new 
DataPart(new File($file), $cid))->asInline()
        );

        return 
"cid:$cid";
    }

    
/**
     * Embed in-memory data in the message and get the CID.
     *
     * @param  string|resource  $data
     * @param  string  $name
     * @param  string|null  $contentType
     * @return string
     */
    
public function embedData($data$name$contentType null)
    {
        
$this->message->addPart(
            (new 
DataPart($data$name$contentType))->asInline()
        );

        return 
"cid:$name";
    }

    
/**
     * Get the underlying Symfony Email instance.
     *
     * @return SymfonyComponentMimeEmail
     */
    
public function getSymfonyMessage()
    {
        return 
$this->message;
    }

    
/**
     * Dynamically pass missing methods to the Symfony instance.
     *
     * @param  string  $method
     * @param  array  $parameters
     * @return mixed
     */
    
public function __call($method$parameters)
    {
        return 
$this->forwardDecoratedCallTo($this->message$method$parameters);
    }
}
Онлайн: 0
Реклама