diff --git a/apimail/migrations/0019_auto_20200210_0859.py b/apimail/migrations/0019_auto_20200210_0859.py
new file mode 100644
index 0000000000000000000000000000000000000000..eae4874a470dceea549ac63628dd0bf8f63af112
--- /dev/null
+++ b/apimail/migrations/0019_auto_20200210_0859.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.1.8 on 2020-02-10 07:59
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('apimail', '0018_attachmentfile_data'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='composedmessage',
+            name='body_text',
+            field=models.TextField(blank=True),
+        ),
+    ]
diff --git a/apimail/models/composed_message.py b/apimail/models/composed_message.py
index ee5d964cca617d06a313f213aa02f3da68a4fdc6..000c094eaf39517bb2f6692fa52aa3a11dcc17a7 100644
--- a/apimail/models/composed_message.py
+++ b/apimail/models/composed_message.py
@@ -64,7 +64,7 @@ class ComposedMessage(models.Model):
 
     subject = models.CharField(max_length=256)
 
-    body_text = models.TextField()
+    body_text = models.TextField(blank=True)
     body_html = models.TextField(blank=True)
 
     attachment_files = models.ManyToManyField(
diff --git a/apimail/static/apimail/assets/vue/components/MessagesTable.vue b/apimail/static/apimail/assets/vue/components/MessagesTable.vue
index 49850d1a819885f87ecd04d65cfae537a3cd6da9..4387652d5122eb0684c96a178b0ad4d4e2c533ea 100644
--- a/apimail/static/apimail/assets/vue/components/MessagesTable.vue
+++ b/apimail/static/apimail/assets/vue/components/MessagesTable.vue
@@ -1,6 +1,31 @@
 <template>
 <div>
 
+  <div v-if="accesses" class="m-2 mb-4">
+    <b-button
+      v-b-modal.modal-newdraft
+      variant="primary"
+      >
+      Compose a new message
+    </b-button>
+
+    <b-modal
+      id="modal-newdraft"
+      size="xl"
+      title="New message"
+      hide-header-close
+      no-close-on-escape
+      no-close-on-backdrop
+      >
+      <message-composer></message-composer>
+      <template v-slot:modal-footer="{ close, }">
+	<b-button size="sm" variant="danger" @click="close()">
+	  Close
+	</b-button>
+      </template>
+    </b-modal>
+  </div>
+
   <b-modal
     id="modal-resumedraft"
     size="xl"
@@ -464,7 +489,8 @@ export default {
 	this.fetchTags()
 	this.fetchDrafts()
 	this.$root.$on('bv::modal::hide', (bvEvent, modalId) => {
-	    if (bvEvent.componentId === 'modal-resumedraft' ||
+	    if (bvEvent.componentId === 'modal-newdraft' ||
+		bvEvent.componentId === 'modal-resumedraft' ||
 		bvEvent.componentId === 'modal-reply' ||
 		bvEvent.componentId === 'modal-forward') {
 		this.fetchDrafts()