diff --git a/src/Plugin/Mail/SwiftMailer.php b/src/Plugin/Mail/SwiftMailer.php
index 2844b56..eeda5c1 100644
--- a/src/Plugin/Mail/SwiftMailer.php
+++ b/src/Plugin/Mail/SwiftMailer.php
@@ -588,7 +588,19 @@ public function massageMessageBody(array $message) {
     // separated by the mail line endings. Keep Markup objects and escape others
     // and then treat the result as safe markup.
     $line_endings = Settings::get('mail_line_endings', PHP_EOL);
-    $message['body'] = Markup::create(implode($line_endings, array_map(function ($body) {
+    $applicable_format = $this->getApplicableFormat($message);
+    $message['body'] = Markup::create(implode($line_endings, array_map(function ($body) use ($applicable_format) {
+      // If the body contains no html tags but the applicable format is HTML,
+      // we can assume newlines will need be converted to <br>.
+      if ($applicable_format == SWIFTMAILER_FORMAT_HTML && strlen(strip_tags($body)) === strlen($body)) {
+        // The default fallback format is 'plain_text', which escapes markup,
+        // converts new lines to <br> and converts URLs to links.
+        $build = [
+          '#type' => 'processed_text',
+          '#text' => $body,
+        ];
+        $body = $this->renderer->renderPlain($build);
+      }
       // If $item is not marked safe then it will be escaped.
       return $body instanceof MarkupInterface ? $body : Html::escape($body);
     }, $message['body'])));
