This action occurs before a an email is sent. Changes made to the email's content and subject. The email can also be suppressed and not sent at all.
Action Type | Embedded |
---|---|
Full Action ID | embedded.commerce.email.render.before |
Runs multiple custom functions? | No |
Examples
Prefix Subject & Conditional Suppression
exports.handler = function(context, callback) { try { const subject = context.items.getSubject; const model = context.items.getModel; if (subject === 'order.changed' && !model?.items?.length) { context.items.exec('suppressEmail'); return callback(); } context.exec.setSubject('MyBrand ' + subject]); callback(); } catch { callback(); } };
Dynamic Template Swap & Model Enrichment
exports.handler = function(context, callback) { try { const subject = context.items.getSubject; const model = context.items.getModel; if (subject === 'order.changed' && model?.isCurbside) { context.exec.setTemplate('order.curbside.custom'); context.exec.setSubject('Your curbside order is confirmed'); } if (model?.items?.length) { model.highDuty = model.items.some(i => i.dutyAmount > 100); context.exec.setModel(model); } callback(); } catch { callback(); } };
Example injecting dynamic content using model
exports.handler = function (context, callback) { console.log('this is the test for changing the email content dynamically'); // scenario: add custom content to order changed email var model = context.items.getModel; var user = context.items.getUser; var firstName = user.firstName; console.log('user first name is ' + firstName); console.log('order number is ' + model.orderNumber); console.log('email subject is ' + context.items.getSubject); var subject = context.items.getSubject; if (subject == "order.changed") { model.customContent = "This is custom content added dynamically through arc for user " + firstName + " for order " + model.orderNumber; context.exec.setModel(model); var newContent = context.items.getModel; console.log('new content is ' + JSON.stringify(newContent, null, 2)); console.log('set new content successfully'); } callback(); };