Advertisement
kkwokwai22

Untitled

Oct 22nd, 2017
778
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.57 KB | None | 0 0
  1. var express = require('express');
  2. var router = express.Router();
  3. var nodemailer = require('nodemailer');
  4. var ejs = require('ejs');
  5. var url = require('url');
  6.  
  7. // The given information (expect this to be a api or query from database)
  8. var payload = {
  9. "members": [
  10. {
  11. "email": "example@gmail.com",
  12. "name": "Jackie",
  13. "team": "engineering"
  14. },
  15. {
  16. "email": "kkwokwai22@gmail.com",
  17. "name": "Rohit",
  18. "team": "finance"
  19. },
  20. {
  21. "email": "example@hotmail.com",
  22. "name": "Maria",
  23. "team": "operations"
  24. },
  25. {
  26. "email": "example@gmail.com",
  27. "name": "General",
  28. "team": ""
  29. },
  30. {
  31. "email": "example@gmail.com",
  32. "name": "Jackie",
  33. "team": "engineering"
  34. }
  35. ],
  36.  
  37. "restaurant": {
  38. "logo": "https://s3-media2.fl.yelpcdn.com/bphoto/F_dgemfinYzY9nrZ_xfeGw/o.jpg",
  39. "name": "Tony’s Pizza Napoletana",
  40. "yelp_link": "https://www.yelp.com/biz/tonys-pizza-napoletana-san-francisco?osq=best+pizza"
  41. }
  42. }
  43.  
  44.  
  45. // targeting information for specific team member
  46. var teamDetails = {
  47. "operations": {
  48. 'backgroundImage': "http://www.channel4.com/explore/surgerylive/images/team2.jpg",
  49. 'description': 'Operations is the best wow!! '
  50. },
  51. "finance": {
  52. 'backgroundImage':'https://www.western.edu/sites/default/files/finance_header2.jpg',
  53. 'description': 'hey finance people thank you for always keeping us safe'
  54. },
  55. "engineering": {
  56. 'backgroundImage':'https://engineeringinterviewquestions.com/wp-content/uploads/2016/01/engineering-qa.jpg',
  57. 'description': 'you are in the engineering team please teach me to solve better problem'
  58. },
  59. 'general': {
  60. 'backgroundImage': 'http://www.kcc.edu/campaigns/PublishingImages/poh.jpg'
  61. }
  62. }
  63.  
  64. // ---------------------------------
  65.  
  66. /* GET home page. */
  67. app.get('/', function(req, res, next) {
  68. res.render('index.ejs', {info: payload})
  69. });
  70.  
  71.  
  72. // hitting this route will invoker the sendEmailTemplate function with the given payload
  73. app.get('/sendEmail', function(req, res, next) {
  74.  
  75. sendEmailTemplate(payload, function(err) {
  76. if(err) {
  77. console.log(err)
  78. }
  79. });
  80. res.send('Email Send!!')
  81. });
  82.  
  83. app.get('/voteUserData', function(req, res, next){
  84.  
  85. console.log(req.query)
  86.  
  87. var userDataScore = req.query.pizzaScore
  88. var user = req.query.member
  89.  
  90. console.log(userDataScore);
  91. console.log(user);
  92. });
  93.  
  94. // The sendEmailTemplate function is use for sending Email base on the given payload
  95. function sendEmailTemplate(informationOfMember, callback) {
  96.  
  97. // if payload not given function will exit
  98. if(!informationOfMember) {
  99. return;
  100. }
  101.  
  102. // create reusable transporter object using the default SMTP transport
  103. let transporter = nodemailer.createTransport({
  104. service: 'gmail',
  105. auth: {
  106. user: 'prompttesting@gmail.com',
  107. pass: 'testing111'
  108. }
  109. });
  110.  
  111. // given the varaible member to shorten object informationOfMember
  112. var members = informationOfMember.members
  113. // given the varaible restaurant to shorten object informationOfMember
  114. var restaurant = informationOfMember.restaurant
  115. // Loop through the payload and send email
  116. for(let i = 0; i < members.length; i++) {
  117. // check the condition of each email recipent and give them a different background to attract them
  118. var specificTeam = null
  119. var member = members[i];
  120. if(member.team === 'operations') {
  121. specificTeam = teamDetails.operations.backgroundImage
  122. } else if (member.team === 'engineering') {
  123. specificTeam = teamDetails.engineering.backgroundImage
  124. } else if (member.team === 'finance') {
  125. specificTeam = teamDetails.finance.backgroundImage
  126. } else {
  127. specificTeam = teamDetails.general.backgroundImage
  128. }
  129.  
  130. // The ejs (data) to send to email
  131. ejs.renderFile('./views/index.ejs',
  132. {
  133. user: member.name,
  134. title:'Rating Pizza',
  135. restaurantName: restaurant.name,
  136. restaurantLogo: restaurant.logo,
  137. restaurantLink: restaurant.yelp_link,
  138. backgroundImage: specificTeam,
  139. team: member.team
  140. },
  141. // callback (making sure the ejs finish rendering the info and then send down as data)
  142. function(err, data) {
  143. if(err) {
  144. console.log(err);
  145. } else {
  146. // final set up of email data before sending out
  147. let mailOptions = {
  148. from: '"Kevin Wong πŸ‘»" <prompttesting@gmail.com>', // sender address
  149. to: member.email, // list of receivers
  150. subject: 'Thank you for joining us Friday ', // Subject line
  151. text: 'Testing with Kevin!', // plain text body
  152. html: data// html body
  153. };
  154.  
  155. // sending out the email
  156. transporter.sendMail(mailOptions, (error, info) => {
  157. if (error) {
  158. return console.log(error);
  159. }
  160. console.log('Message %s sent: %s', info.messageId, info.response);
  161. });
  162. }
  163. })
  164. }
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement