Tonne of updates to influence, the configs, update the homepage, and generally just did more bug testing with Influence
This commit is contained in:
@@ -399,21 +399,17 @@ class CampaignsController {
|
||||
|
||||
// Send email if SMTP method
|
||||
if (emailMethod === 'smtp') {
|
||||
emailResult = await emailService.sendEmail({
|
||||
to: recipientEmail,
|
||||
from: {
|
||||
email: process.env.SMTP_FROM_EMAIL,
|
||||
name: process.env.SMTP_FROM_NAME
|
||||
},
|
||||
replyTo: userEmail,
|
||||
subject: subject,
|
||||
text: message,
|
||||
html: `
|
||||
<p>${message.replace(/\n/g, '<br>')}</p>
|
||||
<hr>
|
||||
<p><small>This message was sent via the BNKops Influence Campaign Tool by ${userName || 'A constituent'} (${userEmail}) from postal code ${postalCode} as part of the "${campaign['Campaign Title'] || campaign.title}" campaign.</small></p>
|
||||
`
|
||||
});
|
||||
emailResult = await emailService.sendCampaignEmail(
|
||||
recipientEmail,
|
||||
userEmail,
|
||||
userName || 'A constituent',
|
||||
postalCode,
|
||||
subject,
|
||||
message,
|
||||
campaign['Campaign Title'] || campaign.title,
|
||||
recipientName,
|
||||
recipientLevel
|
||||
);
|
||||
}
|
||||
|
||||
// Log the campaign email
|
||||
|
||||
@@ -6,22 +6,15 @@ class EmailsController {
|
||||
try {
|
||||
const { recipientEmail, senderName, senderEmail, subject, message, postalCode } = req.body;
|
||||
|
||||
// Send the email
|
||||
const emailResult = await emailService.sendEmail({
|
||||
to: recipientEmail,
|
||||
from: {
|
||||
email: process.env.SMTP_FROM_EMAIL,
|
||||
name: process.env.SMTP_FROM_NAME
|
||||
},
|
||||
replyTo: senderEmail,
|
||||
subject: subject,
|
||||
text: message,
|
||||
html: `
|
||||
<p>${message.replace(/\n/g, '<br>')}</p>
|
||||
<hr>
|
||||
<p><small>This message was sent via the Alberta Influence Campaign Tool by ${senderName} (${senderEmail}) from postal code ${postalCode}.</small></p>
|
||||
`
|
||||
});
|
||||
// Send the email using template system
|
||||
const emailResult = await emailService.sendRepresentativeEmail(
|
||||
recipientEmail,
|
||||
senderName,
|
||||
senderEmail,
|
||||
subject,
|
||||
message,
|
||||
postalCode
|
||||
);
|
||||
|
||||
// Log the email send event
|
||||
await nocoDB.logEmailSend({
|
||||
@@ -31,7 +24,8 @@ class EmailsController {
|
||||
subject,
|
||||
postalCode,
|
||||
status: emailResult.success ? 'sent' : 'failed',
|
||||
timestamp: new Date().toISOString()
|
||||
timestamp: new Date().toISOString(),
|
||||
senderIP: req.ip || req.connection.remoteAddress
|
||||
});
|
||||
|
||||
if (emailResult.success) {
|
||||
@@ -56,6 +50,147 @@ class EmailsController {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async previewEmail(req, res, next) {
|
||||
try {
|
||||
const { recipientEmail, subject, message, senderName, senderEmail, postalCode } = req.body;
|
||||
|
||||
const templateVariables = {
|
||||
MESSAGE: message,
|
||||
SENDER_NAME: senderName || 'Anonymous',
|
||||
SENDER_EMAIL: senderEmail || 'unknown@example.com',
|
||||
POSTAL_CODE: postalCode || 'Unknown'
|
||||
};
|
||||
|
||||
const emailOptions = {
|
||||
to: recipientEmail,
|
||||
from: {
|
||||
email: process.env.SMTP_FROM_EMAIL,
|
||||
name: process.env.SMTP_FROM_NAME
|
||||
},
|
||||
replyTo: senderEmail || process.env.SMTP_FROM_EMAIL,
|
||||
subject: subject
|
||||
};
|
||||
|
||||
const preview = await emailService.previewTemplatedEmail('representative-contact', templateVariables, emailOptions);
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
preview: preview,
|
||||
html: emailOptions.html
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Email preview error:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
error: 'Failed to generate email preview',
|
||||
message: error.message
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async sendTestEmail(req, res, next) {
|
||||
try {
|
||||
const { subject, message } = req.body;
|
||||
|
||||
const testRecipient = process.env.TEST_EMAIL_RECIPIENT || req.user?.email || 'admin@example.com';
|
||||
|
||||
const emailResult = await emailService.sendTestEmail(subject, message, testRecipient);
|
||||
|
||||
if (emailResult.success) {
|
||||
res.json({
|
||||
success: true,
|
||||
message: 'Test email sent successfully',
|
||||
messageId: emailResult.messageId,
|
||||
sentTo: testRecipient,
|
||||
testMode: emailResult.testMode
|
||||
});
|
||||
} else {
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
error: 'Failed to send test email',
|
||||
message: emailResult.error
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Send test email error:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
error: 'Failed to send test email',
|
||||
message: error.message
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async getEmailLogs(req, res, next) {
|
||||
try {
|
||||
const { status, senderEmail, postalCode } = req.query;
|
||||
|
||||
if (!process.env.NOCODB_TABLE_EMAILS) {
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
error: 'Email logging not configured'
|
||||
});
|
||||
}
|
||||
|
||||
const filters = {};
|
||||
if (status) filters.status = status;
|
||||
if (senderEmail) filters.senderEmail = senderEmail;
|
||||
if (postalCode) filters.postalCode = postalCode;
|
||||
|
||||
const logs = await nocoDB.getEmailLogs(filters);
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
logs: logs || []
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Get email logs error:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
error: 'Failed to retrieve email logs',
|
||||
message: error.message
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async testSMTPConnection(req, res, next) {
|
||||
try {
|
||||
const testResult = await emailService.testConnection();
|
||||
|
||||
res.json({
|
||||
success: testResult.success,
|
||||
message: testResult.message,
|
||||
error: testResult.error
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('SMTP test error:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
error: 'Failed to test SMTP connection',
|
||||
message: error.message
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async testSMTPConnection(req, res, next) {
|
||||
try {
|
||||
const result = await emailService.testConnection();
|
||||
|
||||
res.json({
|
||||
success: result.success,
|
||||
message: result.message,
|
||||
error: result.error
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('SMTP test error:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
error: 'Failed to test SMTP connection',
|
||||
message: error.message
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new EmailsController();
|
||||
Reference in New Issue
Block a user