Newer
Older
import { Injectable, Logger, InternalServerErrorException } from '@nestjs/common';
import { ContactForm, Email, EmailWithoutFrom } from './email';
import { ConfigService } from '../configuration/config.service';
import { buildContactAdminEmail, buildContactUserEmail } from '../email-templates/contact';
constructor(private configService: ConfigService) {
this.config = this.configService.config;
}
async sendContactEmails(contactForm: ContactForm) {
Logger.log('[-] sendContactEmails method');
// contactForm.text = contactForm.text.replace(/(?:\r\n|\r|\n)/g, '<br />');
const adminEmailBody = buildContactAdminEmail({
subject: contactForm.subject,
message: contactForm.text,
firstName: contactForm.firstname,
lastName: contactForm.lastname,
email: contactForm.email,
datetime: moment().format('DD/MM/YYYY à HH:mm'),
imageHost: this.config.imageHost,
});
const userEmailBody = buildContactUserEmail({
subject: contactForm.subject,
message: contactForm.text,
firstName: contactForm.firstname,
datetime: moment().format('DD/MM/YYYY à HH:mm'),
imageHost: this.config.imageHost,
});
const adminEmail = new EmailWithoutFrom();
adminEmail.to = [this.config.plateformDataEmail];
adminEmail.replyTo = contactForm.email;
adminEmail.subject = contactForm.subject;
adminEmail.html = adminEmailBody;
const userEmail = new EmailWithoutFrom();
userEmail.to = [contactForm.email];
userEmail.subject = contactForm.subject;
userEmail.html = userEmailBody;
await this.send(adminEmail);
await this.send(userEmail);
async send(emailInfo: EmailWithoutFrom) {
let conn, ch;
// tslint:disable-next-line:max-line-length
const rabbitmqUrl = `amqp://${this.config.rabbitMQ.user}:${this.config.rabbitMQ.password}@${this.config.rabbitMQ.host}:${this.config.rabbitMQ.port}`;
const mailerQueue = this.config.mailerQueue;
let email = new Email();
email = Object.assign(email, emailInfo);
Logger.log(this.config);
Logger.log(email);
// Connect to rabbitmq
try {
conn = await amqp.connect(rabbitmqUrl);
} catch (error) {
Logger.error(' [x] Error connecting to RabbitMQ: ', JSON.stringify(error));
throw new InternalServerErrorException('Could not connect to rabbitMQ.');
}
try {
// Create a communication channel
ch = await conn.createChannel();
} catch (error) {
Logger.error(' [x] Error creating channel: ', JSON.stringify(error));
throw new InternalServerErrorException('Could not create channel.');
}
// Stringify and bufferise message
const buffer = Buffer.from(JSON.stringify(email));
try {
await ch.assertQueue(mailerQueue, { durable: true });
} catch (error) {
Logger.error(' [x] Error creating channel: ', JSON.stringify(error));
throw new InternalServerErrorException('Could not assert channel.');
}
try {
await ch.sendToQueue(mailerQueue, buffer, { persistent: true });
} catch (error) {
Logger.error(' [x] Error sending to queue: ', JSON.stringify(error));
throw new InternalServerErrorException('Could not send to queue.');
}
Logger.log(`Sent to queue ${mailerQueue}: ${JSON.stringify(email)}`);
setTimeout(() => { conn.close(); }, 500);
return;