Skip to main content

Emails

Marblism integrates an email library that can work different providers. We already integrated Mailjet - they have a free plan up to 6,000 emails/month.

Setup Mailjet

  1. Sign-up to Mailjet (it's free)

  2. Add your api and secret key to the API .env

EMAIL_MAILJET_API_KEY=
EMAIL_MAILJET_SECRET_KEY=
  1. Put your email in api/src/libraries/email/internal/email.type.ts
export const EmailSender = {
default: {
email: 'no-reply@marblism.com',
name: 'Marblism',
},
}

Send an email

Simple email

import { EmailService } from '../../../../libraries/email'

await this.emailService.send({
email: '...',
name: '...',
subject: `Reset your password`,
content: '...',
})

Template email

import { EmailService } from '../../../../libraries/email'

const type = this.emailService.Type.AUTHENTICATION_FORGOT_PASSWORD

await this.emailService.send({
type: type,
email: user.email,
name: user.name ?? user.email,
subject: `Reset your password`,
variables: {
url_password_reset: urlResetPassword,
},
})

Create an email template

  1. Add your html template in api/src/libraries/email/internal/templates

  2. Add your template as a new type in api/src/libraries/email/internal/email.type.ts

export enum EmailType {
DEFAULT = 'default',
AUTHENTICATION_WELCOME = 'authentication.welcome.password',
AUTHENTICATION_FORGOT_PASSWORD = 'authentication.forgot.password',
AUTHORIZATION_VERIFICATION_CODE = 'authorization.verification.code',
}
  1. Map it to your html file in api/src/libraries/email/internal/templates/email.template.service.ts
  private mapping: Record<EmailType, string> = {
[EmailType.AUTHORIZATION_VERIFICATION_CODE]:
'authorization-verification-code',
[EmailType.AUTHENTICATION_WELCOME]: 'authorization-verification-code',
[EmailType.AUTHENTICATION_FORGOT_PASSWORD]:
'authentication-forgot-password',
[EmailType.DEFAULT]: 'default',
}
info

Use variable in your html template like this: The link to reset your password is: <a href="{{url_password_reset}}">{{url_password_reset}}</a>

Add another email provider

You're free to integrate any email provider you want. You just need to add another provider to the email library (api/src/libraries/email/internal/providers). You can duplicate the Mailjet provider to implement your other email provider's API.

Local emails

When you set-up your project, it installs Mailpit - a local email server. It makes it more safe to develop locally and send/receive emails on a local inbox.

You will receive every emails that is sent by your app in this local inbox.

You can see the link to access it in your Docker Desktop app.

Then open it in your browser:

http://localhost:8022/

Read More

Read more on the official Mailjet documentation