diff --git a/src/Utopia/Messaging/Adapter/Email/SMTP.php b/src/Utopia/Messaging/Adapter/Email/SMTP.php new file mode 100644 index 0000000..7a5a240 --- /dev/null +++ b/src/Utopia/Messaging/Adapter/Email/SMTP.php @@ -0,0 +1,91 @@ +smtpSecure, ['', 'ssl', 'tls'])) { + throw new \InvalidArgumentException('Invalid SMTP secure prefix. Must be "", "ssl" or "tls"'); + } + } + + public function getName(): string + { + return static::NAME; + } + + public function getMaxMessagesPerRequest(): int + { + return 1000; + } + + /** + * {@inheritdoc} + */ + protected function process(EmailMessage $message): array + { + $response = new Response($this->getType()); + $mail = new PHPMailer(); + $mail->isSMTP(); + $mail->XMailer = $this->xMailer; + $mail->Host = $this->host; + $mail->Port = $this->port; + $mail->SMTPAuth = !empty($this->username) && !empty($this->password); + $mail->Username = $this->username; + $mail->Password = $this->password; + $mail->SMTPSecure = $this->smtpSecure; + $mail->SMTPAutoTLS = $this->smtpAutoTLS; + $mail->CharSet = 'UTF-8'; + $mail->Subject = $message->getSubject(); + $mail->Body = $message->getContent(); + $mail->setFrom($message->getFromEmail(), $message->getFromName()); + $mail->addReplyTo($message->getReplyToEmail(), $message->getReplyToName()); + $mail->isHTML($message->isHtml()); + + // Strip tags misses style tags, so we use regex to remove them + $mail->AltBody = \preg_replace('/]*>(.*?)<\/style>/is', '', $mail->Body); + $mail->AltBody = \strip_tags($mail->AltBody); + $mail->AltBody = \trim($mail->AltBody); + + foreach ($message->getTo() as $to) { + $mail->addAddress($to); + } + + $sent = $mail->send(); + + if ($sent) { + $response->setDeliveredTo(\count($message->getTo())); + } + + foreach ($message->getTo() as $to) { + $response->addResultForRecipient($to, $sent ? '' : $mail->ErrorInfo); + } + + return $response->toArray(); + } +}