diff --git a/config/install/swiftmailer.message.yml b/config/install/swiftmailer.message.yml
index fa86216..20a47be 100644
--- a/config/install/swiftmailer.message.yml
+++ b/config/install/swiftmailer.message.yml
@@ -1,4 +1,5 @@
 format: text/plain
+filter_format: plain_text
 respect_format: true
 convert_mode: false
 character_set: UTF-8
diff --git a/config/schema/swiftmailer.schema.yml b/config/schema/swiftmailer.schema.yml
index bbfa947..5235b9f 100644
--- a/config/schema/swiftmailer.schema.yml
+++ b/config/schema/swiftmailer.schema.yml
@@ -5,6 +5,9 @@ swiftmailer.message:
     format:
       type: string
       label: 'Message format'
+    filter_format:
+      type: string
+      label: 'Filter format'
     respect_format:
       type: boolean
       label: 'Respect format'
diff --git a/src/Plugin/Mail/SwiftMailer.php b/src/Plugin/Mail/SwiftMailer.php
index 48669fe..ae30344 100644
--- a/src/Plugin/Mail/SwiftMailer.php
+++ b/src/Plugin/Mail/SwiftMailer.php
@@ -588,7 +588,21 @@ 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);
+    $filter_format = $this->config['message']['filter_format'];
+    $message['body'] = Markup::create(implode($line_endings, array_map(function ($body) use ($applicable_format, $filter_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 && Unicode::strlen(strip_tags($body)) === Unicode::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,
+          '#format' => $filter_format,
+        ];
+        $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'])));
diff --git a/swiftmailer.install b/swiftmailer.install
index 815138e..1a9b6ab 100644
--- a/swiftmailer.install
+++ b/swiftmailer.install
@@ -32,3 +32,12 @@ function swiftmailer_install() {
     'sender' => 'swiftmailer',
   ])->save();
 }
+
+/**
+ * Set default filter_format for HTML emails with no HTML markup.
+ */
+function swiftmailer_update_8400() {
+ Drupal::configFactory()->getEditable('swiftmailer.message')
+   ->set('filter_format', 'plain_text')
+   ->save();
+}
diff --git a/tests/src/Kernel/Plugin/Mail/SwiftMailerTest.php b/tests/src/Kernel/Plugin/Mail/SwiftMailerTest.php
new file mode 100644
index 0000000..39d13c9
--- /dev/null
+++ b/tests/src/Kernel/Plugin/Mail/SwiftMailerTest.php
@@ -0,0 +1,81 @@
+<?php
+
+namespace Drupal\Tests\swiftmailer\Kernel\Plugin\Mail;
+
+use Drupal\Core\Render\Markup;
+use Drupal\KernelTests\KernelTestBase;
+use Drupal\swiftmailer\Utility\Conversion;
+
+/**
+ * @coversDefaultClass \Drupal\swiftmailer\Plugin\Mail\SwiftMailer
+ * @group swiftmailer
+ */
+class SwiftMailerTest extends KernelTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'user',
+    'filter',
+    'swiftmailer',
+  ];
+
+  /**
+   * The swiftmailer plugin.
+   * 
+   * @var \Drupal\swiftmailer\Plugin\Mail\SwiftMailer
+   */
+  protected $plugin;
+  
+  public function setUp() {
+    parent::setUp();
+    $this->installConfig([
+      'swiftmailer',
+      'filter',
+    ]);
+    $this->installEntitySchema('user');
+    $this->installSchema('user', 'users_data');
+    $this->plugin = $this->container->get('plugin.manager.mail')
+      ->createInstance('swiftmailer');
+  }
+
+  /**
+   * Tests massaging the message body.
+   *
+   * @dataProvider bodyDataProvider
+   */
+  public function testMassageMessageBody(array $message, $expected) {
+    $message['params']['format'] = SWIFTMAILER_FORMAT_HTML;
+    $actual = $this->plugin->massageMessageBody($message);
+    $this->assertSame($expected, (string) $actual['body']);
+  }
+
+  /**
+   * Data provider of body data with markup and without HTML markup.
+   */
+  public function bodyDataProvider() {
+    return [
+      'with html' => [
+        'message' => [
+          'body' => [
+            Markup::create('<p>Lorem ipsum dolor sit amet</p>'),
+            Markup::create('<p>consetetur sadipscing elitr</p>'),
+            Markup::create('<p>sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat</p>'),
+            Markup::create('<p>sed diam voluptua.</p>'),
+          ],
+        ],
+        'expected' => "<p>Lorem ipsum dolor sit amet</p>\n<p>consetetur sadipscing elitr</p>\n<p>sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat</p>\n<p>sed diam voluptua.</p>",
+      ],
+      'no html' => [
+        'message' => [
+          'body' => [
+            "Lorem ipsum dolor sit amet\nconsetetur sadipscing elitr\nsed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat\nsed diam voluptua.",
+          ],
+        ],
+        'expected' => "<p>Lorem ipsum dolor sit amet<br />\nconsetetur sadipscing elitr<br />\nsed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat<br />\nsed diam voluptua.</p>\n",
+      ],
+    ];
+  }
+
+}
