diff options
-rw-r--r-- | client/components/settings/settingBody.jade | 3 | ||||
-rw-r--r-- | client/components/settings/settingBody.js | 16 | ||||
-rw-r--r-- | i18n/en.i18n.json | 5 | ||||
-rw-r--r-- | models/settings.js | 26 |
4 files changed, 50 insertions, 0 deletions
diff --git a/client/components/settings/settingBody.jade b/client/components/settings/settingBody.jade index 2152cc2c..479ccd3e 100644 --- a/client/components/settings/settingBody.jade +++ b/client/components/settings/settingBody.jade @@ -89,6 +89,9 @@ template(name='email') li button.js-save.primary {{_ 'save'}} + li + button.js-send-smtp-test-email.primary {{_ 'send-smtp-test'}} + template(name='accountSettings') ul#account-setting.setting-detail li.smtp-form diff --git a/client/components/settings/settingBody.js b/client/components/settings/settingBody.js index 27f690ee..5b015918 100644 --- a/client/components/settings/settingBody.js +++ b/client/components/settings/settingBody.js @@ -125,6 +125,21 @@ BlazeComponent.extendComponent({ }, + sendSMTPTestEmail() { + Meteor.call('sendSMTPTestEmail', (err, ret) => { + if (!err && ret) { /* eslint-disable no-console */ + const message = `${TAPi18n.__(ret.message)}: ${ret.email}`; + console.log(message); + alert(message); + } else { + const reason = err.reason || ''; + const message = `${TAPi18n.__(err.error)}\n${reason}`; + console.log(message, err); + alert(message); + } /* eslint-enable no-console */ + }); + }, + events(){ return [{ 'click a.js-toggle-registration': this.toggleRegistration, @@ -133,6 +148,7 @@ BlazeComponent.extendComponent({ 'click a.js-toggle-board-choose': this.checkBoard, 'click button.js-email-invite': this.inviteThroughEmail, 'click button.js-save': this.saveMailServerInfo, + 'click button.js-send-smtp-test-email': this.sendSMTPTestEmail, }]; }, }).register('setting'); diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 63e5be1c..91a06ed2 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -184,6 +184,7 @@ "email-enrollAccount-subject": "An account created for you on __siteName__", "email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.", "email-fail": "Sending email failed", + "email-fail-text": "Error trying to send email", "email-invalid": "Invalid email", "email-invite": "Invite via Email", "email-invite-subject": "__inviter__ sent you an invitation", @@ -239,6 +240,7 @@ "initials": "Initials", "invalid-date": "Invalid date", "invalid-time": "Invalid time", + "invalid-user": "Invalid user", "joined": "joined", "just-invited": "You are just invited to this board", "keyboard-shortcuts": "Keyboard shortcuts", @@ -386,9 +388,12 @@ "smtp-password": "Password", "smtp-tls": "TLS support", "send-from": "From", + "send-smtp-test": "Send a test mail to my user", "invitation-code": "Invitation Code", "email-invite-register-subject": "__inviter__ sent you an invitation", "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.", + "email-smtp-test-subject": "SMTP Test Email From Wekan", + "email-smtp-test-text": "You have successfully sent an email", "error-invitation-code-not-exist": "Invitation code doesn't exist", "error-notAuthorized": "You are not authorized to view this page.", "outgoing-webhooks": "Outgoing Webhooks", diff --git a/models/settings.js b/models/settings.js index a02bb3fb..34f693d9 100644 --- a/models/settings.js +++ b/models/settings.js @@ -141,5 +141,31 @@ if (Meteor.isServer) { } }); }, + + sendSMTPTestEmail() { + if (!Meteor.userId()) { + throw new Meteor.Error('invalid-user'); + } + const user = Meteor.user(); + if (!user.emails && !user.emails[0] && user.emails[0].address) { + throw new Meteor.Error('email-invalid'); + } + this.unblock(); + const lang = user.getLanguage(); + try { + Email.send({ + to: user.emails[0].address, + from: Accounts.emailTemplates.from, + subject: TAPi18n.__('email-smtp-test-subject', {lng: lang}), + text: TAPi18n.__('email-smtp-test-text', {lng: lang}), + }); + } catch ({message}) { + throw new Meteor.Error('email-fail', `${TAPi18n.__('email-fail-text', {lng: lang})}: ${ message }`, message); + } + return { + message: 'email-sent', + email: user.emails[0].address, + }; + }, }); } |