I have written a process which sends bulk emails asynchronously.
Each time a handler is invoked, a service method 'processEmailQueue' is called which iterates over a number of available threads, each thread grabbing 10 records from the outstanding queue, building the content of the email for that user and sending it to the SMTP server.
I want to be able to generate the content of the email from a view, passing in the data from that user to be rendered. If this was a handler I would do something like
var emailContent = renderView( view="/email/emailtemplate", args=userData );
What would be the best way of doing this from within the service? Or should the process which creates the threads and generates the content take place in a handler, calling service methods?
Thanks
You should be able to ask WireBox for an instance of "renderer@coldbox" which is the core rendering helper. This is a transient, and you need a new instance of the renderer for each view (or at least don't re-use the same renderer instance in two threads at the same time).
You can then ask the renderer to render your view for you. In this example, we inject a provider which will return a new object every time you call get().
property name="renderer" inject="provider:coldbox:renderer";
var html = renderer.get().renderExternalView( view="/models/email_templates/password_reset" );
Thanks!
~Brad
ColdBox/CommandBox Developer Advocate
Ortus Solutions, Corp
You should be able to ask WireBox for an instance of "renderer@coldbox" which is the core rendering helper. This is a transient, and you need a new instance of the renderer for each view (or at least don't re-use the same renderer instance in two threads at the same time).
You can then ask the renderer to render your view for you. In this example, we inject a provider which will return a new object every time you call get().
property name="renderer" inject="provider:coldbox: renderer";
var html = renderer.get(). renderExternalView( view="/models/email_templates/ password_reset" );
Thanks!
~Brad
ColdBox/CommandBox Developer Advocate
Ortus Solutions, Corp
https://groups.google.com/forum/#!topic/coldbox/-pXQQdO8P-k
n your model, you add this:
property name="renderer" inject="provider:coldbox:renderer";
and then call the view from your service method:
mail.setBody(renderer.get().renderLayout(
view = "email/emailtemplate",
args = userData
));
n your model, you add this:
and then call the view from your service method:
property name="renderer" inject="provider:coldbox: renderer";
and then call the view from your service method:
mail.setBody(renderer.get().renderLayout(
view = "email/emailtemplate",
args = userData
));
Comments
Post a Comment