Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

61 rinda
1.7 KiB

  1. import amqp from 'amqplib'
  2. import dotenv from 'dotenv'
  3. import sgMail from '@sendgrid/mail'
  4. dotenv.config()
  5. const queuePaylater = process.env.QUEUE_PAYLATER
  6. const senderEmail = process.env.SENDER_EMAIL
  7. const apiKey = process.env.SENDGRIP_API_KEY
  8. sgMail.setApiKey(apiKey)
  9. amqp.connect(process.env.AMQP_SERVER).then(async conn => {
  10. const ch = await conn.createChannel()
  11. const queuePaylaterExist = ch.assertQueue(queuePaylater, { durable: true });
  12. if (queuePaylaterExist) {
  13. queuePaylaterExist.then(() => {
  14. return ch.consume(queuePaylater, async (msg) => {
  15. var messageBody = JSON.parse(msg.content.toString())
  16. console.log(`[*PayLater] Message Received! email : ${messageBody.email}`)
  17. sendReceipt({
  18. email: messageBody.email,
  19. subject: messageBody.subject,
  20. content: messageBody.content,
  21. })
  22. }, { noAck: true })
  23. }).then(() => {
  24. console.log('* Waiting for messages from queue ' + queuePaylater)
  25. })
  26. }
  27. }).catch(console.warn)
  28. function sendReceipt(message) {
  29. try {
  30. const parsedData = JSON.parse(message.email);
  31. if (Array.isArray(parsedData)) {
  32. message.email = parsedData
  33. }
  34. } catch (error) {
  35. console.log("Data bukan dalam format JSON.");
  36. }
  37. const now = new Date()
  38. const msg = {
  39. to: message.email,
  40. from: `Amigo Group Indonesia <${senderEmail}>`,
  41. subject: message.subject,
  42. html: message.content,
  43. }
  44. sgMail
  45. .send(msg)
  46. .then((response) => {
  47. if (response[0].statusCode == 202) {
  48. console.log(`Email sent to ${message.email} at ${now}`)
  49. } else {
  50. console.error(`Failed to send email to ${message.email} at ${now}`)
  51. }
  52. })
  53. .catch((error) => {
  54. console.error(error)
  55. })
  56. }