diff --git a/src/components/AccountForm.vue b/src/components/AccountForm.vue index ac37be97f6..9c5eedda24 100644 --- a/src/components/AccountForm.vue +++ b/src/components/AccountForm.vue @@ -26,7 +26,7 @@ required type="email" @change="clearFeedback" /> -

+

{{ t('mail', 'Please enter an email of the format name@example.com') }}

-

+

{{ t('mail', 'Please enter an email of the format name@example.com') }}

@@ -291,6 +291,7 @@ import { } from '../service/AutoConfigService.js' import { generateOauthState } from '../service/OauthStateService.js' import useMainStore from '../store/mainStore.js' +import { isValidEmail } from '../util/emailAddress.js' export default { name: 'AccountForm', @@ -385,7 +386,7 @@ export default { return this.loading } - return !this.emailAddress || !this.isValidEmail(this.emailAddress) + return !this.emailAddress || !this.validEmail(this.emailAddress) || (!this.googleOauthUrl && !this.autoConfig.password) || (!this.microsoftOauthUrl && !this.autoConfig.password) }, @@ -399,7 +400,7 @@ export default { return this.loading } - return !this.emailAddress || !this.isValidEmail(this.emailAddress) + return !this.emailAddress || !this.validEmail(this.emailAddress) || !this.manualConfig.imapHost || !this.manualConfig.imapPort || !this.manualConfig.imapUser || (!this.useOauth && !this.manualConfig.imapPassword) || !this.manualConfig.smtpHost || !this.manualConfig.smtpPort @@ -730,9 +731,8 @@ export default { } }, - isValidEmail(email) { - const regExpEmail = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@(localhost|((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,})))$/ - return regExpEmail.test(email) + validEmail(email) { + return isValidEmail(email) }, }, } diff --git a/src/util/emailAddress.js b/src/util/emailAddress.js index 8a6ed6e0b1..0b7f15cd49 100644 --- a/src/util/emailAddress.js +++ b/src/util/emailAddress.js @@ -18,7 +18,9 @@ function tryParse(str) { } try { - return addressParser.parse(str).map((addr) => ({ + return addressParser.parse(str).filter((addr) => { + return isValidEmail(addr.address) + }).map((addr) => ({ label: addr.name() || addr.address, email: addr.address, })) @@ -130,3 +132,8 @@ export function parseEmailList(str) { } return list } + +export function isValidEmail(email) { + const regExpEmail = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@(localhost|((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,})))$/ + return regExpEmail.test(email) +}