import nodemailer from 'nodemailer'; import * as fs from 'fs'; import path from 'path'; export const sendemail_helper = async ( email: string, subject: string, html: string ): Promise => { try { const jsonString = fs.readFileSync( path.resolve(__dirname, '../config/config.json'), 'utf-8' ); const jsonData = JSON.parse(jsonString); var transporter = nodemailer.createTransport({ host: jsonData.emailsmtp, port: jsonData.emailport, secure: false, // true for 465, false for other ports auth: { user: jsonData.emailusername, pass: jsonData.emailpassword } }); var mailOptions = { from: jsonData.emailfrom, to: email, subject: subject, html: html, attachments: [ { filename: 'Logo.png', path: __dirname + '/imgs_email/Logo.png', cid: 'logo@santander.nl' }, { filename: 'uploadImage.png', path: __dirname + '/imgs_email/uploadImage.png', cid: 'uploadImage@santander.nl' }, { filename: 'faq.png', path: __dirname + '/imgs_email/faq.png', cid: 'faq@santander.nl' }, { filename: 'mail.png', path: __dirname + '/imgs_email/mail.png', cid: 'mail@santander.nl' }, { filename: 'privacy.png', path: __dirname + '/imgs_email/privacy.png', cid: 'privacy@santander.nl' }, { filename: 'tele.png', path: __dirname + '/imgs_email/tele.png', cid: 'tele@santander.nl' } ] }; const info = await transporter.sendMail(mailOptions); console.log(info); return info.messageId; } catch (error) { console.log(error); return ''; } }; ---- import express, { Request, Response } from 'express'; import schedule from 'node-schedule'; import { Sequelize } from 'sequelize-typescript'; import { basicAuth } from '../middleware/basic-auth'; import * as fs from 'fs'; import path from 'path'; import { sendemail_helper } from '../middleware/sendemail_helper'; const jsonString = fs.readFileSync( path.resolve(__dirname, '../config/config.json'), 'utf-8' ); const jsonData = JSON.parse(jsonString); const router = express.Router(); router.post( '/api/scheduler_sendemail', basicAuth, async (req: Request, res: Response) => { const sequelize = new Sequelize({ dialect: 'mssql', host: jsonData.dbhost, username: jsonData.usernamedb, password: jsonData.passworddb, database: jsonData.db, logging: false }); if (!Object.keys(schedule.scheduledJobs).includes('emailjob')) { schedule.scheduleJob('emailjob', '*/10 * * * * *', async () => { console.log('---------------------'); try { let [result, metadata] = await sequelize.query( `SELECT TOP(1) * FROM [dbo].[KIFID_Compensation_clone] WHERE EmailAddress <> '' AND Deceased = 0 AND DCA = 0 AND Id NOT IN (SELECT Id FROM [dbo].[KIFID_ApplicationStatus])` ); if (metadata === 0) { } else { let CompensationObject = result[0] as string; let comp = JSON.parse(JSON.stringify(CompensationObject)); console.log(comp.EmailAddress); let [resultEmail, metadata] = await sequelize.query( `SELECT TOP(1) * FROM [dbo].[KIFID_EmailsTemplate] WHERE Code = 1` ); let EmailTemplateObject = resultEmail[0] as string; let EmailTemplate = JSON.parse(JSON.stringify(EmailTemplateObject)); console.log( EmailTemplate.Subject, EmailTemplate.Greetings, EmailTemplate.ButtonText ); var emailStruture = EmailTemplate.ContentEmail; var newstr = emailStruture .replace('{title}', EmailTemplate.Subject) .replace('{senddate}', new Date().toLocaleDateString()) .replace('{surnamecustomer}', comp.Surname) .replace('{accountnumber}', comp.AccountNumber) .replace('{buttontext}', EmailTemplate.ButtonText) .replace('{greetings}', EmailTemplate.Greetings); emailStruture = newstr; let sendemail = await sendemail_helper( 'andre.rico@santander.nl', EmailTemplate.Subject, emailStruture ); console.log('Message sent: %s', sendemail); if (sendemail !== '' || sendemail === undefined) { throw Error('email not sent'); } await sequelize.query( `INSERT INTO [dbo].[KIFID_ApplicationStatus] ([Id],[ApplicationStatus],[DateTimeInserted]) VALUES (${comp.Id},2,CURRENT_TIMESTAMP)` ); console.log('looked up ' + metadata); } } catch (error) { console.log(error); } }); console.log('job successfully started'); res.send(); } else { console.log('job already running'); res.sendStatus(404); } } ); export { router as schedulerSendMailRouter };