diff --git a/.env.example b/.env.example index 5077517..934b9ca 100644 --- a/.env.example +++ b/.env.example @@ -3,4 +3,4 @@ QUEUE_NOTA= QUEUE_PAYLATER= SENDER_EMAIL= SENDER_NAME= -SENDING_BLUE_API_KEY= \ No newline at end of file +SENDGRIP_API_KEY= \ No newline at end of file diff --git a/index.mjs b/index.mjs index f96915e..a4e2533 100644 --- a/index.mjs +++ b/index.mjs @@ -2,58 +2,79 @@ import express from 'express' import cors from 'cors' import bodyParser from 'body-parser' import amqp from 'amqplib' -// import nodemailer from 'nodemailer' -import SibApiV3Sdk from 'sib-api-v3-sdk' import dotenv from 'dotenv' +import sgMail from '@sendgrid/mail' + dotenv.config() const app = express() const queuePaylater = process.env.QUEUE_PAYLATER const queueNota = process.env.QUEUE_NOTA const senderEmail = process.env.SENDER_EMAIL -var defaultClient = SibApiV3Sdk.ApiClient.instance -var apiKey = defaultClient.authentications['api-key'] -apiKey.apiKey = process.env.SENDING_BLUE_API_KEY -var apiInstance = new SibApiV3Sdk.TransactionalEmailsApi() -var sendSmtpEmail = new SibApiV3Sdk.SendSmtpEmail() +const apiKey = process.env.SENDGRIP_API_KEY +sgMail.setApiKey(apiKey) app.use(cors()) app.use(bodyParser.json()) app.get('/', (_req, res) => { - res.status.send(200).send("Amigo Receipt Sender Service Homepage!") + res.status.send(200).send("Amigo Receipt Sender Service Homepage!") }) -amqp.connect(process.env.AMQP_SERVER).then(async conn=> { - const ch = await conn.createChannel() - const queuePaylaterExist = ch.assertQueue(queuePaylater, { durable : true }); - const queueNotaExist = ch.assertQueue(queueNota, { durable: true }) - if (queueNotaExist) { - queueNotaExist.then(() => { - return ch.consume(queueNota, async (msg) => { - var messageBody = JSON.parse(msg.content.toString()) - console.log(`[*] Message Received! email : ${messageBody.email} and pesan : ${messageBody.html}`) - sendReceipt(messageBody.email, messageBody.html) - }, { noAck: true }) - }).then(() => { - console.log('* Waiting for messages from queue ' + queueNota) - }) - } +amqp.connect(process.env.AMQP_SERVER).then(async conn => { + const ch = await conn.createChannel() + const queuePaylaterExist = ch.assertQueue(queuePaylater, { durable: true }); + const queueNotaExist = ch.assertQueue(queueNota, { durable: true }) + if (queueNotaExist) { + queueNotaExist.then(() => { + return ch.consume(queueNota, async (msg) => { + var messageBody = JSON.parse(msg.content.toString()) + console.log(`[*NOTA] Message Received! email : ${messageBody.email}`) + sendReceipt({ + email: messageBody.email, + subject: messageBody.subject, + content: messageBody.content, + }) + }, { noAck: true }) + }).then(() => { + console.log('* Waiting for messages from queue ' + queueNota) + }) + } + if (queuePaylaterExist) { + queuePaylaterExist.then(() => { + return ch.consume(queueNota, async (msg) => { + var messageBody = JSON.parse(msg.content.toString()) + console.log(`[*PayLater] Message Received! email : ${messageBody.email}`) + sendReceipt({ + email: messageBody.email, + subject: messageBody.subject, + content: messageBody.content, + }) + }, { noAck: true }) + }).then(() => { + console.log('* Waiting for messages from queue ' + queueNota) + }) + } }).catch(console.warn) -function sendReceipt(recepientEmail, receipt) { - var date = new Date() - sendSmtpEmail = { - sender: {email: senderEmail, name: process.env.SENDER_NAME}, - to: [{email: recepientEmail, name: 'Customer'}], - subject: "test", - textContent: "testing", - htmlContent: receipt - } - apiInstance.sendTransacEmail(sendSmtpEmail).then(function(data) { - console.log('API called successfully. Returned data: ' + data) - console.log(date.toLocaleString()) - }, function(error) { - console.error(error) +function sendReceipt(message) { + const now = new Date() + const msg = { + to: message.email, + from: senderEmail, + subject: message.subject, + html: message.content, + } + sgMail + .send(msg) + .then((response) => { + if (response[0].statusCode == 202) { + console.log(`Email sent to ${message.email} at ${now}`) + } else { + console.error(`Failed to send email to ${message.email} at ${now}`) + } + }) + .catch((error) => { + console.error(error) }) } diff --git a/package.json b/package.json index 681d30e..c57fe40 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "author": "Michael Pandu", "license": "ISC", "dependencies": { + "@sendgrid/mail": "^8.1.0", "amqplib": "^0.10.3", "body-parser": "^1.20.1", "cors": "^2.8.5",