330 lines
7.4 KiB
PHP
Executable File
330 lines
7.4 KiB
PHP
Executable File
<?php
|
|
|
|
namespace Illuminate\Mail;
|
|
|
|
use Illuminate\Support\Traits\ForwardsCalls;
|
|
use Swift_Attachment;
|
|
use Swift_Image;
|
|
|
|
/**
|
|
* @mixin \Swift_Message
|
|
*/
|
|
class Message
|
|
{
|
|
use ForwardsCalls;
|
|
|
|
/**
|
|
* The Swift Message instance.
|
|
*
|
|
* @var \Swift_Message
|
|
*/
|
|
protected $swift;
|
|
|
|
/**
|
|
* CIDs of files embedded in the message.
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $embeddedFiles = [];
|
|
|
|
/**
|
|
* Create a new message instance.
|
|
*
|
|
* @param \Swift_Message $swift
|
|
* @return void
|
|
*/
|
|
public function __construct($swift)
|
|
{
|
|
$this->swift = $swift;
|
|
}
|
|
|
|
/**
|
|
* Add a "from" address to the message.
|
|
*
|
|
* @param string|array $address
|
|
* @param string|null $name
|
|
* @return $this
|
|
*/
|
|
public function from($address, $name = null)
|
|
{
|
|
$this->swift->setFrom($address, $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)
|
|
{
|
|
$this->swift->setSender($address, $name);
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Set the "return path" of the message.
|
|
*
|
|
* @param string $address
|
|
* @return $this
|
|
*/
|
|
public function returnPath($address)
|
|
{
|
|
$this->swift->setReturnPath($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) {
|
|
$this->swift->setTo($address, $name);
|
|
|
|
return $this;
|
|
}
|
|
|
|
return $this->addAddresses($address, $name, 'To');
|
|
}
|
|
|
|
/**
|
|
* 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) {
|
|
$this->swift->setCc($address, $name);
|
|
|
|
return $this;
|
|
}
|
|
|
|
return $this->addAddresses($address, $name, 'Cc');
|
|
}
|
|
|
|
/**
|
|
* 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) {
|
|
$this->swift->setBcc($address, $name);
|
|
|
|
return $this;
|
|
}
|
|
|
|
return $this->addAddresses($address, $name, 'Bcc');
|
|
}
|
|
|
|
/**
|
|
* 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)) {
|
|
$this->swift->{"set{$type}"}($address, $name);
|
|
} else {
|
|
$this->swift->{"add{$type}"}($address, $name);
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Set the subject of the message.
|
|
*
|
|
* @param string $subject
|
|
* @return $this
|
|
*/
|
|
public function subject($subject)
|
|
{
|
|
$this->swift->setSubject($subject);
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Set the message priority level.
|
|
*
|
|
* @param int $level
|
|
* @return $this
|
|
*/
|
|
public function priority($level)
|
|
{
|
|
$this->swift->setPriority($level);
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Attach a file to the message.
|
|
*
|
|
* @param string $file
|
|
* @param array $options
|
|
* @return $this
|
|
*/
|
|
public function attach($file, array $options = [])
|
|
{
|
|
$attachment = $this->createAttachmentFromPath($file);
|
|
|
|
return $this->prepAttachment($attachment, $options);
|
|
}
|
|
|
|
/**
|
|
* Create a Swift Attachment instance.
|
|
*
|
|
* @param string $file
|
|
* @return \Swift_Mime_Attachment
|
|
*/
|
|
protected function createAttachmentFromPath($file)
|
|
{
|
|
return Swift_Attachment::fromPath($file);
|
|
}
|
|
|
|
/**
|
|
* Attach in-memory data as an attachment.
|
|
*
|
|
* @param string $data
|
|
* @param string $name
|
|
* @param array $options
|
|
* @return $this
|
|
*/
|
|
public function attachData($data, $name, array $options = [])
|
|
{
|
|
$attachment = $this->createAttachmentFromData($data, $name);
|
|
|
|
return $this->prepAttachment($attachment, $options);
|
|
}
|
|
|
|
/**
|
|
* Create a Swift Attachment instance from data.
|
|
*
|
|
* @param string $data
|
|
* @param string $name
|
|
* @return \Swift_Attachment
|
|
*/
|
|
protected function createAttachmentFromData($data, $name)
|
|
{
|
|
return new Swift_Attachment($data, $name);
|
|
}
|
|
|
|
/**
|
|
* Embed a file in the message and get the CID.
|
|
*
|
|
* @param string $file
|
|
* @return string
|
|
*/
|
|
public function embed($file)
|
|
{
|
|
if (isset($this->embeddedFiles[$file])) {
|
|
return $this->embeddedFiles[$file];
|
|
}
|
|
|
|
return $this->embeddedFiles[$file] = $this->swift->embed(
|
|
Swift_Image::fromPath($file)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Embed in-memory data in the message and get the CID.
|
|
*
|
|
* @param string $data
|
|
* @param string $name
|
|
* @param string|null $contentType
|
|
* @return string
|
|
*/
|
|
public function embedData($data, $name, $contentType = null)
|
|
{
|
|
$image = new Swift_Image($data, $name, $contentType);
|
|
|
|
return $this->swift->embed($image);
|
|
}
|
|
|
|
/**
|
|
* Prepare and attach the given attachment.
|
|
*
|
|
* @param \Swift_Attachment $attachment
|
|
* @param array $options
|
|
* @return $this
|
|
*/
|
|
protected function prepAttachment($attachment, $options = [])
|
|
{
|
|
// First we will check for a MIME type on the message, which instructs the
|
|
// mail client on what type of attachment the file is so that it may be
|
|
// downloaded correctly by the user. The MIME option is not required.
|
|
if (isset($options['mime'])) {
|
|
$attachment->setContentType($options['mime']);
|
|
}
|
|
|
|
// If an alternative name was given as an option, we will set that on this
|
|
// attachment so that it will be downloaded with the desired names from
|
|
// the developer, otherwise the default file names will get assigned.
|
|
if (isset($options['as'])) {
|
|
$attachment->setFilename($options['as']);
|
|
}
|
|
|
|
$this->swift->attach($attachment);
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Get the underlying Swift Message instance.
|
|
*
|
|
* @return \Swift_Message
|
|
*/
|
|
public function getSwiftMessage()
|
|
{
|
|
return $this->swift;
|
|
}
|
|
|
|
/**
|
|
* Dynamically pass missing methods to the Swift instance.
|
|
*
|
|
* @param string $method
|
|
* @param array $parameters
|
|
* @return mixed
|
|
*/
|
|
public function __call($method, $parameters)
|
|
{
|
|
return $this->forwardCallTo($this->swift, $method, $parameters);
|
|
}
|
|
}
|