@softkit/mail
Version:
The Mailgun Mail Module is a comprehensive solution for integrating Mailgun's email functionality into NestJS applications. It provides a seamless way to send emails using Mailgun with minimal setup and configuration.
108 lines • 4.37 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SendgridService = void 0;
const tslib_1 = require("tslib");
const common_1 = require("@nestjs/common");
const constants_1 = require("../../constants");
const exceptions_1 = require("@softkit/exceptions");
const abstract_mail_service_1 = require("../abstract-mail.service");
const config_1 = require("../../config");
const type_convertor_1 = require("../../utils/type-convertor");
let SendgridService = class SendgridService extends abstract_mail_service_1.AbstractMailService {
constructor(sendgrid, config) {
super();
this.sendgrid = sendgrid;
this.config = config;
}
// eslint-disable-next-line complexity
async sendEmail(emailData) {
const fromAddress = emailData.from ?? this.config.defaultFromEmail;
const fromName = emailData.userFullName ?? this.config.defaultFromName;
const bcc = emailData.bcc ?? this.config.defaultBccList;
const { attachment, cc, html, subject, to, text, ...rest } = emailData;
if (html || text) {
const content = (html ? { html } : { text });
const attachments = await this.transformAttachments(attachment);
const response = await this.sendgrid.send({
from: {
email: fromAddress,
name: fromName,
},
subject,
bcc: this.transformToSendgridEmailData(bcc),
cc: this.transformToSendgridEmailData(cc),
to: this.transformToSendgridEmailData(to),
attachments,
...content,
...rest,
});
return {
status: response[0].statusCode,
};
}
else {
throw new exceptions_1.GeneralInternalServerException(undefined, `Looks like a developer mistake either html or text must be provided. Take a look now.`);
}
}
async sendTemplateEmail(templateId, emailData, emailTemplateParams) {
if (emailData.subject) {
this.logger.error({ templateId }, "Subject won't be set. Use subject in the sendgrid UI for template emails.");
}
const fromAddress = emailData.from ?? this.config.defaultFromEmail;
const bcc = emailData.bcc ?? this.config.defaultBccList;
const fromName = emailData.userFullName ?? this.config.defaultFromName;
const { attachment, cc, to, ...rest } = emailData;
const attachments = await this.transformAttachments(attachment);
const response = await this.sendgrid.send({
from: {
email: fromAddress,
name: fromName,
},
bcc: this.transformToSendgridEmailData(bcc),
cc: this.transformToSendgridEmailData(cc),
to: this.transformToSendgridEmailData(to),
attachments,
templateId,
dynamicTemplateData: emailTemplateParams,
...rest,
});
return {
status: response[0].statusCode,
};
}
transformToSendgridEmailData(emails) {
if (emails === undefined) {
return [];
}
return (Array.isArray(emails) ? emails : [emails]).map((email) => {
return {
email,
};
});
}
async transformAttachments(attachment) {
if (!attachment) {
return [];
}
const attachments = [];
for (const item of attachment) {
const content = await (0, type_convertor_1.toBase64)(item.data);
attachments.push({
content,
contentId: item.contentId,
type: item.type,
disposition: 'attachment',
filename: item.filename,
});
}
return attachments;
}
};
exports.SendgridService = SendgridService;
exports.SendgridService = SendgridService = tslib_1.__decorate([
(0, common_1.Injectable)(),
tslib_1.__param(0, (0, common_1.Inject)(constants_1.SENDGRID_CLIENT_TOKEN)),
tslib_1.__param(1, (0, common_1.Inject)(constants_1.SENDGRID_CONFIG_TOKEN)),
tslib_1.__metadata("design:paramtypes", [Function, config_1.SendgridConfig])
], SendgridService);
//# sourceMappingURL=sendgrid.service.js.map