Hello,
We found ${matchedTenders.length} tender(s) matching your preferences:
| Tender | Value | Action |
|---|
Manage your preferences:
You can update your alert keywords and categories in your account settings.
import pg from 'pg'; import nodemailer from 'nodemailer'; import dotenv from 'dotenv'; dotenv.config(); const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL || 'postgresql://tenderpilot:tenderpilot123@localhost:5432/tenderpilot' }); // Email transporter const transporter = nodemailer.createTransport({ host: process.env.SMTP_HOST || 'smtp.gmail.com', port: parseInt(process.env.SMTP_PORT || '587'), secure: process.env.SMTP_PORT === '465', auth: { user: process.env.SMTP_USER || 'alerts@tenderradar.co.uk', pass: process.env.SMTP_PASS || 'placeholder' } }); // HTML email template function generateEmailTemplate(userEmail, matchedTenders) { const tenderRows = matchedTenders.map(tender => `
Your matched tenders for today
Hello,
We found ${matchedTenders.length} tender(s) matching your preferences:
| Tender | Value | Action |
|---|
Manage your preferences:
You can update your alert keywords and categories in your account settings.