cacheService = $cacheService; $this->from = $from; $this->to = is_array($to) ? $to : array($to); $this->subject = empty($subject) ? 'API ERROR' : $subject; $this->addHeader(sprintf('From: %s', $from)); $this->maxColumnWidth = $maxColumnWidth; } /** * Add headers to the message * * @param string|array $headers Custom added headers * @return self */ public function addHeader($headers) { 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|array $parameters Custom added parameters * @return self */ public function addParameter($parameters) { $this->parameters = array_merge($this->parameters, (array) $parameters); return $this; } /** * {@inheritdoc} */ protected function send($content, array $records):void { $content = wordwrap($content, $this->maxColumnWidth); $subject = $this->subject; if ($records) { $subjectFormatter = new LineFormatter($this->subject); $subject = $subjectFormatter->format($this->getHighestRecord($records)); } // to avoid bloating inboxes/quotas if($this->cacheService){ if($this->cacheService->exists(self::SENT_ERROR_EMAIL)){ // short circuit Log::debug(sprintf("LaravelMailerHandler::send skipping exception %s %s", $subject, $content)); return; } $this->cacheService->setSingleValue(self::SENT_ERROR_EMAIL, self::SENT_ERROR_EMAIL, self::TIME_BETWEEN_ERRORS); } foreach ($this->to as $to) { Mail::raw($content, function(Message $message) use($to, $subject, $content){ $message ->to($to) ->subject($subject) ->setBody($content, 'text/html') ->setFrom($this->from); }); } } /** * @return string $contentType */ public function getContentType() { return $this->contentType; } /** * @return string $encoding */ public function getEncoding() { return $this->encoding; } /** * @param string $contentType The content type of the email - Defaults to text/plain. Use text/html for HTML * messages. * @return self */ public function setContentType($contentType) { 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; } /** * @param string $encoding * @return self */ public function setEncoding($encoding) { 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; } /** * Gets the default formatter. * * @return FormatterInterface */ protected function getDefaultFormatter(): FormatterInterface { return new LineFormatter(); } }