From 2cb1c1da82e6d55b1a68cd385631dbc1e091b63a Mon Sep 17 00:00:00 2001 From: Rafael Tapia Date: Fri, 3 Nov 2023 17:48:29 -0300 Subject: [PATCH] feat: add endpoint to send welcome email --- apps/meteor/app/api/server/v1/users.ts | 20 ++++++++ apps/meteor/server/main.ts | 1 + .../meteor/server/methods/sendWelcomeEmail.ts | 49 +++++++++++++++++++ packages/rest-typings/src/v1/users.ts | 4 ++ 4 files changed, 74 insertions(+) create mode 100644 apps/meteor/server/methods/sendWelcomeEmail.ts diff --git a/apps/meteor/app/api/server/v1/users.ts b/apps/meteor/app/api/server/v1/users.ts index 0fc509b9215a..256ced775bc3 100644 --- a/apps/meteor/app/api/server/v1/users.ts +++ b/apps/meteor/app/api/server/v1/users.ts @@ -644,6 +644,26 @@ API.v1.addRoute( }, ); +API.v1.addRoute( + 'users.sendWelcomeEmail', + { + authRequired: true, + }, + { + async post() { + const { email } = this.bodyParams; + if (!email) { + return API.v1.failure("The 'email' param is required"); + } + + if (await Meteor.callAsync('sendWelcomeEmail', email)) { + return API.v1.success(); + } + return API.v1.failure(); + }, + }, +); + API.v1.addRoute( 'users.register', { diff --git a/apps/meteor/server/main.ts b/apps/meteor/server/main.ts index b9418fe43830..f8d716d114f1 100644 --- a/apps/meteor/server/main.ts +++ b/apps/meteor/server/main.ts @@ -63,6 +63,7 @@ import './methods/saveUserPreferences'; import './methods/saveUserProfile'; import './methods/sendConfirmationEmail'; import './methods/sendForgotPasswordEmail'; +import './methods/sendWelcomeEmail'; import './methods/setAvatarFromService'; import './methods/setUserActiveStatus'; import './methods/setUserPassword'; diff --git a/apps/meteor/server/methods/sendWelcomeEmail.ts b/apps/meteor/server/methods/sendWelcomeEmail.ts new file mode 100644 index 000000000000..098bf58984da --- /dev/null +++ b/apps/meteor/server/methods/sendWelcomeEmail.ts @@ -0,0 +1,49 @@ +import { Users } from '@rocket.chat/models'; +import type { ServerMethods } from '@rocket.chat/ui-contexts'; +import { check } from 'meteor/check'; +import { Meteor } from 'meteor/meteor'; + +import * as Mailer from '../../app/mailer/server/api'; +import { settings } from '../../app/settings/server'; + +declare module '@rocket.chat/ui-contexts' { + // eslint-disable-next-line @typescript-eslint/naming-convention + interface ServerMethods { + sendWelcomeEmail(to: string): boolean | undefined; + } +} + +Meteor.methods({ + async sendWelcomeEmail(to) { + check(to, String); + + const email = to.trim(); + + const user = await Users.findOneByEmailAddress(email, { projection: { _id: 1 } }); + + if (!user) { + return false; + } + + try { + let html = ''; + Mailer.getTemplate('Accounts_UserAddedEmail_Email', (template) => { + html = template; + }); + + await Mailer.send({ + to: email, + from: settings.get('From_Email'), + subject: settings.get('Accounts_UserAddedEmail_Subject'), + html, + }); + + return true; + } catch (error: any) { + throw new Meteor.Error('error-email-send-failed', `Error trying to send email: ${error.message}`, { + method: 'sendWelcomeEmail', + message: error.message, + }); + } + }, +}); diff --git a/packages/rest-typings/src/v1/users.ts b/packages/rest-typings/src/v1/users.ts index 8e08b3a4ba27..a58720f04db8 100644 --- a/packages/rest-typings/src/v1/users.ts +++ b/packages/rest-typings/src/v1/users.ts @@ -157,6 +157,10 @@ export type UsersEndpoints = { }>; }; + '/v1/users.sendWelcomeEmail': { + POST: (params: { email: string }) => void; + }; + '/v1/users.setAvatar': { POST: (params: UsersSetAvatar) => void; };