diff --git a/dashboard/src/models/MailModel.js b/dashboard/src/models/MailModel.js
index 1cce295b0..efdb55fc0 100644
--- a/dashboard/src/models/MailModel.js
+++ b/dashboard/src/models/MailModel.js
@@ -83,6 +83,17 @@ function create() {
if (result.status !== 202) return [result];
return [null];
},
+ async setMailBanner(domain, text, html) {
+ let result;
+ try {
+ result = await fetcher.post(`${API_ORIGIN}/api/v1/mail/${domain}/banner`, { text, html }, { access_token: accessToken });
+ } catch (e) {
+ return [e];
+ }
+
+ if (result.status !== 202) return [result];
+ return [null];
+ },
async setEnabled(domain, enabled) {
let result;
try {
diff --git a/dashboard/src/views/EmailDomainView.vue b/dashboard/src/views/EmailDomainView.vue
index 10e487dee..49a2cda6f 100644
--- a/dashboard/src/views/EmailDomainView.vue
+++ b/dashboard/src/views/EmailDomainView.vue
@@ -94,6 +94,28 @@ async function onToggleMailFromValidation(value) {
mailFromValidationBusy.value = false;
}
+
+const signatureDialog = useTemplateRef('signatureDialog');
+const signatureBusy = ref(false);
+const signatureText = ref('');
+const signatureHtml = ref('');
+
+function onShowSignatureDialog() {
+ signatureBusy.value = false;
+ signatureDialog.value.open();
+}
+
+async function onSubmitSignature() {
+ signatureBusy.value = true;
+
+ const [error] = await mailModel.setMailBanner(domain.value, signatureText.value, signatureHtml.value);
+ if (error) return console.error(error);
+
+ signatureDialog.value.close();
+ signatureBusy.value = false;
+}
+
+
async function refreshMailConfig() {
const [error, result] = await mailModel.config(domain.value);
@@ -102,6 +124,8 @@ async function refreshMailConfig() {
mailConfig.value = result;
incomingEnabled.value = result.enabled;
mailFromValidation.value = result.mailFromValidation;
+ signatureText.value = mailConfig.value.banner.text || '';
+ signatureHtml.value = mailConfig.value.banner.html || '';
refreshBusy.value = false;
}
@@ -123,6 +147,7 @@ onMounted(async () => {