Ich muss E-Mails von MeteorJS Anwendung senden und ich möchte sie mit Hilfe von HTML-Vorlagen, nicht von "html-in-js" Zeug.
Was ich versucht habe:
1) Verwenden Sie Template.emailTemplate(data)
, aber Template
ist nicht serverseitig definiert.
2) Speichern Sie meine E-Mail-Vorlagen als *.html
Dateien unter <app>/server/email/templates
Verzeichnis, erhalten Sie ihren Inhalt mit fs.readSync()
und dann kompilieren/rendern es mit Meteor eingebauten handlebars
Paket.
Dies funktioniert gut in der Entwicklungsumgebung, aber in der Produktion mit gebündelten App fehlschlägt, da *.html
Dateien unter server
Verzeichnis nicht gebündelt sind. Außerdem wird die Struktur der Verzeichnisse während des Bündelprozesses geändert und relative Pfade zu Vorlagen werden ungültig.
3) Ihre Vorschläge? =)MeteorJS: Generieren von E-Mails von Vorlagen Server-Seite
Antwort
Derzeit werden Vorlagen nicht serverseitig unterstützt. Diese Funktionalität kommt. In der Zwischenzeit habe ich ein Paket erstellt, das Sie als nützlich empfinden können, genannt "Lenker-Server", mit dem Sie Lenker auf dem Server verwenden können. Sie können das Paket mit Atmosphäre verwenden oder indem Sie das Projektverzeichnis in Ihren Paketordner kopieren. Hier ein Beispiel:
Beispiel:
my-email.handlebars
Hello, {{name}}
server.js
Email.send({
html: Handlebars.templates['my-email']({ name: 'Chris' })
});
Hinweis
Keine Vorlagen in der Datei Lenker. Setzen Sie einfach Ihre HTML- und Handlebars-Ausdrücke. Die Datei wird in eine Funktion kompiliert und einer Eigenschaft im Handlebars.templates-Objekt zugewiesen. Der Eigenschaftsname ist der Name der Datei minus der Lenkerverlängerung.
Github
Eine weitere Option ist jetzt das Server-Seite ‚private‘ Verzeichnis zu verwenden, um Ressourcen aus und nutzen sie lesen Ressourcen speichern Ihre Anwendung verwenden.
Erstellen Sie das Meteor-Projekt, und erstellen Sie dann ein/private Verzeichnis.
Platzieren Sie Ihre Vorlagen in dort (Sie sollten den Meteor-Lenker-Server-Paket verwenden, anstatt, wenn Sie Lenker benötigen)
lesen in Ihrer Vorlage mit:
Assets.getText(assetPath, [asyncCallback]);
Natürlich können Sie auch Pattern-Matching tun regex/replace gegen die Zeichenkette, sobald sie geladen ist.
Beispiel:
var template = Assets.getText(assetPath); // Synchronous
var username = 'John Doe';
template = template.replace('{{username}}', username);
Email.send({
html: template
});
Für weitere Informationen über die Funktionalität Vermögen. Meteor Assets
Meteor 0.8 *, hier ist eine andere Lösung.
Danke! Genau das habe ich gebraucht! – th0r
Ist das HTML-agnostisch? Das heißt, kann ich es auch für reine Textvorlagen verwenden? Vielen Dank! – hsribei