From 9d4bda53dabf8f8bc72400f0a71e1a296a6f98ed Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Mon, 24 Nov 2025 14:42:56 +0100 Subject: [PATCH] remove email from backend --- backend/src/emails/README.md | 50 - .../sendEmailVariants.test.ts.snap | 1736 ----------------- .../src/emails/sendEmailTranslated.test.ts | 149 -- backend/src/emails/sendEmailTranslated.ts | 118 -- backend/src/emails/sendEmailVariants.test.ts | 623 ------ backend/src/emails/sendEmailVariants.ts | 225 --- .../templates/accountActivation/html.pug | 18 - .../templates/accountActivation/subject.pug | 1 - .../accountMultiRegistration/html.pug | 22 - .../accountMultiRegistration/subject.pug | 1 - .../addedContributionMessage/html.pug | 16 - .../addedContributionMessage/subject.pug | 1 - .../contributionChangedByModerator/html.pug | 10 - .../subject.pug | 1 - .../templates/contributionConfirmed/html.pug | 10 - .../contributionConfirmed/subject.pug | 1 - .../templates/contributionDeleted/html.pug | 10 - .../templates/contributionDeleted/subject.pug | 1 - .../templates/contributionDenied/html.pug | 10 - .../templates/contributionDenied/subject.pug | 1 - .../src/emails/templates/includes/Chatbox.svg | 1 - .../templates/includes/answear_button.svg | 22 - .../templates/includes/chatbox-icon.png | Bin 323 -> 0 bytes .../templates/includes/chatbox-icon.pug | 6 - .../includes/contributionDetailsCTA.pug | 7 - .../emails/templates/includes/doNotReply.pug | 1 - .../src/emails/templates/includes/email.css | 216 -- .../templates/includes/facebook-icon.png | Bin 1449 -> 0 bytes .../src/emails/templates/includes/footer.pug | 77 - .../templates/includes/gradido-header.jpeg | Bin 9427 -> 0 bytes .../emails/templates/includes/greeting.pug | 6 - .../src/emails/templates/includes/header.pug | 13 - .../templates/includes/requestNewLink.pug | 10 - .../emails/templates/includes/salutation.pug | 1 - .../templates/includes/telegram-icon.png | Bin 2159 -> 0 bytes .../templates/includes/twitter-icon.png | Bin 2002 -> 0 bytes .../src/emails/templates/includes/webflow.css | 166 -- .../templates/includes/youtube-icon.png | Bin 1802 -> 0 bytes backend/src/emails/templates/layout.pug | 26 - .../emails/templates/resetPassword/html.pug | 16 - .../templates/resetPassword/subject.pug | 1 - .../transactionLinkRedeemed/html.pug | 18 - .../transactionLinkRedeemed/subject.pug | 1 - .../templates/transactionReceived/html.pug | 30 - .../templates/transactionReceived/subject.pug | 1 - 45 files changed, 3623 deletions(-) delete mode 100644 backend/src/emails/README.md delete mode 100644 backend/src/emails/__snapshots__/sendEmailVariants.test.ts.snap delete mode 100644 backend/src/emails/sendEmailTranslated.test.ts delete mode 100644 backend/src/emails/sendEmailTranslated.ts delete mode 100644 backend/src/emails/sendEmailVariants.test.ts delete mode 100644 backend/src/emails/sendEmailVariants.ts delete mode 100644 backend/src/emails/templates/accountActivation/html.pug delete mode 100644 backend/src/emails/templates/accountActivation/subject.pug delete mode 100644 backend/src/emails/templates/accountMultiRegistration/html.pug delete mode 100644 backend/src/emails/templates/accountMultiRegistration/subject.pug delete mode 100644 backend/src/emails/templates/addedContributionMessage/html.pug delete mode 100644 backend/src/emails/templates/addedContributionMessage/subject.pug delete mode 100644 backend/src/emails/templates/contributionChangedByModerator/html.pug delete mode 100644 backend/src/emails/templates/contributionChangedByModerator/subject.pug delete mode 100644 backend/src/emails/templates/contributionConfirmed/html.pug delete mode 100644 backend/src/emails/templates/contributionConfirmed/subject.pug delete mode 100644 backend/src/emails/templates/contributionDeleted/html.pug delete mode 100644 backend/src/emails/templates/contributionDeleted/subject.pug delete mode 100644 backend/src/emails/templates/contributionDenied/html.pug delete mode 100644 backend/src/emails/templates/contributionDenied/subject.pug delete mode 100644 backend/src/emails/templates/includes/Chatbox.svg delete mode 100644 backend/src/emails/templates/includes/answear_button.svg delete mode 100644 backend/src/emails/templates/includes/chatbox-icon.png delete mode 100644 backend/src/emails/templates/includes/chatbox-icon.pug delete mode 100644 backend/src/emails/templates/includes/contributionDetailsCTA.pug delete mode 100644 backend/src/emails/templates/includes/doNotReply.pug delete mode 100644 backend/src/emails/templates/includes/email.css delete mode 100644 backend/src/emails/templates/includes/facebook-icon.png delete mode 100644 backend/src/emails/templates/includes/footer.pug delete mode 100644 backend/src/emails/templates/includes/gradido-header.jpeg delete mode 100644 backend/src/emails/templates/includes/greeting.pug delete mode 100644 backend/src/emails/templates/includes/header.pug delete mode 100644 backend/src/emails/templates/includes/requestNewLink.pug delete mode 100644 backend/src/emails/templates/includes/salutation.pug delete mode 100644 backend/src/emails/templates/includes/telegram-icon.png delete mode 100644 backend/src/emails/templates/includes/twitter-icon.png delete mode 100644 backend/src/emails/templates/includes/webflow.css delete mode 100644 backend/src/emails/templates/includes/youtube-icon.png delete mode 100644 backend/src/emails/templates/layout.pug delete mode 100644 backend/src/emails/templates/resetPassword/html.pug delete mode 100644 backend/src/emails/templates/resetPassword/subject.pug delete mode 100644 backend/src/emails/templates/transactionLinkRedeemed/html.pug delete mode 100644 backend/src/emails/templates/transactionLinkRedeemed/subject.pug delete mode 100644 backend/src/emails/templates/transactionReceived/html.pug delete mode 100644 backend/src/emails/templates/transactionReceived/subject.pug diff --git a/backend/src/emails/README.md b/backend/src/emails/README.md deleted file mode 100644 index 9ab1d1124..000000000 --- a/backend/src/emails/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# Using `forwardemail`–`email-templates` With `pug` Package - -You'll find the GitHub repository of the `email-templates` package and the `pug` package here: - -- [email-templates](https://github.com/forwardemail/email-templates) -- [pug](https://www.npmjs.com/package/pug) - -## `pug` Documentation - -The full `pug` documentation you'll find here: - -- [pugjs.org](https://pugjs.org/) - -### Caching Possibility - -In case we are sending many emails in the future there is the possibility to cache the `pug` templates: - -- [cache-pug-templates](https://github.com/ladjs/cache-pug-templates) - -## Testing - -To test your send emails you have different possibilities: - -### In General - -To send emails to yourself while developing set in `.env` the value `EMAIL_TEST_MODUS=true` and `EMAIL_TEST_RECEIVER` to your preferred email address. - -### Unit Or Integration Tests - -To change the behavior to show previews etc. you have the following options to be set in `sendEmailTranslated.ts` on creating the email object: - -```js - const email = new Email({ - … - // send emails in development/test env: - send: true, - … - // to open send emails in the browser - preview: true, - // or - // to open send emails in a specific the browser - preview: { - open: { - app: 'firefox', - wait: false, - }, - }, - … - }) -``` diff --git a/backend/src/emails/__snapshots__/sendEmailVariants.test.ts.snap b/backend/src/emails/__snapshots__/sendEmailVariants.test.ts.snap deleted file mode 100644 index aec3510fe..000000000 --- a/backend/src/emails/__snapshots__/sendEmailVariants.test.ts.snap +++ /dev/null @@ -1,1736 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`sendEmailVariants sendAccountActivationEmail result has the correct html as snapshot 1`] = ` -" - - - - - - - - -
-
-
\\"Gradido
-
-
-

Email Verification

-
-

Hello Peter Lustig,

-

Your email address has just been registered with Gradido.

-
-
-

Complete registration

-
Please click here to complete the registration and activate your Gradido account.
Activate account -
Or copy the link into your browser window.
http://localhost/checkEmail/6627633878930542284 - -

Request new valid link

-
The link has a validity of 23 hours and 30 minutes. -If the validity of the link has already expired, you can have a new link sent to you here.
New link -
-
-
-

Kind regards,
your Gradido team -

-
-
-
-
-
\\"facebook\\"\\"Telegram\\"\\"Twitter\\"\\"youtube\\"
-
-
-
If you have any further questions, please contact our support.
support@gradido.net -
\\"Gradido
-
Privacy Policy -
Gradido-Akademie
Institut für Wirtschaftsbionik
Pfarrweg 2
74653 Künzelsau
Deutschland


-
-
-
-
- -" -`; - -exports[`sendEmailVariants sendAccountMultiRegistrationEmail calls "sendEmailTranslated" result has the correct html as snapshot 1`] = ` -" - - - - - - - - -
-
-
\\"Gradido
-
-
-

Try To Register Again With Your Email

-
-

Hello Peter Lustig,

-

Your email address has just been used again to register an account with Gradido.
However, an account already exists for your email address. -

-
-
-

Reset password

-
If you have forgotten your password, please click here.
reset -
Or copy the link into your browser window.
http://localhost/forgot-password -

Contact support

-
If you did not try to register again, please contact our support:
support@supportmail.com -
-
-

Kind regards,
your Gradido team -

-
-
-
-
-
\\"facebook\\"\\"Telegram\\"\\"Twitter\\"\\"youtube\\"
-
-
-
If you have any further questions, please contact our support.
support@gradido.net -
\\"Gradido
-
Privacy Policy -
Gradido-Akademie
Institut für Wirtschaftsbionik
Pfarrweg 2
74653 Künzelsau
Deutschland


-
-
-
-
- -" -`; - -exports[`sendEmailVariants sendAddedContributionMessageEmail result has the correct html as snapshot 1`] = ` -" - - - - - - - - -
-
-
\\"Gradido
-
-
-

Message about your common good contribution

-
-

Hello Peter Lustig,

-

You have received a message from Bibi Bloxberg regarding your common good contribution “My contribution.”.

-
-
-

Read and reply to message

-
-

„My message.“

-

To reply to the message, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.

-
To account -
Please do not reply to this email.
-
-
-

Kind regards,
your Gradido team -

-
-
-
-
-
\\"facebook\\"\\"Telegram\\"\\"Twitter\\"\\"youtube\\"
-
-
-
If you have any further questions, please contact our support.
support@gradido.net -
\\"Gradido
-
Privacy Policy -
Gradido-Akademie
Institut für Wirtschaftsbionik
Pfarrweg 2
74653 Künzelsau
Deutschland


-
-
-
-
- -" -`; - -exports[`sendEmailVariants sendContributionChangedByModeratorEmail result has the correct html as snapshot 1`] = ` -" - - - - - - - - -
-
-
\\"Gradido
-
-
-

Your common good contribution has been changed

-
-

Hello Peter Lustig,

-

your common good contribution 'My contribution.' has just been changed by Bibi Bloxberg and now reads as 'This is a better contribution memo.'

-
-
-

Contribution details

-
To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.
To account -
Or copy the link into your browser window.
https://gradido.net/contributions/own-contributions/1#contributionListItem-1 -
Please do not reply to this email.
-
-
-

Kind regards,
your Gradido team -

-
-
-
-
-
\\"facebook\\"\\"Telegram\\"\\"Twitter\\"\\"youtube\\"
-
-
-
If you have any further questions, please contact our support.
support@gradido.net -
\\"Gradido
-
Privacy Policy -
Gradido-Akademie
Institut für Wirtschaftsbionik
Pfarrweg 2
74653 Künzelsau
Deutschland


-
-
-
-
- -" -`; - -exports[`sendEmailVariants sendContributionConfirmedEmail result has the correct html as snapshot 1`] = ` -" - - - - - - - - -
-
-
\\"Gradido
-
-
-

Your contribution to the common good was confirmed

-
-

Hello Peter Lustig,

-

Your common good contribution “My contribution.” has just been approved by Bibi Bloxberg. Your Gradido account has been credited with 23.54 GDD.

-
-
-

Contribution details

-
To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.
To account -
Or copy the link into your browser window.
https://gradido.net/contributions/own-contributions/1#contributionListItem-1 -
Please do not reply to this email.
-
-
-

Kind regards,
your Gradido team -

-
-
-
-
-
\\"facebook\\"\\"Telegram\\"\\"Twitter\\"\\"youtube\\"
-
-
-
If you have any further questions, please contact our support.
support@gradido.net -
\\"Gradido
-
Privacy Policy -
Gradido-Akademie
Institut für Wirtschaftsbionik
Pfarrweg 2
74653 Künzelsau
Deutschland


-
-
-
-
- -" -`; - -exports[`sendEmailVariants sendContributionDeletedEmail result has the correct html as snapshot 1`] = ` -" - - - - - - - - -
-
-
\\"Gradido
-
-
-

Your common good contribution was deleted

-
-

Hello Peter Lustig,

-

Your common good contribution “My contribution.” was deleted by Bibi Bloxberg.

-
-
-

Contribution details

-
To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.
To account -
Or copy the link into your browser window.
https://gradido.net/contributions/own-contributions/1#contributionListItem-1 -
Please do not reply to this email.
-
-
-

Kind regards,
your Gradido team -

-
-
-
-
-
\\"facebook\\"\\"Telegram\\"\\"Twitter\\"\\"youtube\\"
-
-
-
If you have any further questions, please contact our support.
support@gradido.net -
\\"Gradido
-
Privacy Policy -
Gradido-Akademie
Institut für Wirtschaftsbionik
Pfarrweg 2
74653 Künzelsau
Deutschland


-
-
-
-
- -" -`; - -exports[`sendEmailVariants sendContributionDeniedEmail result has the correct html as snapshot 1`] = ` -" - - - - - - - - -
-
-
\\"Gradido
-
-
-

Your common good contribution was rejected

-
-

Hello Peter Lustig,

-

Your common good contribution “My contribution.” was rejected by Bibi Bloxberg.

-
-
-

Contribution details

-
To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.
To account -
Or copy the link into your browser window.
https://gradido.net/contributions/own-contributions/1#contributionListItem-1 -
Please do not reply to this email.
-
-
-

Kind regards,
your Gradido team -

-
-
-
-
-
\\"facebook\\"\\"Telegram\\"\\"Twitter\\"\\"youtube\\"
-
-
-
If you have any further questions, please contact our support.
support@gradido.net -
\\"Gradido
-
Privacy Policy -
Gradido-Akademie
Institut für Wirtschaftsbionik
Pfarrweg 2
74653 Künzelsau
Deutschland


-
-
-
-
- -" -`; - -exports[`sendEmailVariants sendResetPasswordEmail result has the correct html as snapshot 1`] = ` -" - - - - - - - - -
-
-
\\"Gradido
-
-
-

Reset password

-
-

Hello Peter Lustig,

-

You, or someone else, requested a password reset for this account.

-
-
-

Reset password

-
If it was you, please click here.
reset -
Or copy the link into your browser window.
http://localhost/reset-password/3762660021544901417 - -

Request new valid link

-
The link has a validity of 23 hours and 30 minutes. -If the validity of the link has already expired, you can have a new link sent to you here.
New link -
-
-
-

Kind regards,
your Gradido team -

-
-
-
-
-
\\"facebook\\"\\"Telegram\\"\\"Twitter\\"\\"youtube\\"
-
-
-
If you have any further questions, please contact our support.
support@gradido.net -
\\"Gradido
-
Privacy Policy -
Gradido-Akademie
Institut für Wirtschaftsbionik
Pfarrweg 2
74653 Künzelsau
Deutschland


-
-
-
-
- -" -`; - -exports[`sendEmailVariants sendTransactionLinkRedeemedEmail result has the correct html as snapshot 1`] = ` -" - - - - - - - - -
-
-
\\"Gradido
-
-
-

Bibi Bloxberg has redeemed your Gradido link

-
-

Hello Peter Lustig,

-

Bibi Bloxberg (bibi@bloxberg.de) has just redeemed your link.

-
-
-

Transaction details

-
Amount: 17.65 GDD
Message: You deserve it! 🙏🏼
You can find transaction details in your Gradido account. -
To account -
Please do not reply to this email.
-
-
-

Kind regards,
your Gradido team -

-
-
-
-
-
\\"facebook\\"\\"Telegram\\"\\"Twitter\\"\\"youtube\\"
-
-
-
If you have any further questions, please contact our support.
support@gradido.net -
\\"Gradido
-
Privacy Policy -
Gradido-Akademie
Institut für Wirtschaftsbionik
Pfarrweg 2
74653 Künzelsau
Deutschland


-
-
-
-
- -" -`; - -exports[`sendEmailVariants sendTransactionReceivedEmail result has the correct html as snapshot 1`] = ` -" - - - - - - - - -
-
-
\\"Gradido
-
-
-

Bibi Bloxberg has sent you 37.40 Gradido

-
-

Hello Peter Lustig,

-

You have just received 37.40 GDD from Bibi Bloxberg (bibi@bloxberg.de). -

-
-
-

Message

-
-
Du bist schon lustiger ;)
-
- -
To account -
-

Kind regards,
your Gradido team -

-
-
-
-
-
\\"facebook\\"\\"Telegram\\"\\"Twitter\\"\\"youtube\\"
-
-
-
If you have any further questions, please contact our support.
support@gradido.net -
\\"Gradido
-
Privacy Policy -
Gradido-Akademie
Institut für Wirtschaftsbionik
Pfarrweg 2
74653 Künzelsau
Deutschland


-
-
-
-
- -" -`; diff --git a/backend/src/emails/sendEmailTranslated.test.ts b/backend/src/emails/sendEmailTranslated.test.ts deleted file mode 100644 index 103296080..000000000 --- a/backend/src/emails/sendEmailTranslated.test.ts +++ /dev/null @@ -1,149 +0,0 @@ -import { createTransport } from 'nodemailer' - -import { i18n } from '@test/testSetup' - -import { CONFIG } from '@/config' - -import { getLogger } from 'config-schema/test/testSetup' -import { LOG4JS_BASE_CATEGORY_NAME } from '@/config/const' -import { sendEmailTranslated } from './sendEmailTranslated' - -const logger = getLogger(`${LOG4JS_BASE_CATEGORY_NAME}.emails.sendEmailTranslated`) - -const testMailServerHost = 'localhost' -const testMailServerPort = 1025 - -CONFIG.EMAIL = false -CONFIG.EMAIL_SMTP_HOST = testMailServerHost -CONFIG.EMAIL_SMTP_PORT = testMailServerPort -CONFIG.EMAIL_SENDER = 'info@gradido.net' -CONFIG.EMAIL_USERNAME = 'user' -CONFIG.EMAIL_PASSWORD = 'pwd' -CONFIG.EMAIL_TLS = true - -jest.mock('nodemailer', () => { - return { - __esModule: true, - createTransport: jest.fn(() => { - return { - sendMail: () => { - return { - messageId: 'message', - } - }, - } - }), - } -}) - -describe('sendEmailTranslated', () => { - let result: Record | boolean | null - - describe('config email is false', () => { - beforeEach(async () => { - result = await sendEmailTranslated({ - receiver: { - to: 'receiver@mail.org', - cc: 'support@gradido.net', - }, - template: 'accountMultiRegistration', - locals: { - locale: 'en', - }, - }) - }) - - it('logs warning', () => { - expect(logger.info).toBeCalledWith('Emails are disabled via config...') - }) - - it('returns false', () => { - expect(result).toBeFalsy() - }) - }) - - describe('config email is true', () => { - beforeEach(async () => { - CONFIG.EMAIL = true - result = await sendEmailTranslated({ - receiver: { - to: 'receiver@mail.org', - cc: 'support@gradido.net', - }, - template: 'accountMultiRegistration', - locals: { - locale: 'en', - }, - }) - }) - - it('calls the transporter', () => { - expect(createTransport).toBeCalledWith({ - host: testMailServerHost, - port: testMailServerPort, - secure: false, - requireTLS: true, - auth: { - user: 'user', - pass: 'pwd', - }, - }) - }) - - describe('call of "sendEmailTranslated"', () => { - it('has expected result', () => { - expect(result).toMatchObject({ - originalMessage: expect.objectContaining({ - to: 'receiver@mail.org', - cc: 'support@gradido.net', - from: 'Gradido (emails.general.doNotAnswer) ', - attachments: expect.any(Array), - subject: 'Try To Register Again With Your Email', - html: expect.stringContaining('Try To Register Again With Your Email'), - text: expect.stringContaining('TRY TO REGISTER AGAIN WITH YOUR EMAIL'), - }), - }) - }) - }) - - it.skip('calls "i18n.setLocale" with "en"', () => { - expect(i18n.setLocale).toBeCalledWith('en') - }) - - it.skip('calls "i18n.__" for translation', () => { - expect(i18n.__).toBeCalled() - }) - }) - - describe('with email EMAIL_TEST_MODUS true', () => { - beforeEach(async () => { - jest.clearAllMocks() - CONFIG.EMAIL = true - CONFIG.EMAIL_TEST_MODUS = true - result = await sendEmailTranslated({ - receiver: { - to: 'receiver@mail.org', - cc: 'support@gradido.net', - }, - template: 'accountMultiRegistration', - locals: { - locale: 'en', - }, - }) - }) - - it('call of "sendEmailTranslated" with faked "to"', () => { - expect(result).toMatchObject({ - originalMessage: expect.objectContaining({ - to: CONFIG.EMAIL_TEST_RECEIVER, - cc: 'support@gradido.net', - from: `Gradido (emails.general.doNotAnswer) <${CONFIG.EMAIL_SENDER}>`, - attachments: expect.any(Array), - subject: 'Try To Register Again With Your Email', - html: expect.stringContaining('Try To Register Again With Your Email'), - text: expect.stringContaining('TRY TO REGISTER AGAIN WITH YOUR EMAIL'), - }), - }) - }) - }) -}) diff --git a/backend/src/emails/sendEmailTranslated.ts b/backend/src/emails/sendEmailTranslated.ts deleted file mode 100644 index 5b95cd7ad..000000000 --- a/backend/src/emails/sendEmailTranslated.ts +++ /dev/null @@ -1,118 +0,0 @@ -import path from 'path' - -import Email from 'email-templates' -import i18n from 'i18n' -import { createTransport } from 'nodemailer' - -import { CONFIG } from '@/config' -import { LOG4JS_BASE_CATEGORY_NAME } from '@/config/const' -import { getLogger } from 'log4js' - -const logger = getLogger(`${LOG4JS_BASE_CATEGORY_NAME}.emails.sendEmailTranslated`) - -export const sendEmailTranslated = async ({ - receiver, - template, - locals, -}: { - receiver: { - to: string - cc?: string - } - template: string - locals: Record -}): Promise | boolean | null> => { - // TODO: test the calling order of 'i18n.setLocale' for example: language of logging 'en', language of email receiver 'es', reset language of current user 'de' - - if (!CONFIG.EMAIL) { - logger.info(`Emails are disabled via config...`) - return null - } - - // because language of receiver can differ from language of current user who triggers the sending - // const rememberLocaleToRestore = i18n.getLocale() - - i18n.setLocale('en') // for logging - logger.info( - `send Email: language=${locals.locale as string} to=${receiver.to.substring(0, 3)}...` + - (receiver.cc ? `, cc=${receiver.cc.substring(0, 3)}...` : '') + - `, subject=${i18n.__('emails.' + template + '.subject')}`, - ) - - if (CONFIG.EMAIL_TEST_MODUS) { - logger.info( - `Testmodus=ON: change receiver from ${receiver.to} to ${CONFIG.EMAIL_TEST_RECEIVER}`, - ) - receiver.to = CONFIG.EMAIL_TEST_RECEIVER - } - const transport = createTransport({ - host: CONFIG.EMAIL_SMTP_HOST, - port: CONFIG.EMAIL_SMTP_PORT, - secure: false, // true for 465, false for other ports - requireTLS: CONFIG.EMAIL_TLS, - auth: { - user: CONFIG.EMAIL_USERNAME, - pass: CONFIG.EMAIL_PASSWORD, - }, - }) - - i18n.setLocale(locals.locale as string) // for email - - // TESTING: see 'README.md' - const email = new Email({ - message: { - from: `Gradido (${i18n.__('emails.general.doNotAnswer')}) <${CONFIG.EMAIL_SENDER}>`, - }, - send: CONFIG.EMAIL, - transport, - preview: false, - // i18n, // is only needed if you don't install i18n - }) - - const resultSend = await email - .send({ - template: path.join(__dirname, 'templates', template), - message: { - ...receiver, - attachments: [ - { - filename: 'gradido-header.jpeg', - path: path.join(__dirname, 'templates/includes/gradido-header.jpeg'), - cid: 'gradidoheader', - }, - { - filename: 'facebook-icon.png', - path: path.join(__dirname, 'templates/includes/facebook-icon.png'), - cid: 'facebookicon', - }, - { - filename: 'telegram-icon.png', - path: path.join(__dirname, 'templates/includes/telegram-icon.png'), - cid: 'telegramicon', - }, - { - filename: 'twitter-icon.png', - path: path.join(__dirname, 'templates/includes/twitter-icon.png'), - cid: 'twittericon', - }, - { - filename: 'youtube-icon.png', - path: path.join(__dirname, 'templates/includes/youtube-icon.png'), - cid: 'youtubeicon', - }, - { - filename: 'chatbox-icon.png', - path: path.join(__dirname, 'templates/includes/chatbox-icon.png'), - cid: 'chatboxicon', - }, - ], - }, - locals, // the 'locale' in here seems not to be used by 'email-template', because it doesn't work if the language isn't set before by 'i18n.setLocale' - }) - .catch((error: unknown) => { - logger.error('Error sending notification email', error) - return error - }) - - return resultSend -} diff --git a/backend/src/emails/sendEmailVariants.test.ts b/backend/src/emails/sendEmailVariants.test.ts deleted file mode 100644 index 74eb940ed..000000000 --- a/backend/src/emails/sendEmailVariants.test.ts +++ /dev/null @@ -1,623 +0,0 @@ -import { ApolloServerTestClient } from 'apollo-server-testing' -import { Decimal } from 'decimal.js-light' -import { DataSource } from 'typeorm' - -import { testEnvironment } from '@test/helpers' -import { i18n as localization } from '@test/testSetup' -import { getLogger } from 'config-schema/test/testSetup' - -import { CONFIG } from '@/config' - -import * as sendEmailTranslatedApi from './sendEmailTranslated' -import { - sendAccountActivationEmail, - sendAccountMultiRegistrationEmail, - sendAddedContributionMessageEmail, - sendContributionChangedByModeratorEmail, - sendContributionConfirmedEmail, - sendContributionDeletedEmail, - sendContributionDeniedEmail, - sendResetPasswordEmail, - sendTransactionLinkRedeemedEmail, - sendTransactionReceivedEmail, -} from './sendEmailVariants' - -const testMailServerHost = 'localhost' -const testMailServerPort = 1025 -const testMailTLS = false - -CONFIG.EMAIL_SENDER = 'info@gradido.net' -CONFIG.EMAIL_SMTP_HOST = testMailServerHost -CONFIG.EMAIL_SMTP_PORT = testMailServerPort -CONFIG.EMAIL_TLS = testMailTLS - -jest.mock('nodemailer', () => { - return { - __esModule: true, - createTransport: jest.fn(() => { - return { - sendMail: () => { - return { - messageId: 'message', - } - }, - } - }), - } -}) - -let con: DataSource -let testEnv: { - mutate: ApolloServerTestClient['mutate'] - query: ApolloServerTestClient['query'] - con: DataSource -} - -beforeAll(async () => { - testEnv = await testEnvironment(getLogger('apollo'), localization) - con = testEnv.con -}) - -afterAll(async () => { - await con.destroy() -}) - -const sendEmailTranslatedSpy = jest.spyOn(sendEmailTranslatedApi, 'sendEmailTranslated') - -describe('sendEmailVariants', () => { - let result: any - const contributionFrontendLink = - 'https://gradido.net/contributions/own-contributions/1#contributionListItem-1' - - describe('sendAddedContributionMessageEmail', () => { - beforeAll(async () => { - result = await sendAddedContributionMessageEmail({ - firstName: 'Peter', - lastName: 'Lustig', - email: 'peter@lustig.de', - language: 'en', - senderFirstName: 'Bibi', - senderLastName: 'Bloxberg', - contributionMemo: 'My contribution.', - contributionFrontendLink, - message: 'My message.', - }) - }) - - describe('calls "sendEmailTranslated"', () => { - it('with expected parameters', () => { - expect(sendEmailTranslatedSpy).toBeCalledWith({ - receiver: { - to: 'Peter Lustig ', - }, - template: 'addedContributionMessage', - locals: { - firstName: 'Peter', - lastName: 'Lustig', - locale: 'en', - senderFirstName: 'Bibi', - senderLastName: 'Bloxberg', - contributionMemo: 'My contribution.', - contributionFrontendLink, - message: 'My message.', - supportEmail: CONFIG.COMMUNITY_SUPPORT_MAIL, - }, - }) - }) - }) - - describe('result', () => { - it('is the expected object', () => { - expect(result).toMatchObject({ - originalMessage: expect.objectContaining({ - to: 'Peter Lustig ', - from: 'Gradido (emails.general.doNotAnswer) ', - attachments: expect.any(Array), - subject: 'Message about your common good contribution', - html: expect.any(String), - text: expect.stringContaining('MESSAGE ABOUT YOUR COMMON GOOD CONTRIBUTION'), - }), - }) - }) - - it('has the correct html as snapshot', () => { - expect(result.originalMessage.html).toMatchSnapshot() - }) - }) - }) - - describe('sendAccountActivationEmail', () => { - beforeAll(async () => { - result = await sendAccountActivationEmail({ - firstName: 'Peter', - lastName: 'Lustig', - email: 'peter@lustig.de', - language: 'en', - activationLink: 'http://localhost/checkEmail/6627633878930542284', - timeDurationObject: { hours: 23, minutes: 30 }, - }) - }) - - describe('calls "sendEmailTranslated"', () => { - it('with expected parameters', () => { - expect(sendEmailTranslatedSpy).toBeCalledWith({ - receiver: { - to: 'Peter Lustig ', - }, - template: 'accountActivation', - locals: { - firstName: 'Peter', - lastName: 'Lustig', - locale: 'en', - activationLink: 'http://localhost/checkEmail/6627633878930542284', - timeDurationObject: { hours: 23, minutes: 30 }, - resendLink: CONFIG.EMAIL_LINK_FORGOTPASSWORD, - supportEmail: CONFIG.COMMUNITY_SUPPORT_MAIL, - communityURL: CONFIG.COMMUNITY_URL, - }, - }) - }) - }) - - describe('result', () => { - it('is the expected object', () => { - expect(result).toMatchObject({ - originalMessage: expect.objectContaining({ - to: 'Peter Lustig ', - from: 'Gradido (emails.general.doNotAnswer) ', - attachments: expect.any(Array), - subject: 'Email Verification', - html: expect.any(String), - text: expect.stringContaining('EMAIL VERIFICATION'), - }), - }) - }) - - it('has the correct html as snapshot', () => { - expect(result.originalMessage.html).toMatchSnapshot() - }) - }) - }) - - describe('sendAccountMultiRegistrationEmail', () => { - beforeAll(async () => { - result = await sendAccountMultiRegistrationEmail({ - firstName: 'Peter', - lastName: 'Lustig', - email: 'peter@lustig.de', - language: 'en', - }) - }) - - describe('calls "sendEmailTranslated"', () => { - it('with expected parameters', () => { - expect(sendEmailTranslatedSpy).toBeCalledWith({ - receiver: { - to: 'Peter Lustig ', - }, - template: 'accountMultiRegistration', - locals: { - firstName: 'Peter', - lastName: 'Lustig', - locale: 'en', - resendLink: CONFIG.EMAIL_LINK_FORGOTPASSWORD, - supportEmail: CONFIG.COMMUNITY_SUPPORT_MAIL, - communityURL: CONFIG.COMMUNITY_URL, - }, - }) - }) - - describe('result', () => { - it('is the expected object', () => { - expect(result).toMatchObject({ - originalMessage: expect.objectContaining({ - to: 'Peter Lustig ', - from: 'Gradido (emails.general.doNotAnswer) ', - attachments: expect.any(Array), - subject: 'Try To Register Again With Your Email', - html: expect.any(String), - text: expect.stringContaining('TRY TO REGISTER AGAIN WITH YOUR EMAIL'), - }), - }) - }) - - it('has the correct html as snapshot', () => { - expect(result.originalMessage.html).toMatchSnapshot() - }) - }) - }) - }) - - describe('sendContributionConfirmedEmail', () => { - beforeAll(async () => { - result = await sendContributionConfirmedEmail({ - firstName: 'Peter', - lastName: 'Lustig', - email: 'peter@lustig.de', - language: 'en', - senderFirstName: 'Bibi', - senderLastName: 'Bloxberg', - contributionMemo: 'My contribution.', - contributionAmount: new Decimal(23.54), - contributionFrontendLink, - }) - }) - - describe('calls "sendEmailTranslated"', () => { - it('with expected parameters', () => { - expect(sendEmailTranslatedSpy).toBeCalledWith({ - receiver: { - to: 'Peter Lustig ', - }, - template: 'contributionConfirmed', - locals: { - firstName: 'Peter', - lastName: 'Lustig', - locale: 'en', - senderFirstName: 'Bibi', - senderLastName: 'Bloxberg', - contributionMemo: 'My contribution.', - contributionAmount: '23.54', - supportEmail: CONFIG.COMMUNITY_SUPPORT_MAIL, - contributionFrontendLink, - }, - }) - }) - }) - - describe('result', () => { - it('is the expected object', () => { - expect(result).toMatchObject({ - originalMessage: expect.objectContaining({ - to: 'Peter Lustig ', - from: 'Gradido (emails.general.doNotAnswer) ', - attachments: expect.any(Array), - subject: 'Your contribution to the common good was confirmed', - html: expect.any(String), - text: expect.stringContaining('YOUR CONTRIBUTION TO THE COMMON GOOD WAS CONFIRMED'), - }), - }) - }) - - it('has the correct html as snapshot', () => { - expect(result.originalMessage.html).toMatchSnapshot() - }) - }) - }) - - describe('sendContributionChangedByModeratorEmail', () => { - beforeAll(async () => { - result = await sendContributionChangedByModeratorEmail({ - firstName: 'Peter', - lastName: 'Lustig', - email: 'peter@lustig.de', - language: 'en', - senderFirstName: 'Bibi', - senderLastName: 'Bloxberg', - contributionMemo: 'My contribution.', - contributionMemoUpdated: 'This is a better contribution memo.', - contributionFrontendLink, - }) - }) - - describe('calls "sendEmailTranslated"', () => { - it('with expected parameters', () => { - expect(sendEmailTranslatedSpy).toBeCalledWith({ - receiver: { - to: 'Peter Lustig ', - }, - template: 'contributionChangedByModerator', - locals: { - firstName: 'Peter', - lastName: 'Lustig', - locale: 'en', - senderFirstName: 'Bibi', - senderLastName: 'Bloxberg', - contributionMemo: 'My contribution.', - contributionMemoUpdated: 'This is a better contribution memo.', - contributionFrontendLink, - supportEmail: CONFIG.COMMUNITY_SUPPORT_MAIL, - }, - }) - }) - }) - - describe('result', () => { - it('is the expected object', () => { - expect(result).toMatchObject({ - originalMessage: expect.objectContaining({ - to: 'Peter Lustig ', - from: 'Gradido (emails.general.doNotAnswer) ', - attachments: expect.any(Array), - subject: 'Your common good contribution has been changed', - html: expect.any(String), - text: expect.stringContaining('YOUR COMMON GOOD CONTRIBUTION HAS BEEN CHANGED'), - }), - }) - }) - - it('has the correct html as snapshot', () => { - expect(result.originalMessage.html).toMatchSnapshot() - }) - }) - }) - - describe('sendContributionDeniedEmail', () => { - beforeAll(async () => { - result = await sendContributionDeniedEmail({ - firstName: 'Peter', - lastName: 'Lustig', - email: 'peter@lustig.de', - language: 'en', - senderFirstName: 'Bibi', - senderLastName: 'Bloxberg', - contributionMemo: 'My contribution.', - contributionFrontendLink, - }) - }) - - describe('calls "sendEmailTranslated"', () => { - it('with expected parameters', () => { - expect(sendEmailTranslatedSpy).toBeCalledWith({ - receiver: { - to: 'Peter Lustig ', - }, - template: 'contributionDenied', - locals: { - firstName: 'Peter', - lastName: 'Lustig', - locale: 'en', - senderFirstName: 'Bibi', - senderLastName: 'Bloxberg', - contributionMemo: 'My contribution.', - contributionFrontendLink, - supportEmail: CONFIG.COMMUNITY_SUPPORT_MAIL, - }, - }) - }) - }) - - describe('result', () => { - it('has expected result', () => { - expect(result).toMatchObject({ - originalMessage: expect.objectContaining({ - to: 'Peter Lustig ', - from: 'Gradido (emails.general.doNotAnswer) ', - attachments: expect.any(Array), - subject: 'Your common good contribution was rejected', - html: expect.any(String), - text: expect.stringContaining('YOUR COMMON GOOD CONTRIBUTION WAS REJECTED'), - }), - }) - }) - - it('has the correct html as snapshot', () => { - expect(result.originalMessage.html).toMatchSnapshot() - }) - }) - }) - - describe('sendContributionDeletedEmail', () => { - beforeAll(async () => { - result = await sendContributionDeletedEmail({ - firstName: 'Peter', - lastName: 'Lustig', - email: 'peter@lustig.de', - language: 'en', - senderFirstName: 'Bibi', - senderLastName: 'Bloxberg', - contributionMemo: 'My contribution.', - contributionFrontendLink, - }) - }) - - describe('calls "sendEmailTranslated"', () => { - it('with expected parameters', () => { - expect(sendEmailTranslatedSpy).toBeCalledWith({ - receiver: { - to: 'Peter Lustig ', - }, - template: 'contributionDeleted', - locals: { - firstName: 'Peter', - lastName: 'Lustig', - locale: 'en', - senderFirstName: 'Bibi', - senderLastName: 'Bloxberg', - contributionMemo: 'My contribution.', - contributionFrontendLink, - supportEmail: CONFIG.COMMUNITY_SUPPORT_MAIL, - }, - }) - }) - }) - - describe('result', () => { - it('is the expected object', () => { - expect(result).toMatchObject({ - originalMessage: expect.objectContaining({ - to: 'Peter Lustig ', - from: 'Gradido (emails.general.doNotAnswer) ', - attachments: expect.any(Array), - subject: 'Your common good contribution was deleted', - html: expect.any(String), - text: expect.stringContaining('YOUR COMMON GOOD CONTRIBUTION WAS DELETED'), - }), - }) - }) - - it('has the correct html as snapshot', () => { - expect(result.originalMessage.html).toMatchSnapshot() - }) - }) - }) - - describe('sendResetPasswordEmail', () => { - beforeAll(async () => { - result = await sendResetPasswordEmail({ - firstName: 'Peter', - lastName: 'Lustig', - email: 'peter@lustig.de', - language: 'en', - resetLink: 'http://localhost/reset-password/3762660021544901417', - timeDurationObject: { hours: 23, minutes: 30 }, - }) - }) - - describe('calls "sendEmailTranslated"', () => { - it('with expected parameters', () => { - expect(sendEmailTranslatedSpy).toBeCalledWith({ - receiver: { - to: 'Peter Lustig ', - }, - template: 'resetPassword', - locals: { - firstName: 'Peter', - lastName: 'Lustig', - locale: 'en', - resetLink: 'http://localhost/reset-password/3762660021544901417', - timeDurationObject: { hours: 23, minutes: 30 }, - resendLink: CONFIG.EMAIL_LINK_FORGOTPASSWORD, - supportEmail: CONFIG.COMMUNITY_SUPPORT_MAIL, - communityURL: CONFIG.COMMUNITY_URL, - }, - }) - }) - }) - - describe('result', () => { - it('is the expected object', () => { - expect(result).toMatchObject({ - originalMessage: expect.objectContaining({ - to: 'Peter Lustig ', - from: 'Gradido (emails.general.doNotAnswer) ', - attachments: expect.any(Array), - subject: 'Reset password', - html: expect.any(String), - text: expect.stringContaining('RESET PASSWORD'), - }), - }) - }) - - it('has the correct html as snapshot', () => { - expect(result.originalMessage.html).toMatchSnapshot() - }) - }) - }) - - describe('sendTransactionLinkRedeemedEmail', () => { - beforeAll(async () => { - result = await sendTransactionLinkRedeemedEmail({ - firstName: 'Peter', - lastName: 'Lustig', - email: 'peter@lustig.de', - language: 'en', - senderFirstName: 'Bibi', - senderLastName: 'Bloxberg', - senderEmail: 'bibi@bloxberg.de', - transactionMemo: 'You deserve it! 🙏🏼', - transactionAmount: new Decimal(17.65), - }) - }) - - describe('calls "sendEmailTranslated"', () => { - it('with expected parameters', () => { - expect(sendEmailTranslatedSpy).toBeCalledWith({ - receiver: { - to: 'Peter Lustig ', - }, - template: 'transactionLinkRedeemed', - locals: { - firstName: 'Peter', - lastName: 'Lustig', - locale: 'en', - senderFirstName: 'Bibi', - senderLastName: 'Bloxberg', - senderEmail: 'bibi@bloxberg.de', - transactionMemo: 'You deserve it! 🙏🏼', - transactionAmount: '17.65', - supportEmail: CONFIG.COMMUNITY_SUPPORT_MAIL, - communityURL: CONFIG.COMMUNITY_URL, - }, - }) - }) - }) - - describe('result', () => { - it('is the expected object', () => { - expect(result).toMatchObject({ - originalMessage: expect.objectContaining({ - to: 'Peter Lustig ', - from: 'Gradido (emails.general.doNotAnswer) ', - attachments: expect.any(Array), - subject: 'Bibi Bloxberg has redeemed your Gradido link', - html: expect.any(String), - text: expect.stringContaining('BIBI BLOXBERG HAS REDEEMED YOUR GRADIDO LINK'), - }), - }) - }) - - it('has the correct html as snapshot', () => { - expect(result.originalMessage.html).toMatchSnapshot() - }) - }) - }) - - describe('sendTransactionReceivedEmail', () => { - beforeAll(async () => { - result = await sendTransactionReceivedEmail({ - firstName: 'Peter', - lastName: 'Lustig', - email: 'peter@lustig.de', - language: 'en', - memo: 'Du bist schon lustiger ;)', - senderFirstName: 'Bibi', - senderLastName: 'Bloxberg', - senderEmail: 'bibi@bloxberg.de', - transactionAmount: new Decimal(37.4), - }) - }) - - describe('calls "sendEmailTranslated"', () => { - it('with expected parameters', () => { - expect(sendEmailTranslatedSpy).toBeCalledWith({ - receiver: { - to: 'Peter Lustig ', - }, - template: 'transactionReceived', - locals: { - firstName: 'Peter', - lastName: 'Lustig', - locale: 'en', - memo: 'Du bist schon lustiger ;)', - senderFirstName: 'Bibi', - senderLastName: 'Bloxberg', - senderEmail: 'bibi@bloxberg.de', - transactionAmount: '37.40', - supportEmail: CONFIG.COMMUNITY_SUPPORT_MAIL, - communityURL: CONFIG.COMMUNITY_URL, - }, - }) - }) - }) - - describe('result', () => { - it('is the expected object', () => { - expect(result).toMatchObject({ - originalMessage: expect.objectContaining({ - to: 'Peter Lustig ', - from: 'Gradido (emails.general.doNotAnswer) ', - attachments: expect.any(Array), - subject: 'Bibi Bloxberg has sent you 37.40 Gradido', - html: expect.any(String), - text: expect.stringContaining('BIBI BLOXBERG HAS SENT YOU 37.40 GRADIDO'), - }), - }) - }) - - it('has the correct html as snapshot', () => { - expect(result.originalMessage.html).toMatchSnapshot() - }) - }) - }) -}) diff --git a/backend/src/emails/sendEmailVariants.ts b/backend/src/emails/sendEmailVariants.ts deleted file mode 100644 index aac726002..000000000 --- a/backend/src/emails/sendEmailVariants.ts +++ /dev/null @@ -1,225 +0,0 @@ -import { Decimal } from 'decimal.js-light' - -import { CONFIG } from '@/config' -import { decimalSeparatorByLanguage } from 'core' - -import { sendEmailTranslated } from './sendEmailTranslated' - -export interface ContributionEmailCommonData { - firstName: string - lastName: string - email: string - language: string - senderFirstName: string - senderLastName: string - contributionMemo: string - contributionFrontendLink: string -} - -function toContributionEmailLocales(data: ContributionEmailCommonData): Record { - return { - firstName: data.firstName, - lastName: data.lastName, - locale: data.language, - senderFirstName: data.senderFirstName, - senderLastName: data.senderLastName, - contributionMemo: data.contributionMemo, - contributionFrontendLink: data.contributionFrontendLink, - supportEmail: CONFIG.COMMUNITY_SUPPORT_MAIL, - } -} - -export const sendAddedContributionMessageEmail = ( - data: ContributionEmailCommonData & { - message: string - }, -): Promise | boolean | null> => { - return sendEmailTranslated({ - receiver: { - to: `${data.firstName} ${data.lastName} <${data.email}>`, - }, - template: 'addedContributionMessage', - locals: { - ...toContributionEmailLocales(data), - message: data.message, - }, - }) -} - -export const sendAccountActivationEmail = (data: { - firstName: string - lastName: string - email: string - language: string - activationLink: string - timeDurationObject: Record - logoUrl?: string | null -}): Promise | boolean | null> => { - return sendEmailTranslated({ - receiver: { to: `${data.firstName} ${data.lastName} <${data.email}>` }, - template: 'accountActivation', - locals: { - firstName: data.firstName, - lastName: data.lastName, - locale: data.language, - activationLink: data.activationLink, - timeDurationObject: data.timeDurationObject, - logoUrl: data.logoUrl, - resendLink: CONFIG.EMAIL_LINK_FORGOTPASSWORD, - supportEmail: CONFIG.COMMUNITY_SUPPORT_MAIL, - communityURL: CONFIG.COMMUNITY_URL, - }, - }) -} - -export const sendAccountMultiRegistrationEmail = (data: { - firstName: string - lastName: string - email: string - language: string -}): Promise | boolean | null> => { - return sendEmailTranslated({ - receiver: { to: `${data.firstName} ${data.lastName} <${data.email}>` }, - template: 'accountMultiRegistration', - locals: { - firstName: data.firstName, - lastName: data.lastName, - locale: data.language, - resendLink: CONFIG.EMAIL_LINK_FORGOTPASSWORD, - supportEmail: CONFIG.COMMUNITY_SUPPORT_MAIL, - communityURL: CONFIG.COMMUNITY_URL, - }, - }) -} - -export const sendContributionConfirmedEmail = ( - data: ContributionEmailCommonData & { - contributionAmount: Decimal - }, -): Promise | boolean | null> => { - return sendEmailTranslated({ - receiver: { to: `${data.firstName} ${data.lastName} <${data.email}>` }, - template: 'contributionConfirmed', - locals: { - ...toContributionEmailLocales(data), - contributionAmount: decimalSeparatorByLanguage(data.contributionAmount, data.language), - }, - }) -} - -export const sendContributionChangedByModeratorEmail = ( - data: ContributionEmailCommonData & { - contributionMemoUpdated: string - }, -): Promise | boolean | null> => { - return sendEmailTranslated({ - receiver: { to: `${data.firstName} ${data.lastName} <${data.email}>` }, - template: 'contributionChangedByModerator', - locals: { - ...toContributionEmailLocales(data), - contributionMemoUpdated: data.contributionMemoUpdated, - }, - }) -} - -export const sendContributionDeletedEmail = ( - data: ContributionEmailCommonData, -): Promise | boolean | null> => { - return sendEmailTranslated({ - receiver: { to: `${data.firstName} ${data.lastName} <${data.email}>` }, - template: 'contributionDeleted', - locals: toContributionEmailLocales(data), - }) -} - -export const sendContributionDeniedEmail = ( - data: ContributionEmailCommonData, -): Promise | boolean | null> => { - return sendEmailTranslated({ - receiver: { to: `${data.firstName} ${data.lastName} <${data.email}>` }, - template: 'contributionDenied', - locals: toContributionEmailLocales(data), - }) -} - -export const sendResetPasswordEmail = (data: { - firstName: string - lastName: string - email: string - language: string - resetLink: string - timeDurationObject: Record -}): Promise | boolean | null> => { - return sendEmailTranslated({ - receiver: { to: `${data.firstName} ${data.lastName} <${data.email}>` }, - template: 'resetPassword', - locals: { - firstName: data.firstName, - lastName: data.lastName, - locale: data.language, - resetLink: data.resetLink, - timeDurationObject: data.timeDurationObject, - resendLink: CONFIG.EMAIL_LINK_FORGOTPASSWORD, - supportEmail: CONFIG.COMMUNITY_SUPPORT_MAIL, - communityURL: CONFIG.COMMUNITY_URL, - }, - }) -} - -export const sendTransactionLinkRedeemedEmail = (data: { - firstName: string - lastName: string - email: string - language: string - senderFirstName: string - senderLastName: string - senderEmail: string - transactionMemo: string - transactionAmount: Decimal -}): Promise | boolean | null> => { - return sendEmailTranslated({ - receiver: { to: `${data.firstName} ${data.lastName} <${data.email}>` }, - template: 'transactionLinkRedeemed', - locals: { - firstName: data.firstName, - lastName: data.lastName, - locale: data.language, - senderFirstName: data.senderFirstName, - senderLastName: data.senderLastName, - senderEmail: data.senderEmail, - transactionMemo: data.transactionMemo, - transactionAmount: decimalSeparatorByLanguage(data.transactionAmount, data.language), - supportEmail: CONFIG.COMMUNITY_SUPPORT_MAIL, - communityURL: CONFIG.COMMUNITY_URL, - }, - }) -} - -export const sendTransactionReceivedEmail = (data: { - firstName: string - lastName: string - email: string - language: string - senderFirstName: string - senderLastName: string - senderEmail: string - memo: string - transactionAmount: Decimal -}): Promise | boolean | null> => { - return sendEmailTranslated({ - receiver: { to: `${data.firstName} ${data.lastName} <${data.email}>` }, - template: 'transactionReceived', - locals: { - firstName: data.firstName, - lastName: data.lastName, - locale: data.language, - memo: data.memo, - senderFirstName: data.senderFirstName, - senderLastName: data.senderLastName, - senderEmail: data.senderEmail, - transactionAmount: decimalSeparatorByLanguage(data.transactionAmount, data.language), - supportEmail: CONFIG.COMMUNITY_SUPPORT_MAIL, - communityURL: CONFIG.COMMUNITY_URL, - }, - }) -} diff --git a/backend/src/emails/templates/accountActivation/html.pug b/backend/src/emails/templates/accountActivation/html.pug deleted file mode 100644 index 6b5dd41c3..000000000 --- a/backend/src/emails/templates/accountActivation/html.pug +++ /dev/null @@ -1,18 +0,0 @@ -extend ../layout.pug - -block content - if logoUrl - img(src=logoUrl, alt="Banner", style="max-width: 680px; max-height: 250px;border-radius:20px") - h2= t('emails.accountActivation.title') - .text-block - include ../includes/salutation.pug - p= t('emails.accountActivation.emailRegistered') - .content - h2= t('emails.general.completeRegistration') - div(class="p_content")= t('emails.accountActivation.pleaseClickLink') - a.button-3(href=activationLink) #{t('emails.accountActivation.activateAccount')} - div(class="p_content")= t('emails.general.orCopyLink') - - a.clink(href=activationLink) #{activationLink} - - include ../includes/requestNewLink.pug diff --git a/backend/src/emails/templates/accountActivation/subject.pug b/backend/src/emails/templates/accountActivation/subject.pug deleted file mode 100644 index 81749a38e..000000000 --- a/backend/src/emails/templates/accountActivation/subject.pug +++ /dev/null @@ -1 +0,0 @@ -= t('emails.accountActivation.subject') diff --git a/backend/src/emails/templates/accountMultiRegistration/html.pug b/backend/src/emails/templates/accountMultiRegistration/html.pug deleted file mode 100644 index 4d568261b..000000000 --- a/backend/src/emails/templates/accountMultiRegistration/html.pug +++ /dev/null @@ -1,22 +0,0 @@ -extend ../layout.pug - -block content - h2= t('emails.accountMultiRegistration.title') - .text-block - include ../includes/salutation.pug - p - = t('emails.accountMultiRegistration.emailReused') - br - = t('emails.accountMultiRegistration.emailExists') - .content - h2= t('emails.resetPassword.title') - div(class="p_content")= t('emails.accountMultiRegistration.onForgottenPasswordClickLink') - a.button-3(href=resendLink) #{t('emails.general.reset')} - div(class="p_content")= t('emails.general.orCopyLink') - - a.clink(href=resendLink) #{resendLink} - - h2(style="color: red")= t('emails.accountMultiRegistration.contactSupport') - div(class="p_content")= t('emails.accountMultiRegistration.ifYouAreNotTheOne') - - a.clink(href='mailto:' + supportEmail)= supportEmail diff --git a/backend/src/emails/templates/accountMultiRegistration/subject.pug b/backend/src/emails/templates/accountMultiRegistration/subject.pug deleted file mode 100644 index fb130f0e4..000000000 --- a/backend/src/emails/templates/accountMultiRegistration/subject.pug +++ /dev/null @@ -1 +0,0 @@ -= t('emails.accountMultiRegistration.subject') diff --git a/backend/src/emails/templates/addedContributionMessage/html.pug b/backend/src/emails/templates/addedContributionMessage/html.pug deleted file mode 100644 index df5ba35c4..000000000 --- a/backend/src/emails/templates/addedContributionMessage/html.pug +++ /dev/null @@ -1,16 +0,0 @@ -extend ../layout.pug - -block content - h2= t('emails.addedContributionMessage.title') - .text-block - include ../includes/salutation.pug - p= t('emails.addedContributionMessage.commonGoodContributionMessage', { senderFirstName, senderLastName, contributionMemo }) - .content - h2= t('emails.addedContributionMessage.readMessage') - div(class="p_content") - p= t('emails.addedContributionMessage.message', { message }) - p= t('emails.addedContributionMessage.toSeeAndAnswerMessage') - - a.button-3(href=`${contributionFrontendLink}`) #{t('emails.general.toAccount')} - - include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/addedContributionMessage/subject.pug b/backend/src/emails/templates/addedContributionMessage/subject.pug deleted file mode 100644 index 4ac85fa23..000000000 --- a/backend/src/emails/templates/addedContributionMessage/subject.pug +++ /dev/null @@ -1 +0,0 @@ -= t('emails.addedContributionMessage.subject') diff --git a/backend/src/emails/templates/contributionChangedByModerator/html.pug b/backend/src/emails/templates/contributionChangedByModerator/html.pug deleted file mode 100644 index 46bcd4ae1..000000000 --- a/backend/src/emails/templates/contributionChangedByModerator/html.pug +++ /dev/null @@ -1,10 +0,0 @@ -extend ../layout.pug - -block content - h2= t('emails.contributionChangedByModerator.title') - .text-block - include ../includes/salutation.pug - p= t('emails.contributionChangedByModerator.text', { contributionMemo, senderFirstName, senderLastName, contributionMemoUpdated }) - .content - include ../includes/contributionDetailsCTA.pug - include ../includes/doNotReply.pug \ No newline at end of file diff --git a/backend/src/emails/templates/contributionChangedByModerator/subject.pug b/backend/src/emails/templates/contributionChangedByModerator/subject.pug deleted file mode 100644 index 791cee555..000000000 --- a/backend/src/emails/templates/contributionChangedByModerator/subject.pug +++ /dev/null @@ -1 +0,0 @@ -= t('emails.contributionChangedByModerator.subject') diff --git a/backend/src/emails/templates/contributionConfirmed/html.pug b/backend/src/emails/templates/contributionConfirmed/html.pug deleted file mode 100644 index 310993d97..000000000 --- a/backend/src/emails/templates/contributionConfirmed/html.pug +++ /dev/null @@ -1,10 +0,0 @@ -extend ../layout.pug - -block content - h2= t('emails.contributionConfirmed.title') - .text-block - include ../includes/salutation.pug - p= t('emails.contributionConfirmed.commonGoodContributionConfirmed', { contributionMemo, senderFirstName, senderLastName, amountGDD: contributionAmount }) - .content - include ../includes/contributionDetailsCTA.pug - include ../includes/doNotReply.pug \ No newline at end of file diff --git a/backend/src/emails/templates/contributionConfirmed/subject.pug b/backend/src/emails/templates/contributionConfirmed/subject.pug deleted file mode 100644 index c5bd41421..000000000 --- a/backend/src/emails/templates/contributionConfirmed/subject.pug +++ /dev/null @@ -1 +0,0 @@ -= t('emails.contributionConfirmed.subject') diff --git a/backend/src/emails/templates/contributionDeleted/html.pug b/backend/src/emails/templates/contributionDeleted/html.pug deleted file mode 100644 index daf54227d..000000000 --- a/backend/src/emails/templates/contributionDeleted/html.pug +++ /dev/null @@ -1,10 +0,0 @@ -extend ../layout.pug - -block content - h2= t('emails.contributionDeleted.title') - .text-block - include ../includes/salutation.pug - p= t('emails.contributionDeleted.commonGoodContributionDeleted', { contributionMemo, senderFirstName, senderLastName }) - .content - include ../includes/contributionDetailsCTA.pug - include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/contributionDeleted/subject.pug b/backend/src/emails/templates/contributionDeleted/subject.pug deleted file mode 100644 index 024588472..000000000 --- a/backend/src/emails/templates/contributionDeleted/subject.pug +++ /dev/null @@ -1 +0,0 @@ -= t('emails.contributionDeleted.subject') diff --git a/backend/src/emails/templates/contributionDenied/html.pug b/backend/src/emails/templates/contributionDenied/html.pug deleted file mode 100644 index d30653acd..000000000 --- a/backend/src/emails/templates/contributionDenied/html.pug +++ /dev/null @@ -1,10 +0,0 @@ -extend ../layout.pug - -block content - h2= t('emails.contributionDenied.title') - .text-block - include ../includes/salutation.pug - p= t('emails.contributionDenied.commonGoodContributionDenied', { contributionMemo, senderFirstName, senderLastName }) - .content - include ../includes/contributionDetailsCTA.pug - include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/contributionDenied/subject.pug b/backend/src/emails/templates/contributionDenied/subject.pug deleted file mode 100644 index 57431e56e..000000000 --- a/backend/src/emails/templates/contributionDenied/subject.pug +++ /dev/null @@ -1 +0,0 @@ -= t('emails.contributionDenied.subject') diff --git a/backend/src/emails/templates/includes/Chatbox.svg b/backend/src/emails/templates/includes/Chatbox.svg deleted file mode 100644 index 4eb68e0bb..000000000 --- a/backend/src/emails/templates/includes/Chatbox.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/backend/src/emails/templates/includes/answear_button.svg b/backend/src/emails/templates/includes/answear_button.svg deleted file mode 100644 index f45fedc90..000000000 --- a/backend/src/emails/templates/includes/answear_button.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - Jetzt antworten - - - diff --git a/backend/src/emails/templates/includes/chatbox-icon.png b/backend/src/emails/templates/includes/chatbox-icon.png deleted file mode 100644 index a25c7c209cb79912e5adab4b7732ca9858955e17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9F5he4R}c>anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt&fkT^vI^I^Rxpt*$!I@bcilmcXRrOkP_`0>HiiLiq(xj+>07kDqMfHY{##Q zlh#;pR2gl4c_ETL@xfeC%dqcrr^TpWs_@NqndEL~zIij>tP8)bE11vjc5$h#TT}z| O8-u5-pUXO@geCw$1$z7d diff --git a/backend/src/emails/templates/includes/chatbox-icon.pug b/backend/src/emails/templates/includes/chatbox-icon.pug deleted file mode 100644 index 62775b0f0..000000000 --- a/backend/src/emails/templates/includes/chatbox-icon.pug +++ /dev/null @@ -1,6 +0,0 @@ -span.chatbox-wrapper - img.bi-chatbox( - alt="chatbox" - loading="lazy" - src="cid:chatboxicon" - ) \ No newline at end of file diff --git a/backend/src/emails/templates/includes/contributionDetailsCTA.pug b/backend/src/emails/templates/includes/contributionDetailsCTA.pug deleted file mode 100644 index ae3b77e6a..000000000 --- a/backend/src/emails/templates/includes/contributionDetailsCTA.pug +++ /dev/null @@ -1,7 +0,0 @@ -//- -h2= t('emails.general.contributionDetails') -div(class="p_content")= t('emails.contribution.toSeeContributionsAndMessages') -a.button-3(href=`${contributionFrontendLink}`) #{t('emails.general.toAccount')} -div(class="p_content")= t('emails.general.orCopyLink') - -a.clink(href=`${contributionFrontendLink}`) #{`${contributionFrontendLink}`} \ No newline at end of file diff --git a/backend/src/emails/templates/includes/doNotReply.pug b/backend/src/emails/templates/includes/doNotReply.pug deleted file mode 100644 index 506a5d0db..000000000 --- a/backend/src/emails/templates/includes/doNotReply.pug +++ /dev/null @@ -1 +0,0 @@ -div(class="p_content")= t('emails.general.pleaseDoNotReply') \ No newline at end of file diff --git a/backend/src/emails/templates/includes/email.css b/backend/src/emails/templates/includes/email.css deleted file mode 100644 index 5110c3882..000000000 --- a/backend/src/emails/templates/includes/email.css +++ /dev/null @@ -1,216 +0,0 @@ -/* vietnamese */ -/* @font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 100; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} */ -/* latin-ext */ -@font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 100; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_cqDpp_k.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 100; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_fKDp.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* vietnamese */ -/* @font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 200; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} */ -/* latin-ext */ -@font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 200; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_cqDpp_k.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 200; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_fKDp.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* vietnamese */ -/* @font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 300; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} */ -/* latin-ext */ -@font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 300; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_cqDpp_k.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 300; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_fKDp.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* vietnamese */ -/* @font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 400; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} */ -/* latin-ext */ -@font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 400; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_cqDpp_k.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 400; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_fKDp.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* vietnamese */ -/* @font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 500; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} */ -/* latin-ext */ -@font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 500; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_cqDpp_k.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 500; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_fKDp.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* vietnamese */ -/* @font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 600; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} */ -/* latin-ext */ -@font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 600; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_cqDpp_k.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 600; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_fKDp.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* vietnamese */ -/* @font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 700; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} */ -/* latin-ext */ -@font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 700; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_cqDpp_k.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 700; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_fKDp.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* vietnamese */ -/* @font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 800; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} */ -/* latin-ext */ -@font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 800; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_cqDpp_k.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 800; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_fKDp.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* vietnamese */ -/* @font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 900; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_c6Dpp_k.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} */ -/* latin-ext */ -@font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 900; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_cqDpp_k.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Work Sans'; - font-style: normal; - font-weight: 900; - src: url(https://fonts.gstatic.com/s/worksans/v18/QGYsz_wNahGAdqQ43Rh_fKDp.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} diff --git a/backend/src/emails/templates/includes/facebook-icon.png b/backend/src/emails/templates/includes/facebook-icon.png deleted file mode 100644 index 1d880cf3e21f0eac022181f0540859e65c9d2635..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1449 zcmV;a1y=frP)WmhDt1z%7D7m zQj!Z6h7TAE@2=H})G ztJUgd0AnOiq$Rf=08dEX&gb(tj~_q2l#0x)3YeXp9a>&q{!~P+kQ_?Erj`I$6p=}# z)P(Q*e{V@vrwvKM7&A)pnurW<#fUAi0N`p61a|D)Tqo_*hU7GW zQn6V4z1_BL2ViDq=3Ep-cS#;;x2;P6%zK`9sZc0Px6@9wQ`s0Z7DdthUUObVgyfMZ zitZa@#@cDOsQ{4lwAMGQwYNz2cV?n{NcLN6Z)vS>kn}dwrsWVI=^110lDxQe6SD)r zy&woK0f?H_YuN*gG1s@7^CBW7FB)U6x2o5)2N+|>P0`~LH!=f;>1NRC@; z-&9KNtIgWh+Sh^fPVWGWiO5$XaR9W|p{rx8b^Mm}z!+1s*4~Q^l=>edP3J{KNS@GI zhhZ4%+7KwEsv()bni%zdMmE$aiNtdN$qN}NT~2yH^0ka?sOh^PBBCml%3%PfvQ*v( zq}|V3>pNAcR1T~7rA4O7dx3b#e_oM1*==LG1<8{+lE+*K2k=FMvPVto|0smDSX1t5Myt$I2D0GtItDK*&Ei;*tjatMgB)~52B*&!~6z*0^rwd7(Ms! zi^b7K^^GxKlKiAWn|#`~)lf<;}yhgz@@VZEGUwhp3C(TB%dh& zPrGeMw*c@|0eIYPL%Ick#|prMPSZ=aGXMzSf%1L-1S9^n<%7RjAqP}2F08XDiy$IlHwl-x4 zfUE11t2Z2o1VM0zWLxQ`+X0f(K@i+oU%nwl1^~+%K6v_OK-_m)JHgAj=W5!5+)2kCBfR_NqTXp+2ZQ50`tFO$6y!v+_dA64p zOC+aBo^988k-ckkdlx77uFj?*WIem`@^litetrIbG9Al@qI{v(00000NkvXXu0mjf DhkUKj diff --git a/backend/src/emails/templates/includes/footer.pug b/backend/src/emails/templates/includes/footer.pug deleted file mode 100644 index 91a0e4543..000000000 --- a/backend/src/emails/templates/includes/footer.pug +++ /dev/null @@ -1,77 +0,0 @@ -footer - .w-container(class="footer_01") - .socialmedia - a.slink( - target="_blank" - href="https://www.facebook.com/groups/Gradido/" - ) - img.bi-facebook( - alt="facebook" - loading="lazy" - src="cid:facebookicon" - ) - a.slink( - target="_blank" - href="https://t.me/GradidoGruppe" - ) - img.bi-telegram( - alt="Telegram" - loading="lazy" - src="cid:telegramicon" - ) - a.slink( - target="_blank" - href="https://twitter.com/gradido" - ) - img.bi-twitter( - alt="Twitter" - loading="lazy" - src="cid:twittericon" - ) - a.slink( - target="_blank" - href="https://www.youtube.com/c/GradidoNet" - ) - img.bi-youtube( - alt="youtube" - loading="lazy" - src="cid:youtubeicon" - ) - .line - .footer - div(class="footer_p1")= t("emails.footer.contactOurSupport") - a( - class="footer_p2" - href='mailto:' + t("emails.footer.supportEmail") - )= t("emails.footer.supportEmail") - div - img.image( - alt="Gradido Logo" - src="https://gdd.gradido.net/img/brand/green.png" - ) - div - a( - class="terms_of_use" - href="https://gradido.net/de/impressum/" - target="_blank" - )= t("emails.footer.imprint") - br - a( - class="terms_of_use" - href="https://gradido.net/de/datenschutz/" - target="_blank" - )= t("emails.footer.privacyPolicy") - div(class="footer_p1") - | Gradido-Akademie - br - | Institut für Wirtschaftsbionik - br - | Pfarrweg 2 - br - | 74653 Künzelsau - br - | Deutschland - br - br - br - diff --git a/backend/src/emails/templates/includes/gradido-header.jpeg b/backend/src/emails/templates/includes/gradido-header.jpeg deleted file mode 100644 index 38a5c3a80f090b8973db6d603d406249f7af7f04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9427 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 diff --git a/backend/src/emails/templates/includes/greeting.pug b/backend/src/emails/templates/includes/greeting.pug deleted file mode 100644 index 6693e23ca..000000000 --- a/backend/src/emails/templates/includes/greeting.pug +++ /dev/null @@ -1,6 +0,0 @@ -//- This sets the greeting at the end of every e-mail -.text-block - p - = t('emails.general.sincerelyYours') - br - = t('emails.general.yourGradidoTeam') \ No newline at end of file diff --git a/backend/src/emails/templates/includes/header.pug b/backend/src/emails/templates/includes/header.pug deleted file mode 100644 index 3160d3e2b..000000000 --- a/backend/src/emails/templates/includes/header.pug +++ /dev/null @@ -1,13 +0,0 @@ -header - .head - //- TODO - //- when https://gdd.gradido.net/img/gradido-email-header.jpg is on production, - //- replace this URL by https://gdd.gradido.net/img/brand/gradido-email-header.png - img.head-logo( - alt="Gradido Logo" - loading="lazy" - src="cid:gradidoheader" - ) - - - diff --git a/backend/src/emails/templates/includes/requestNewLink.pug b/backend/src/emails/templates/includes/requestNewLink.pug deleted file mode 100644 index 8baa3d6df..000000000 --- a/backend/src/emails/templates/includes/requestNewLink.pug +++ /dev/null @@ -1,10 +0,0 @@ -//- -requestNewLink - h2= t('emails.general.requestNewLink') - - if timeDurationObject.minutes == 0 - div(class="p_content")= t('emails.general.linkValidity', { hours: timeDurationObject.hours }) - else - div(class="p_content")= t('emails.general.linkValidityWithMinutes', { hours: timeDurationObject.hours, minutes: timeDurationObject.minutes }) - - a.button-4(href=resendLink) #{t('emails.general.newLink')} \ No newline at end of file diff --git a/backend/src/emails/templates/includes/salutation.pug b/backend/src/emails/templates/includes/salutation.pug deleted file mode 100644 index 3e2591951..000000000 --- a/backend/src/emails/templates/includes/salutation.pug +++ /dev/null @@ -1 +0,0 @@ -p= t('emails.general.helloName', { firstName, lastName }) diff --git a/backend/src/emails/templates/includes/telegram-icon.png b/backend/src/emails/templates/includes/telegram-icon.png deleted file mode 100644 index 4c36ff66148cb69d8c8f9373b33bca573c251ed8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2159 zcmV-#2$1)QP)bMFuniA}Vr(Ws3f zX=+J~xF)q|Qi+NFAht>4#}8A5HmO9usx}fq(cTEGv}W7Iq&=4^ZB0l5?w~ISX?6ME=fa@mXo|4z+&fI z))k{%kk(V>d{nC<*|qmvj%wRg&6jhomIEO!9dE zdx9W{($zFY2b?%@B0DxV_8`e&Nq3~hTMv@QCGGC-@87;+#fl55aCS;iDwP&pzI^#> z03MdKCtfU*0%61bZ&v>4o zDqCxZtJUg(`DQ!-NV>6Ftsbz}4kwXo$pMnQD2lc?=XOcDu00jI4@uWK=XOO=v_+EF zicHfXAjz}VJ}c?o&Q-j6Ai3Z7{dFX(bJc6w1FW@=zuSxl07>^+Yaee`Z_XZItsQpG z?MhFrs}Ez$mweyf-ROBk2gI}ef%!blvcpRgB-dJNH_Rxn|5GZJ7M088Q+Vh0 z_T9!g&+`WB4^UV1fcR85uZ<`90?98LV{#-nClp`ooZEB-U+u?<6DP9cX^4$H}e)h-ZN0TL7K|u*3KLgL8$l!Z7RsurZU#{3Vymy;T3KR4Uz6E|=Th ztVy~D05Zj5afx$osN3V8Q)em60^m2~h)B06PZ;27cZ^`B@Q$;ioQMyts|zG626E7#R5c;Naj}v(=TTr#7hqwkxTn0SAC8ov#aw`Ty{ zkW^688^)Mt;;rfNb{ej)TaZS<&thJx4R4SvAHq{#sV06KP1s_goe6d(u z0^p{kddvpr+=YxW=7OZA6QQIv)oS&nD2iSMun)lAAP7oxDe9bi!a4WAELeZ{yCsjJtw{Oga41jY0KA1p(+W>3^u=()e!zW4Z%VaWpbGh7Ttxgz*U#M2AKLqgJ z>GCA^FI~FybIX=3n`l$-)EofdTt?C<0EKp>NiGNQNTpJFB#NTr0QLg7OVZs9M0WbV z|4@SC?hK@{1FYjZl_7aDjU^?HCp-qAk#XNH6bg@a+)#==faFO-ay{O;nJl`sdaynB6-N<^ZB!qUQUtN)E{C< zo*o(+`gf^R>Wu>&Z6oFJ|8hQ`KWhLW&cjQKn7VROISl}J-g)OZFcsx#3(mPT$N%%d z+fm^?0KT3U`7}&jNEQl(%dvyZTu0qGkXjGGq|K8zLqQNkB-=XG%?3`Q)(cKgdnRjb zJ`BSjg<-g`RnB6ucs+nyQ_}BvE$g&?VtP6aasZHIB)Pb;D;!|0y<5^j02?L!wNxs# z6p(Swr8)km4s}xw=;)fJm25n zzrFT<$^r3R*^_BBQrDPzdU{?50Bh|-B!4kW#z_{yz9@>eG?^gNngE}y&ojPaZSLvm zc>7Nx}umvm_tzegBWOvM>x6$7wDdh3`oY2SISfTsMPI62mb3^E;U(5-*XDEnK+p zsqyjg>q%~_-Q=_jNh5_q;Um*`z1NbYW)mnB3a35KTSv0oef7GFI8AO{qfGLKlTt31 z8zH%|d#YU>klZ*|2Kk&PG~f4kliWI2o%sxsTbo6)uO&;jKva#1-ZecTe)CO@2NHfU zVyzvPv~9lT50fmD+?eD7=h`PTNgK-LawC$~NJ`XDHz8?6(wd~k1J^#AyY}JawNGc$ lAeoN;%a5lUVZMJp|6hafLt8=zP{RNK002ovPDHLkV1k2FAsYYy diff --git a/backend/src/emails/templates/includes/twitter-icon.png b/backend/src/emails/templates/includes/twitter-icon.png deleted file mode 100644 index fffb9b59939b564a552879830d1244e319c9ba8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2002 zcmV;@2QB!CP)2v^jL`{t)V1_VYpM$PXVmRA|eAWko=M7c?U=;4MC~~@O}SQ zNry;oNn@WkBpoBUqg*b(o76UO0~|kod`le1uSmK%scj=c@_eCC*xuFEbu5XUNm4ir z!|phak1RIl0YK8taU35B!>~Jv-Mkt=QXvR}mz;BZCAFlJ*my{4an9`xg5V`dh56Xj z{RAWx!Z3VA(zfgp7Y-zU?|I&KlJQ*S>h^#z3}5`PIS&AmwuNE%V!d*6_JA-9yPb1; z^OLpkFvdLQdEUO+exJ1gs-yjp#r)0B2PDS|g~GkF%?>j*fbaXal6-41j`nFl^1P(Y zGp!S*jRBG<>CpA!JaA=-tok(VA3m)C!Z6&qSXOv>g5;Jk40ld@U;9w0RF;p8jh(>< zx3+IIE))ud&(&_AuId5RUETHSJaFY8=KHlTrg}hMUtj0Q$jCbjwWY0tnB*XUk4ajR zCo##39UUFFO`a!A^?;F)k?(wv&P$pgxu;MlY_ZlZvDV&Vt!*{N+)478>KVWkNM0tn z2f*tI>sdZLJpB0NbL}UPXcJK*L;xNlc{q)I6@PDOX(?H2pD2||f301YeNl6qoe(4dM?SbwKkaS0S_l7s3H0-0IXWI>VIu*ZQDq`k;L8@ z^KcsH0bq1=^z#6|LGsrr%y$6QPe9U_(g*+ml7E~0yI3p^d!F}Y06!t==3)N2wf4=l zbz5uy(9zNHmUHf|q_&c_0)UC4XeG(@X+;1St$iTr%H{IY0JZ`+F_)n+=64zD1pthU zj2s}jCaE3C^-&b9G}WL*>cdgzTyduN*4iW1+Ad?vBLL3KV&0RsUf=hdgCO{or0r?! zt4scSnk3EWzfP(-IhGAHC&V7^Qea^YnB%7Rb7iY7bN4+mg`g&S>0FYEP zk`i~HS~%x+Mp3k~UOCV6{BpVcLu+lZy}i8yz{a+=wp4>307$ZFZEHBzG?82*r8-gv z0FZp8+70*2*QQu3j-k%@P!Ezi$ZT;PlB=5l+?0W1-1EH0(gr2cqIyWXEC;F;#yQuS zfuQ-si4&j7K}aI>^z_^TpgAi~H9~E&GyolD#?c6-e&y?d@$yBq<1j2PEB}Cnw2X zL-J@|D>+GbU%q_#U{6m^M;?5Ws8lMScFrBhlar)K9yO&>X+YA+yojB14~>tHhfx%L zRZ>${zW)CHC1Yb_zag1r$vzE|PL@ig0RsTlJiI)y+BtV1ilRreko5QWFBuvddKJJI za?&-0NuMVNltVd@UL<+g81wCA%a+~dd0y(!dT(#<(xIWDS0&w-hqf7T2&f5+1VPZ7 zB*Bs7JI0u;aU8ccH8r`3iHY~EweRIIoH_p!OTx58#Ca zJfCsSJ=)yd{QRa(n?~{w*3;9|F)=am1LxdR0CJ58)k4x#!bIlKn56fNF+Xo_Z{M?S z-MYavf}$w;cpS%%0C)<(EonIBi)%w;R~@MYLGY}kXVMT$`mZtOu%y>oT3Y_HapT5+ z%vHWpsoWmN@mW=_SvcDYeeN49)F)?ucSc${~=kBw4CH8s)wSv zPHXeTwD9<}L$x3XzE%5;Tu&g`ZLQsZ)w^p8NuuxjZ(eU%B9e}k%jLVTou#I2EUHVy z9VE{$oV><@N-YpSL38D z3`p*pD}#K_y|w3g`$+E2U)I8ahzpWd^u1J4o6rDN#j@grsAVHYar+xN&Xn#>L4SS7-Ae kxfUPE%hR)Av0tD6KRO$}cDgFm=l}o!07*qoM6N<$f{G#L5&!@I diff --git a/backend/src/emails/templates/includes/webflow.css b/backend/src/emails/templates/includes/webflow.css deleted file mode 100644 index 45e4420c4..000000000 --- a/backend/src/emails/templates/includes/webflow.css +++ /dev/null @@ -1,166 +0,0 @@ -body{ - display: block; - font-family: "Work Sans", sans-serif; - font-size: 17px; - text-align: center; - text-align: -webkit-center; - justify-content: center; - padding: 0px; - margin: 0px; -} - -h2 { - margin-top: 15px; - color: #383838; -} - -.container { - max-width: 680px; - margin: 0 auto; - display: block; -} - -.head-logo { - width: 100%; - height: auto; -} - -.text-block { - margin-top: 20px; - color: #9ca0a8; -} - -.content { - display: block; - width: 78%; - margin: 40px 1% 40px 1%; - padding: 20px 10% 40px 10%; - border-radius: 24px; - background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5); -} - -.p_content{ - margin: 15px 0 15px 0; - line-height: 26px; - color: #696c72; -} - -.clink { - line-break: anywhere; - margin-bottom: 40px; -} - -.button-3, -.button-4, -.button-5 { - display: inline-block; - padding: 9px 15px; - color: white; - border: 0; - line-height: inherit; - text-decoration: none; - cursor: pointer; - border-radius: 20px; - background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); - box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); - margin: 25px 0 25px 0; - width: 50%; -} - -.button-4 { - background-image: radial-gradient(circle farthest-corner at 0% 0%, #616161, #c2c2c2); -} - -.button-5 { - background: linear-gradient(135deg, #53900c, #6e6e6e); - font-size: 20px; - font-weight: 600; - color: #f5f5f5; - width: auto; - box-shadow: 20px 20px 25px; - transition: all 0.3s ease; -} - -.button-5:hover { - transform: translateY(-5px); - box-shadow: 20px 25px 30px rgba(56, 56, 56, 0.4); -} - -.chatbox-wrapper { - margin-right: 8px; -} -.bi-chatbox { - margin-bottom: -5px; -} - -.child-right { - text-align: right; -} -.child-left { - text-align: left; -} - -.socialmedia { - display: flex; - margin-top: 40px; - max-width: 600px; - -} -.slink{ - width: 150px; -} - -.footer { - padding-bottom: 20px; -} - -.footer_p1 { - margin-top: 30px; - color: #9ca0a8; - margin-bottom: 30px; -} - -.footer_p2 { - color: #383838; - font-weight: bold; -} - - -.image { - width: 200px; - margin-top: 30px; - margin-bottom: 30px; -} - -.div-block { - display: table; - margin-top: 20px; - margin-bottom: 40px; - flex-direction: row; - justify-content: center; - align-items: center; -} - -.terms_of_use { - color: #9ca0a8; -} - -.text-block-3 { - color: #9ca0a8; - margin-bottom: 30px; -} - -.line_image, -.line { - width: 100%; - height: 13px; - margin-top: 40px; -} - -.line_image { - background-image: linear-gradient(90deg, #c58d38, #c58d38 0%, #f3cd7c 35%, #dbb056 54%, #eec05f 63%, #cc9d3d); -} - -.line { - background-image: linear-gradient(90deg, #c58d38, #f3cd7c 40%, #dbb056 55%, #eec05f 71%, #cc9d3d); -} diff --git a/backend/src/emails/templates/includes/youtube-icon.png b/backend/src/emails/templates/includes/youtube-icon.png deleted file mode 100644 index d135ba625d2749adad59d87623b082797418f5ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1802 zcmV+l2le=gP)A6O75=_ElNjVNA;O7-5TOgwnA%F_y_qafL{%!fVbMi4 zNR|-6MXj=dt|DavsEewq3JqC+h?I~8@`6PdEXo4mNTPBc>FVd_svY4G~Z@4@4fGwbI-f)-h0kHm*_I8)#?FB&q^AWbcE#700y0N z1ICyE0C3JN8Do|J%uAXfd7I=7l2?KtxZ6$p*bSjk6qNvsN_v6hh$JsPBqixO$v*=a zFO^DBXD#iZ1E!~^2bPzYUnV&w>6uQ+Z3fAkk}eerg$qMNLrWcznN>ioR@=Y2y806U zKbEw=12(k<$$J3K8)MD|L9mcXmM>8ft+l5ly$N72ixC+xPx4F{hL=goM}U_DDwWD1 zN#i6>`0zUoNs}Z;%jNP1X}PH#aP{id6LB2BBk5pTZZ|=4E|<%lEEbECX?P~h!`9ld zIF2WFTjK#h(!n^6C# zhcV`*Fbpqkb$?3-B%}SrZvN(X0+K7aT<-a;W`|83P^nZ7k^IMQ9PNETa!%6m&DIGU z#sEo_H2%0W9$1?qlQwO5;Ts%atv$6{R(PER$rIMvQyZ=~|Ebk#`&U+0X7KRV_T9#O zE|)vp96+t>0ZCN%xHcYGOT@g|eBnV4n4X>`h?_tl1`G78c%g(vyCA}u; zDIYl`$B;OHz*-JZQpHo)ElJ-jm&=Pjd|%AY&VFHWaq)cs!#;eHHM-NNuOY^m zAN9KN0C4#5;s56I`Bb5A3r2xt7LfFUj|7r;f*^Q5gAtifEEfMx@}EB3Mw|21YW09~ zZbb4*sa;F+u(kFWfbSV&E*Fc%86SnMkaQiu*VFPyj#R7F118zD@Xg!bPV>B^UpnW` z#&KMWqUdL{v$K6ZdRuIm_2DH;{%4IOuR#O=oOAz5skA@&?UVHLg@uKwYPI^Dul_{V zzcX-$jie*K0!V)B%T4%4;y8ZKTKl_Ow{CsOQ_Q@teo03R$t(`&$nK1D?o_>ApRQCY zKS;|p#w`2lCHb@g;OlviT=nH{fR;%s!rDU{W&^YG?eA&*qj<5J6J-52L zIu%9H*>2mA>`)tT2gq~o+=1LaNv~hKcI~U(w80oNkSVYr*_G|}ME37TMn*pDwhhKP z=RJ^h!vQ4k7-PO$DwV#!lb|Y#4M|~!$ug4f$-rF)N%u*u?>$s4{7NGiT|3}eh2aU6eajJc5VJKqjN zzC@BY@+7Y$)mW)VQ%R|m2SM;IfOpgCX@hV0kVuN;6%z!(-6WwW(wAPN7n% z4Ea{1NxB{c!CeCYNgbXSB>iTm#R#25qVw0j{6?D_E5Y#$hJ43b`6aY8+_V7>T0jrX;WLsR@fDKLjw>*cXtrO!9w{R!DwA@_u7az!>8Iz&U4{ z_6G8j`bh4T^m&qnrhS2flD-09Ult=t-Yk_$!$8x%fTW86+E!Gw!9Gd*06de(MC)(! zjME&*wcgu|+bKwTP%!Zz7%CJB7m^Ch#~LK>6$*t5jsFiEknEM6e<)V<7U!GmjMs(3 zd-m-46*A=59s$f7W6m{SSm%JFM~~hkd8W5E^$sM@v=&!yn6@ObQmOp)ajO!MG+8c} zztvh)y&)r%ED=XZ&h^f`?ta=H9LE|)t=a;5v`br(sQ+{vvf$+yf2 z7K_D6lBc_8T5mw|^mY~G+a^WBFuX+a+;-3GW{^C$U6m;Cq*%Iru{6mz5%kFPgyhY) zZ9I_j#E7+aED3*iW&JS86_Tghb^CRkv`RkHM`nPv*+J5ANvRZd6Otw+9Z%bM;K{MM sCkH2=9G&fikXC#q4^MA}-F|%jQ$FLp<@n27i2wiq07*qoM6N<$f^Fe$FaQ7m diff --git a/backend/src/emails/templates/layout.pug b/backend/src/emails/templates/layout.pug deleted file mode 100644 index 0995b2647..000000000 --- a/backend/src/emails/templates/layout.pug +++ /dev/null @@ -1,26 +0,0 @@ -doctype html -html(lang=locale) - head - meta( - content="multipart/html; charset=UTF-8" - http-equiv="content-type" - ) - meta( - name="viewport" - content="width=device-width, initial-scale=1" - ) - style. - .wf-force-outline-none[tabindex="-1"]:focus{outline:none;} - style - include includes/email.css - include includes/webflow.css - - body - div.container - include includes/header.pug - - .wrapper - block content - include includes/greeting.pug - - include includes/footer.pug diff --git a/backend/src/emails/templates/resetPassword/html.pug b/backend/src/emails/templates/resetPassword/html.pug deleted file mode 100644 index 4d4ed3f50..000000000 --- a/backend/src/emails/templates/resetPassword/html.pug +++ /dev/null @@ -1,16 +0,0 @@ -extends ../layout.pug - -block content - h2= t('emails.resetPassword.title') - .text-block - include ../includes/salutation.pug - p= t('emails.resetPassword.youOrSomeoneResetPassword') - .content - h2= t('emails.resetPassword.title') - div(class="p_content")= t('emails.resetPassword.pleaseClickLink') - a.button-3(href=resetLink) #{t('emails.general.reset')} - div(class="p_content")= t('emails.general.orCopyLink') - - a.clink(href=resetLink) #{resetLink} - - include ../includes/requestNewLink.pug diff --git a/backend/src/emails/templates/resetPassword/subject.pug b/backend/src/emails/templates/resetPassword/subject.pug deleted file mode 100644 index 21f277316..000000000 --- a/backend/src/emails/templates/resetPassword/subject.pug +++ /dev/null @@ -1 +0,0 @@ -= t('emails.resetPassword.subject') diff --git a/backend/src/emails/templates/transactionLinkRedeemed/html.pug b/backend/src/emails/templates/transactionLinkRedeemed/html.pug deleted file mode 100644 index 281ee9205..000000000 --- a/backend/src/emails/templates/transactionLinkRedeemed/html.pug +++ /dev/null @@ -1,18 +0,0 @@ -extend ../layout.pug - -block content - h2= t('emails.transactionLinkRedeemed.title', { senderFirstName, senderLastName }) - .text-block - include ../includes/salutation.pug - p= t('emails.transactionLinkRedeemed.hasRedeemedYourLink', { senderFirstName, senderLastName, senderEmail }) - .content - h2= t('emails.general.transactionDetails') - div(class="p_content")= t('emails.general.amountGDD', { amountGDD: transactionAmount }) - br - = t('emails.transactionLinkRedeemed.memo', { transactionMemo }) - br - = t('emails.general.detailsYouFindOnLinkToYourAccount') - - a.button-3(href=`${communityURL}/transactions`) #{t('emails.general.toAccount')} - - include ../includes/doNotReply.pug diff --git a/backend/src/emails/templates/transactionLinkRedeemed/subject.pug b/backend/src/emails/templates/transactionLinkRedeemed/subject.pug deleted file mode 100644 index 9070b60b3..000000000 --- a/backend/src/emails/templates/transactionLinkRedeemed/subject.pug +++ /dev/null @@ -1 +0,0 @@ -= t('emails.transactionLinkRedeemed.subject', { senderFirstName, senderLastName }) diff --git a/backend/src/emails/templates/transactionReceived/html.pug b/backend/src/emails/templates/transactionReceived/html.pug deleted file mode 100644 index 4f9aa9c31..000000000 --- a/backend/src/emails/templates/transactionReceived/html.pug +++ /dev/null @@ -1,30 +0,0 @@ -extend ../layout.pug - -block content - mixin mailto(email, subject) - - var formattedSubject = encodeURIComponent(subject) - a(class!=attributes.class href=`mailto:${email}?subject=${formattedSubject}`) - block - - - var subject= t('emails.transactionReceived.replySubject', { senderFirstName, senderLastName, transactionAmount }) - h2= t('emails.transactionReceived.title', { senderFirstName, senderLastName, transactionAmount }) - .text-block - include ../includes/salutation.pug - p - = t('emails.transactionReceived.haveReceivedAmountGDDFrom', { transactionAmount, senderFirstName, senderLastName }) - | ( - +mailto(senderEmail, subject)=senderEmail - |). - .content - h2= t('emails.general.message') - .child-left - div(class="p_content")= memo - .child-right - +mailto(senderEmail, subject)(class="button-5") - include ../includes/chatbox-icon.pug - span #{t('emails.general.answerNow')} - - a.button-3(href=`${communityURL}/transactions`) #{t('emails.general.toAccount')} - - - diff --git a/backend/src/emails/templates/transactionReceived/subject.pug b/backend/src/emails/templates/transactionReceived/subject.pug deleted file mode 100644 index 872806ebc..000000000 --- a/backend/src/emails/templates/transactionReceived/subject.pug +++ /dev/null @@ -1 +0,0 @@ -= t('emails.transactionReceived.subject', { senderFirstName, senderLastName, transactionAmount })