node.js - react - MeteorJS: generación de correos electrónicos desde plantillas del lado del servidor
meteor react (3)
Necesito enviar correos electrónicos desde la aplicación MeteorJS y quiero generarlos usando plantillas html, no por "html-in-js" .
Lo que he intentado hacer:
1) Use Template.emailTemplate(data)
, pero Template
no está definido en el lado del servidor.
2) Guarde mis plantillas de correo electrónico como archivos *.html
en el directorio <app>/server/email/templates
, obtenga sus contenidos usando fs.readSync()
y luego fs.readSync()
usando el fs.readSync()
integrado de handlebars
meteor.
Esto funciona bien en el entorno de desarrollo, pero falla en la producción al utilizar la aplicación incluida debido a que los archivos *.html
directorio del server
no están agrupados. Además, la estructura de los directorios se cambia durante el proceso del paquete y las rutas relativas a las plantillas se vuelven inválidas.
3) ¿Tus propuestas? =)
Actualmente, las plantillas no son compatibles con el servidor. Esa funcionalidad está llegando. Mientras tanto, creé un paquete que podría ser de utilidad, llamado handlebars-server, que le permite usar Handlebars en el servidor. Puede usar el paquete con atmósfera o copiando el directorio del proyecto en su carpeta de paquetes. Aquí hay un ejemplo:
Ejemplo:
my-email.handlebars
Hello, {{name}}
server.js
Email.send({
html: Handlebars.templates[''my-email'']({ name: ''Chris'' })
});
Nota
No hay plantillas en el archivo de manubrios. Simplemente ponga sus expresiones html y Handlebars. El archivo se compilará en una función y se asignará a una propiedad en el objeto Handlebars.templates. El nombre de la propiedad será el nombre del archivo menos la extensión de manubrios.
Github
Meteor 0.8. *, Aquí hay otra solución.
Otra opción ahora es usar el directorio ''privado'' del lado del servidor para leer los recursos y usarlos para almacenar los recursos que su aplicación usará.
crea el proyecto de meteoritos y luego crea un directorio / privado.
Coloque sus plantillas allí (debe usar el paquete meteor-handlebars-server en su lugar si necesita manillar)
Lea en su plantilla con:
Assets.getText(assetPath, [asyncCallback]);
Obviamente, también puede hacer una coincidencia de patrón de expresión regular / reemplazar contra la cadena una vez que está cargada.
ejemplo:
var template = Assets.getText(assetPath); // Synchronous
var username = ''John Doe'';
template = template.replace(''{{username}}'', username);
Email.send({
html: template
});
Para obtener más información sobre la funcionalidad de activos: Meteor Assets