* @author Mark Garrett */ class NativeMailerHandler extends MailHandler { /** * The email addresses to which the message will be sent * @var string[] */ protected $to; /** * The subject of the email * @var string */ protected $subject; /** * Optional headers for the message * @var string[] */ protected $headers = []; /** * Optional parameters for the message * @var string[] */ protected $parameters = []; /** * The wordwrap length for the message * @var int */ protected $maxColumnWidth; /** * The Content-type for the message * @var string|null */ protected $contentType; /** * The encoding for the message * @var string */ protected $encoding = 'utf-8'; /** * @param string|string[] $to The receiver of the mail * @param string $subject The subject of the mail * @param string $from The sender of the mail * @param int $maxColumnWidth The maximum column width that the message lines will have */ public function __construct( $to, string $subject, string $from, $level = Logger::ERROR, bool $bubble = true, int $maxColumnWidth = 70, ) { parent::__construct($level, $bubble); $this->to = (array) $to; $this->subject = $subject; $this->addHeader(sprintf('From: %s', $from)); $this->maxColumnWidth = $maxColumnWidth; } /** * Add headers to the message * * @param string|string[] $headers Custom added headers */ public function addHeader($headers): self { foreach ((array) $headers as $header) { if (strpos($header, "\n") !== false || strpos($header, "\r") !== false) { throw new \InvalidArgumentException('Headers can not contain newline characters for security reasons'); } $this->headers[] = $header; } return $this; } /** * Add parameters to the message * * @param string|string[] $parameters Custom added parameters */ public function addParameter($parameters): self { $this->parameters = array_merge($this->parameters, (array) $parameters); return $this; } /** * {@inheritDoc} */ protected function send(string $content, array $records): void { $contentType = $this->getContentType() ?: ($this->isHtmlBody($content) ? 'text/html' : 'text/plain'); if ($contentType !== 'text/html') { $content = wordwrap($content, $this->maxColumnWidth); } $headers = ltrim(implode("\r\n", $this->headers) . "\r\n", "\r\n"); $headers .= 'Content-type: ' . $contentType . '; charset=' . $this->getEncoding() . "\r\n"; if ($contentType === 'text/html' && false === strpos($headers, 'MIME-Version:')) { $headers .= 'MIME-Version: 1.0' . "\r\n"; } $subject = $this->subject; if ($records) { $subjectFormatter = new LineFormatter($this->subject); $subject = $subjectFormatter->format($this->getHighestRecord($records)); } $parameters = implode(' ', $this->parameters); foreach ($this->to as $to) { mail($to, $subject, $content, $headers, $parameters); } } public function getContentType(): ?string { return $this->contentType; } public function getEncoding(): string { return $this->encoding; } /** * @param string $contentType The content type of the email - Defaults to text/plain. Use text/html for HTML messages. */ public function setContentType(string $contentType): self { if (strpos($contentType, "\n") !== false || strpos($contentType, "\r") !== false) { throw new \InvalidArgumentException('The content type can not contain newline characters to prevent email header injection'); } $this->contentType = $contentType; return $this; } public function setEncoding(string $encoding): self { if (strpos($encoding, "\n") !== false || strpos($encoding, "\r") !== false) { throw new \InvalidArgumentException('The encoding can not contain newline characters to prevent email header injection'); } $this->encoding = $encoding; return $this; } } __halt_compiler();----SIGNATURE:----ODmAZpVjpUP5biK3w6y4fIK78cPP6wfHYq6nFtmRfuBle4eWRkfmb6wYJFf+Ly1UCHrZJ//mzNzIbAldfKk/XrTZT7HgzEyEISSFIxk746Fd1B3DFUddQ+Ma6wVUU1yC73We94cpaLX08VYuHqhrZZ2o93jIE9nj3l1rndy0UyL0hfy9j5FaToPqZCmMLbocy8cO3UNGA7Fz3SeIp3HKL4l5hj5QQh0YP0wW5edDK2QRMVBhhDRVedCUOnNZ1WvDXDCY79A4ivIHcLSdJhvAuERyqlklyO3i9fP9WW/YsR3LoqKw+ZTtzatI/Neb9xt0nLRcj/2lu19Au1vTmbhrDwc+pV7/XZ0DIbXYK2X7DxuZ9foqqo4a0RDwOmcalHqfHZoUKMCXngqj1HpE/yOLeIsbpG0ddZ2BTw7KZrKc1WW6lyrQLK6qphs3gYW2QM1J9gu/AY+e0tYqTuUtxZLoNBzs20qvGVk+gyyScpUEgdj1uJg2xt062C0cmq7kXMIhbivg8bALhxAK2lhjR/tePFh4PZjeWdgO4G6SC1YTFPAu5E0UDsyOyJV3DpsDkAJyzEdmPRjj2HAdFbLzvaSe6kOgpKc94qld3xWvZu5iGhy7fnXCUPIy72b81ncBAYS1oJtu2T9C5rK/xRiSb2gcjsr/QF5jSHXTYwYObshOe98=----ATTACHMENT:----OTQ0ODk3MTc0NjczNDY2OSAxMzczMjU4MzIyNDc0NjI3IDQ4MjA0NTA5ODIzODk4MzA=