File: D:/web/matomo.vdk/plugins/CoreAdminHome/vue/src/SmtpSettings/SmtpSettings.vue
<!--
Matomo - free/libre analytics platform
@link https://matomo.org
@license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
-->
<template>
<ContentBlock
:content-title="translate('CoreAdminHome_EmailServerSettings')"
anchor="mailSettings"
>
<div v-form>
<Field
uicontrol="checkbox"
name="mailUseSmtp"
v-model="enabled"
:title="translate('General_UseSMTPServerForEmail')"
:inline-help="translate('General_SelectYesIfYouWantToSendEmailsViaServer')"
/>
<div id="smtpSettings" v-show="enabled">
<Field
uicontrol="text"
name="mailHost"
:model-value="mailHost"
@update:model-value="onUpdateMailHost($event)"
:title="translate('General_SmtpServerAddress')"
/>
<Field
uicontrol="text"
name="mailPort"
v-model="mailPort"
:title="translate('General_SmtpPort')"
:inline-help="translate('General_OptionalSmtpPort')"
/>
<Field
uicontrol="select"
name="mailType"
v-model="mailType"
:title="translate('General_AuthenticationMethodSmtp')"
:options="mailTypes"
:inline-help="translate('General_OnlyUsedIfUserPwdIsSet')"
/>
<Field
uicontrol="text"
name="mailUsername"
v-model="mailUsername"
:title="translate('General_SmtpUsername')"
:inline-help="translate('General_OnlyEnterIfRequired')"
:autocomplete="'off'"
/>
<Field
uicontrol="password"
name="mailPassword"
:model-value="mailPassword"
@update:model-value="onMailPasswordChange($event)"
@click="!passwordChanged && $event.target.select();"
:title="translate('General_SmtpPassword')"
:inline-help="passwordHelp"
:autocomplete="'off'"
v-auto-clear-password
/>
<Field
uicontrol="text"
name="mailFromAddress"
v-model="mailFromAddress"
:title="translate('General_SmtpFromAddress')"
:inline-help="translate('General_SmtpFromEmailHelp', mailHost)"
:autocomplete="'off'"
/>
<Field
uicontrol="text"
name="mailFromName"
v-model="mailFromName"
:title="translate('General_SmtpFromName')"
:inline-help="translate('General_NameShownInTheSenderColumn')"
:autocomplete="'off'"
/>
<Field
uicontrol="select"
name="mailEncryption"
v-model="mailEncryption"
:title="translate('General_SmtpEncryption')"
:options="mailEncryptions"
:inline-help="translate('General_EncryptedSmtpTransport')"
/>
</div>
<SaveButton
@confirm="save()"
:saving="isLoading"
/>
</div>
</ContentBlock>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import {
ContentBlock,
translate,
NotificationsStore,
AjaxHelper,
AutoClearPassword,
} from 'CoreHome';
import {
SaveButton,
Form,
Field,
} from 'CorePluginsAdmin';
interface SmtpSettingsState {
isLoading: boolean;
enabled: boolean;
mailHost: string;
passwordChanged: boolean;
mailPort: number;
mailType: string;
mailUsername: string;
mailPassword: string;
mailFromAddress: string;
mailFromName: string;
mailEncryption: string;
}
interface MailProperty {
transport: string;
host: string;
port: number;
type: string;
username: string;
password: string;
noreply_email_address: string;
noreply_email_name: string;
encryption: string;
}
export default defineComponent({
props: {
mail: {
type: Object,
required: true,
},
mailTypes: {
type: Object,
required: true,
},
mailEncryptions: {
type: Object,
required: true,
},
},
data(): SmtpSettingsState {
const mail = this.mail as MailProperty;
return {
isLoading: false,
enabled: mail.transport === 'smtp',
mailHost: mail.host,
passwordChanged: false,
mailPort: mail.port,
mailType: mail.type,
mailUsername: mail.username,
mailPassword: mail.password ? '******' : '',
mailFromAddress: mail.noreply_email_address,
mailFromName: mail.noreply_email_name,
mailEncryption: mail.encryption,
};
},
components: {
ContentBlock,
Field,
SaveButton,
},
directives: {
Form,
AutoClearPassword,
},
computed: {
passwordHelp() {
const part1 = `${translate('General_OnlyEnterIfRequiredPassword')}<br/>`;
const part2 = `${translate('General_WarningPasswordStored', '<strong>', '</strong>')}<br/>`;
return `${part1}\n${part2}`;
},
},
methods: {
onUpdateMailHost(newValue: string) {
this.mailHost = newValue;
if (this.passwordChanged) {
return;
}
this.mailPassword = '';
this.passwordChanged = true;
},
onMailPasswordChange(newValue: string) {
this.mailPassword = newValue;
this.passwordChanged = true;
},
save() {
this.isLoading = true;
const mailSettings: Record<string, unknown> = {
mailUseSmtp: this.enabled ? '1' : '0',
mailPort: this.mailPort,
mailHost: this.mailHost,
mailType: this.mailType,
mailUsername: this.mailUsername,
mailFromAddress: this.mailFromAddress,
mailFromName: this.mailFromName,
mailEncryption: this.mailEncryption,
};
if (this.passwordChanged) {
mailSettings.mailPassword = this.mailPassword;
}
AjaxHelper.post(
{ module: 'CoreAdminHome', action: 'setMailSettings' },
mailSettings,
{ withTokenInUrl: true },
).then(() => {
const notificationInstanceId = NotificationsStore.show({
message: translate('CoreAdminHome_SettingsSaveSuccess'),
type: 'transient',
id: 'generalSettings',
context: 'success',
});
NotificationsStore.scrollToNotification(notificationInstanceId);
}).finally(() => {
this.isLoading = false;
});
},
},
});
</script>