diff --git a/apps/worker/src/app/workflow/usecases/send-message/send-message-email.usecase.ts b/apps/worker/src/app/workflow/usecases/send-message/send-message-email.usecase.ts index 3ee12243b68..fb1a16c7d71 100644 --- a/apps/worker/src/app/workflow/usecases/send-message/send-message-email.usecase.ts +++ b/apps/worker/src/app/workflow/usecases/send-message/send-message-email.usecase.ts @@ -537,6 +537,7 @@ export const createMailData = (options: IEmailOptions, overrides: Record; + headers?: Record; senderName?: string; } diff --git a/packages/node/README.md b/packages/node/README.md index 000ee5ab8ee..6f1e869ff3b 100644 --- a/packages/node/README.md +++ b/packages/node/README.md @@ -541,7 +541,10 @@ await novu.events.trigger("workflowIdentifier", { // customData will work only for sendgrid customData: { "customKey": "customValue" - } + }, + headers: { + 'X-Novu-Custom-Header': 'Novu-Custom-Header-Value', + }, } }, // actorId is subscriberId of actor diff --git a/packages/node/src/lib/events/events.interface.ts b/packages/node/src/lib/events/events.interface.ts index 6f9b18deb09..174facc0532 100644 --- a/packages/node/src/lib/events/events.interface.ts +++ b/packages/node/src/lib/events/events.interface.ts @@ -37,6 +37,7 @@ export interface IEmailOverrides extends IIntegrationOverride { bcc?: string[]; senderName?: string; customData?: Record; + headers?: Record; } export type ITriggerTenant = string | ITenantDefine; diff --git a/packages/node/src/lib/events/events.spec.ts b/packages/node/src/lib/events/events.spec.ts index c9ec6d50ab8..79d886ddf66 100644 --- a/packages/node/src/lib/events/events.spec.ts +++ b/packages/node/src/lib/events/events.spec.ts @@ -114,6 +114,9 @@ describe('test use of novus node package - Events', () => { name: 'Fourth Child', }, }, + headers: { + 'X-Novu-Custom-Header': 'test-data', + }, }, }, payload: { diff --git a/packages/stateless/src/lib/provider/provider.interface.ts b/packages/stateless/src/lib/provider/provider.interface.ts index 0bbdbf33a1e..5dbf5d06119 100644 --- a/packages/stateless/src/lib/provider/provider.interface.ts +++ b/packages/stateless/src/lib/provider/provider.interface.ts @@ -24,6 +24,7 @@ export interface IEmailOptions { notificationDetails?: any; ipPoolName?: string; customData?: Record; + headers?: Record; senderName?: string; } diff --git a/providers/resend/src/lib/resend.provider.ts b/providers/resend/src/lib/resend.provider.ts index 597fba28220..f7d7d53e008 100644 --- a/providers/resend/src/lib/resend.provider.ts +++ b/providers/resend/src/lib/resend.provider.ts @@ -42,6 +42,7 @@ export class ResendEmailProvider implements IEmailProvider { content: attachment.file, })), bcc: options.bcc, + headers: options.headers, }); if (response.error) { diff --git a/providers/sendgrid/src/lib/sendgrid.provider.ts b/providers/sendgrid/src/lib/sendgrid.provider.ts index b859c8a70ef..bf18ca02e6b 100644 --- a/providers/sendgrid/src/lib/sendgrid.provider.ts +++ b/providers/sendgrid/src/lib/sendgrid.provider.ts @@ -128,6 +128,7 @@ export class SendgridEmailProvider implements IEmailProvider { }, ], templateId: templateId, + headers: options.headers, }; if (options.replyTo) { diff --git a/providers/sendinblue/src/lib/brevo.provider.ts b/providers/sendinblue/src/lib/brevo.provider.ts index 365feb991d2..38b3290eff1 100644 --- a/providers/sendinblue/src/lib/brevo.provider.ts +++ b/providers/sendinblue/src/lib/brevo.provider.ts @@ -47,6 +47,7 @@ export class BrevoEmailProvider implements IEmailProvider { name: attachment?.name, content: attachment?.file.toString('base64'), })); + email.headers = options.headers; if (options.cc?.length) { email.cc = options.cc?.map((ccItem) => ({ email: ccItem }));