nestjs-mailgun
Version:
NestJS provider for sending emails with mailgun
95 lines (80 loc) • 2.8 kB
text/typescript
import FormData from 'form-data';
import { Injectable, Inject } from '@nestjs/common';
import Mailgun, {
Interfaces,
MailgunClientOptions,
CreateUpdateList,
DestroyedList,
MailingList,
MailgunMessageData,
MessagesSendResult,
CreateUpdateMailListMembers,
DeletedMember,
MailListMember,
MailListMembersQuery,
MailListMembersResult,
MultipleMembersData,
NewMultipleMembersResponse,
ValidationResult,
APIErrorType,
} from 'mailgun.js';
import { MAILGUN_CONFIGURATION } from './constants';
export type MailgunError = APIErrorType;
export class MailgunService {
private readonly mailgun: Interfaces.IMailgunClient;
constructor(
private readonly configuration: MailgunClientOptions,
) {
this.mailgun = new Mailgun(FormData).client(configuration);
}
public createEmail = async (
domain: string,
data: MailgunMessageData,
): Promise<MessagesSendResult> => this.mailgun.messages.create(domain, data);
public validateEmail = async (email: string): Promise<ValidationResult> => {
try {
return await this.mailgun.validate.get(email);
} catch (e: unknown) {
throw new Error(e as string);
}
};
public createList = async (data: CreateUpdateList): Promise<MailingList> =>
this.mailgun.lists.create(data);
public destroyList = async (
mailListAddress: string,
): Promise<DestroyedList> => this.mailgun.lists.destroy(mailListAddress);
public getList = async (mailListAddress: string): Promise<MailingList> =>
this.mailgun.lists.get(mailListAddress);
public updateList = async (
mailListAddress: string,
data: CreateUpdateList,
): Promise<MailingList> => this.mailgun.lists.update(mailListAddress, data);
public listAddMember = async (
mailListAddress: string,
data: CreateUpdateMailListMembers,
): Promise<MailListMember> =>
this.mailgun.lists.members.createMember(mailListAddress, data);
public listGetMembers = async (
mailListAddress: string,
query?: MailListMembersQuery,
): Promise<MailListMembersResult> =>
this.mailgun.lists.members.listMembers(mailListAddress, query);
public listCreateMembers = async (
mailListAddress: string,
data: MultipleMembersData,
): Promise<NewMultipleMembersResponse> =>
this.mailgun.lists.members.createMembers(mailListAddress, data);
public listupdateMember = async (
address: string,
memberAddress: string,
data: CreateUpdateMailListMembers,
): Promise<MailListMember> =>
this.mailgun.lists.members.updateMember(address, memberAddress, data);
public listDestroyMember = async (
address: string,
memberAddress: string,
): Promise<DeletedMember> =>
this.mailgun.lists.members.destroyMember(address, memberAddress);
}