diff --git a/apimail/static/apimail/assets/vue/components/AttachmentListEditable.vue b/apimail/static/apimail/assets/vue/components/AttachmentListEditable.vue
new file mode 100644
index 0000000000000000000000000000000000000000..1356ff413f6cc4f74213490869966a72173036ab
--- /dev/null
+++ b/apimail/static/apimail/assets/vue/components/AttachmentListEditable.vue
@@ -0,0 +1,45 @@
+<template>
+  <b-row>
+    <b-col class="col-lg-6">
+      <b-form-file
+	multiple
+	v-model="attachments"
+	placeholder="Select a file, or drop it here"
+	drop-placeholder="Drop file here"
+	>
+      </b-form-file>
+    </b-col>
+    <b-col class="col-lg-6">
+      <h3>Attachments:</h3>
+      <ul>
+	<li
+	  is="attachment-list-item"
+	  v-for="(attachment, index) in attachments"
+	  :key="'att-' + index"
+	  :attachment="attachment"
+	  @remove="attachments.splice(index, 1)"
+	  >
+	</li>
+      </ul>
+    </b-col>
+  </b-row>
+</template>
+
+<script>
+
+  import AttachmentListItem from './AttachmentListItem.vue'
+
+  export default {
+  name: "attachment-list-editable",
+  components: {
+  AttachmentListItem,
+  },
+  props: {
+  attachments: {
+  type: Array,
+  required: true,
+  }
+  }
+  }
+
+</script>
diff --git a/apimail/static/apimail/assets/vue/components/AttachmentListItem.vue b/apimail/static/apimail/assets/vue/components/AttachmentListItem.vue
new file mode 100644
index 0000000000000000000000000000000000000000..e9f9b834c910fec9d2121e17dc65ae1943b6c921
--- /dev/null
+++ b/apimail/static/apimail/assets/vue/components/AttachmentListItem.vue
@@ -0,0 +1,20 @@
+<template>
+  <li>
+    {{ attachment.name }}&emsp;({{ attachment.type}}, {{ attachment.size }} bytes)
+    <b-button class="bg-danger p-1" size="sm" @click.stop="$emit('remove')">
+      <i class="small fa fa-times text-white"></i>
+    </b-button>
+  </li>
+</template>
+
+<script>
+  export default {
+  name: "attachment-list-item",
+  props: {
+  attachment: {
+  type: File,
+  required: true,
+  }
+  },
+  }
+</script>
diff --git a/apimail/static/apimail/assets/vue/components/MessageComposer.vue b/apimail/static/apimail/assets/vue/components/MessageComposer.vue
index 6bcaf523e2e849e85587aa4e8cd94bb513885ee7..dceed06cb0efd424ceb9b298d5ca97744e17f5e0 100644
--- a/apimail/static/apimail/assets/vue/components/MessageComposer.vue
+++ b/apimail/static/apimail/assets/vue/components/MessageComposer.vue
@@ -59,6 +59,13 @@
 	</b-form-group>
       </b-col>
     </b-row>
+    <b-form-group
+      id="attachments"
+      label="attachments:"
+      class="mb-4"
+      >
+      <attachment-list-editable :attachments="form.attachments"></attachment-list-editable>
+    </b-form-group>
     <b-form-group
       id="subject"
       label="Subject:"
@@ -136,12 +143,14 @@
 import Cookies from 'js-cookie'
 
 import EmailListEditable from './EmailListEditable.vue'
+import AttachmentListEditable from './AttachmentListEditable.vue'
 
 var csrftoken = Cookies.get('csrftoken');
 
 export default {
     name: "message-composer",
     components: {
+	AttachmentListEditable,
 	EmailListEditable,
     },
     props: {
@@ -168,9 +177,11 @@ export default {
 		subject: '',
 		body: '',
 		sanitized_body_html: '',
+		attachments: [],
 	    },
 	    newcc: '',
 	    newbcc: '',
+	    newattachment: null,
 	    from_account_accesses: [],
 	    response: null,
 	    response_body_json: null,