Erweiterte E-Mail-Vorlagen
Vogel
25.03.2016
1 min read

Wichtige Erkenntnisse
SparkPost Vorlagen unterstützen einfache und fortgeschrittene E-Mail-Kompositionen, einschließlich HTML, Text, bedingte Logik, Schleifen und empfängerbezogene dynamische Daten durch Ersetzungsvariablen.
Arrays können in Ersetzungsdaten übergeben werden, sodass Sie durch Elemente schleifen können (z. B. Listen von Dateien, aktuelle Aktivitäten, benutzerdefinierte Tabelleneinträge), um personalisierte Abschnitte für jeden Empfänger zu generieren.
Dreifache geschweifte Klammern
{{{ }}}ermöglichen es Ihnen, rohes, unescaped HTML einzufügen, was unerlässlich ist, wenn Ihre Ersetzungsdaten bereits Markup enthalten.Anhänge können leicht gesendet werden, wenn Sie den Übertragungspunkt verwenden (
content.attachments), der MIME-Grenzen und Kodierung für Sie abstrahiert.Inline-Bilder funktionieren ähnlich wie Anhänge, werden jedoch im Hauptteil mit
cid:-Referenzen gerendert.Vorlagen selbst unterstützen Anhänge nicht nativ, aber Sie können sie trotzdem einfügen, indem Sie ein vollständiges RFC 5322 E-Mail mit MIME-Teilen erstellen und dieses als
email_rfc822Vorlage speichern.Beim Erstellen von rohen RFC 5322 Vorlagen funktionieren Ersetzungen immer noch — jedoch nur in den Kopfzeilen und den ersten HTML- und Text-MIME-Teilen.
Die Verwendung des Mail-Clients Ihrer Programmiersprache (z. B. JavaMail) bietet einen weiteren Weg: vollständige MIME-E-Mails programmgesteuert generieren und über die SparkPost Transmissions-API senden.
Für die Wartbarkeit sollten Markup und Daten wann immer möglich getrennt gehalten werden—insbesondere beim Erstellen von Vorlagen, die Schleifen oder mehrere MIME-Abschnitte enthalten.
Erweiterte Vorlagenfunktionen (Bedingungen, Ausdrücke, Array-Iterationen) ermöglichen es Entwicklern, komplexe, personalisierte E-Mails zu erstellen, ohne ganze Vorlagen pro Anwendungsfall neu zu schreiben.
Q&A Highlights
Können SparkPost-Vorlagen Schleifen und Arrays verarbeiten?
Ja. Vorlagen können mit
for each-Konstrukten über Arrays iterieren. Dies ermöglicht dynamische Tabellen, Listen oder wiederholende HTML-Blöcke für jeden Empfänger.Wofür werden dreifache geschweifte Klammern verwendet?
{{{ variable }}}fügt rohes HTML ohne Escaping ein. Es ist erforderlich, wenn Ihre Ersatzdaten bereits HTML-Markup enthalten.Kann ich Anhänge mit templates senden?
Nicht direkt über Vorlagenfelder — aber Sie können, indem Sie eine
email_rfc822-Vorlage speichern, die MIME-Anhangsteile enthält.Funktioniert die Substitution weiterhin in RFC 5322-Vorlagen?
Ja, aber nur innerhalb der Kopfzeilen und der ersten HTML + Text-MIME-Teile.
Wann sollte I den transmission endpoint anstelle von templates verwenden?
Wenn Sie dynamische Anhänge, Inline-Bilder senden oder wenn Sie SparkPost benötigen, um das MIME-Handling automatisch zu abstrahieren.
Ist es besser, die Ansicht-Logik einzubetten oder getrennt zu halten?
Die beste Vorgehensweise besteht darin, Ihre View-Auszeichnung und Daten getrennt zu halten. Verwenden Sie Vorlagen für die Präsentation und übergeben Sie saubere, strukturierte Ersetzungsdaten.
Kann I ein vollständiges MIME-Email mit einer Programmbibliothek generieren?
Ja. Bibliotheken wie JavaMail ermöglichen es Ihnen, RFC 5322-Nachrichten programmatisch zu erstellen und über SparkPost's Transmission API zu senden.
Werden erweiterte Vorlagenfunktionen weit verbreitet genutzt?
Überraschend wenige Entwickler verwenden sie, aber sie ermöglichen leistungsstarke Personalisierung: Schleifen, conditionals, inline logic, und benutzerdefinierte MIME-Strukturen.
Warum sollte ich jemals RFC 5322-Vorlagen benötigen?
Nur beim Senden komplexer mehrteiliger E-Mails (Anhänge, benutzerdefinierte MIME-Typen), die von der Standardvorlagenabstraktion von SparkPost nicht unterstützt werden.
Dieser Beitrag richtet sich an den Entwickler, der das Beste aus den E-Mail-Vorlagenfunktionen von SparkPost herausholen möchte. Es wird davon ausgegangen, dass Sie mit dem Lesen von JSON-Inhalten und dem Befolgen einfacher Programmierabläufe vertraut sind. Begriffe, die Ihnen möglicherweise neu sind, wie RFC 5322, sind mit der entsprechenden Quelle verlinkt.
Nachdem das gesagt ist, legen wir direkt los.
Die Vorlagen- und Übertragungsfunktionen von SparkPost machen das Versenden von E-Mails einfach. Diese Funktionen bieten eine Abstraktion für Text und HTML-Inhalte, was bedeutet, dass es in den meisten Fällen nicht erforderlich ist, das rohe E-Mail-Format, das in RFC 5322 (ehemals bekannt als RFC 822) definiert ist, direkt zu kodieren. Aber manchmal möchten Sie möglicherweise komplexere Nachrichten erstellen, die andere Teile der Multipurpose Internet Mail Extensions (MIME) enthalten, die über die RESTful-Schnittstelle von SparkPost nicht direkt verfügbar sind.
Dieser Beitrag richtet sich an den Entwickler, der das Beste aus den E-Mail-Vorlagenfunktionen von SparkPost herausholen möchte. Es wird davon ausgegangen, dass Sie mit dem Lesen von JSON-Inhalten und dem Befolgen einfacher Programmierabläufe vertraut sind. Begriffe, die Ihnen möglicherweise neu sind, wie RFC 5322, sind mit der entsprechenden Quelle verlinkt.
Nachdem das gesagt ist, legen wir direkt los.
Die Vorlagen- und Übertragungsfunktionen von SparkPost machen das Versenden von E-Mails einfach. Diese Funktionen bieten eine Abstraktion für Text und HTML-Inhalte, was bedeutet, dass es in den meisten Fällen nicht erforderlich ist, das rohe E-Mail-Format, das in RFC 5322 (ehemals bekannt als RFC 822) definiert ist, direkt zu kodieren. Aber manchmal möchten Sie möglicherweise komplexere Nachrichten erstellen, die andere Teile der Multipurpose Internet Mail Extensions (MIME) enthalten, die über die RESTful-Schnittstelle von SparkPost nicht direkt verfügbar sind.
Dieser Beitrag richtet sich an den Entwickler, der das Beste aus den E-Mail-Vorlagenfunktionen von SparkPost herausholen möchte. Es wird davon ausgegangen, dass Sie mit dem Lesen von JSON-Inhalten und dem Befolgen einfacher Programmierabläufe vertraut sind. Begriffe, die Ihnen möglicherweise neu sind, wie RFC 5322, sind mit der entsprechenden Quelle verlinkt.
Nachdem das gesagt ist, legen wir direkt los.
Die Vorlagen- und Übertragungsfunktionen von SparkPost machen das Versenden von E-Mails einfach. Diese Funktionen bieten eine Abstraktion für Text und HTML-Inhalte, was bedeutet, dass es in den meisten Fällen nicht erforderlich ist, das rohe E-Mail-Format, das in RFC 5322 (ehemals bekannt als RFC 822) definiert ist, direkt zu kodieren. Aber manchmal möchten Sie möglicherweise komplexere Nachrichten erstellen, die andere Teile der Multipurpose Internet Mail Extensions (MIME) enthalten, die über die RESTful-Schnittstelle von SparkPost nicht direkt verfügbar sind.
Versenden der Template
The good news is that creating the RFC 5322 content was the hard part. From here on out, sending that template with SparkPost is exactly the same as sending any other template.
So senden wir diese Vorlage und füllen die Ersetzungsdaten aus:
{ "campaign_id": "MyCampaign", "return_path": "myReturnPath@yourdomain.com", "substitution_data": { "replyto": "myReplyToh@yourdomain.com", "from": "MyFrom@yourdomain.com", "subject": "my subject", "body1": "Extra content for the HTML part", "body2": "Extra content for the text part" }, "recipients": [ { "substitution_data": {}, "address": { "email": "test1@domain.com", "name": "test1" } } ], "content": { "template_id": "xxxxxxx", "use_draft_template": true } }
The good news is that creating the RFC 5322 content was the hard part. From here on out, sending that template with SparkPost is exactly the same as sending any other template.
So senden wir diese Vorlage und füllen die Ersetzungsdaten aus:
{ "campaign_id": "MyCampaign", "return_path": "myReturnPath@yourdomain.com", "substitution_data": { "replyto": "myReplyToh@yourdomain.com", "from": "MyFrom@yourdomain.com", "subject": "my subject", "body1": "Extra content for the HTML part", "body2": "Extra content for the text part" }, "recipients": [ { "substitution_data": {}, "address": { "email": "test1@domain.com", "name": "test1" } } ], "content": { "template_id": "xxxxxxx", "use_draft_template": true } }
The good news is that creating the RFC 5322 content was the hard part. From here on out, sending that template with SparkPost is exactly the same as sending any other template.
So senden wir diese Vorlage und füllen die Ersetzungsdaten aus:
{ "campaign_id": "MyCampaign", "return_path": "myReturnPath@yourdomain.com", "substitution_data": { "replyto": "myReplyToh@yourdomain.com", "from": "MyFrom@yourdomain.com", "subject": "my subject", "body1": "Extra content for the HTML part", "body2": "Extra content for the text part" }, "recipients": [ { "substitution_data": {}, "address": { "email": "test1@domain.com", "name": "test1" } } ], "content": { "template_id": "xxxxxxx", "use_draft_template": true } }
Vereinfachte Email Composition
Zuerst betrachten wir ein Szenario an einem sonnigen Tag für das Versenden einer E-Mail. Verwenden Sie den transmission Endpunkt, um den text und HTML Inhalt bereitzustellen. Hinter den Kulissen sorgt SparkPost dafür, dass eine gültige RFC 5322 E-Mail erstellt wird. SparkPost wird Ersetzungsvariablen aus substitution_data in den Text- und HTML-Inhalt einfügen. Dies ist eine leistungsstarke Methode, um für jeden Empfänger in einer gemeinsamen Vorlage benutzerdefinierte Inhalte zu generieren.
Hier ist ein Beispiel von transmission mit HTML- und Textinhalten mit substitution_data.
{ "options": { "open_tracking": true, "click_tracking": true }, "campaign_id": "christmas_campaign", "return_path": "bounces-christmas-campaign@domain.com", "metadata": { "user_type": "students" }, "substitution_data": { "sender": "Big Store Team" }, "recipients": [ { "return_path": "123@bounces.domain.com", "address": { "email": "wilma@domain.com", "name": "Wilma Flintstone" }, "tags": [ "greeting", "prehistoric", "fred", "flintstone" ], "metadata": { "place": "Bedrock" }, "substitution_data": { "customer_type": "Platinum" } } ], "content": { "from": { "name": "Fred Flintstone", "email": "fred@domain.com" }, "subject": "Big Christmas savings!", "reply_to": "Christmas Sales <sales@domain.com>", "headers": { "X-Customer-Campaign-ID": "christmas_campaign" }, "text": "Hi {{address.name}} \nSave big this Christmas in your area {{place}}! \nClick http://www.mysite.com and get huge discount\n Hurry, this offer is only to {{user_type}}\n {{sender}}", "html": "<p>Hi {{address.name}} <br>Save big this Christmas in your area {{place}}! <br>Click <a href=\"http://www.mysite.com\">here</a> and get huge discount</p><p>Hurry, this offer is only to {{user_type}}</p><p>{{sender}}</p>" } }
Zuerst betrachten wir ein Szenario an einem sonnigen Tag für das Versenden einer E-Mail. Verwenden Sie den transmission Endpunkt, um den text und HTML Inhalt bereitzustellen. Hinter den Kulissen sorgt SparkPost dafür, dass eine gültige RFC 5322 E-Mail erstellt wird. SparkPost wird Ersetzungsvariablen aus substitution_data in den Text- und HTML-Inhalt einfügen. Dies ist eine leistungsstarke Methode, um für jeden Empfänger in einer gemeinsamen Vorlage benutzerdefinierte Inhalte zu generieren.
Hier ist ein Beispiel von transmission mit HTML- und Textinhalten mit substitution_data.
{ "options": { "open_tracking": true, "click_tracking": true }, "campaign_id": "christmas_campaign", "return_path": "bounces-christmas-campaign@domain.com", "metadata": { "user_type": "students" }, "substitution_data": { "sender": "Big Store Team" }, "recipients": [ { "return_path": "123@bounces.domain.com", "address": { "email": "wilma@domain.com", "name": "Wilma Flintstone" }, "tags": [ "greeting", "prehistoric", "fred", "flintstone" ], "metadata": { "place": "Bedrock" }, "substitution_data": { "customer_type": "Platinum" } } ], "content": { "from": { "name": "Fred Flintstone", "email": "fred@domain.com" }, "subject": "Big Christmas savings!", "reply_to": "Christmas Sales <sales@domain.com>", "headers": { "X-Customer-Campaign-ID": "christmas_campaign" }, "text": "Hi {{address.name}} \nSave big this Christmas in your area {{place}}! \nClick http://www.mysite.com and get huge discount\n Hurry, this offer is only to {{user_type}}\n {{sender}}", "html": "<p>Hi {{address.name}} <br>Save big this Christmas in your area {{place}}! <br>Click <a href=\"http://www.mysite.com\">here</a> and get huge discount</p><p>Hurry, this offer is only to {{user_type}}</p><p>{{sender}}</p>" } }
Zuerst betrachten wir ein Szenario an einem sonnigen Tag für das Versenden einer E-Mail. Verwenden Sie den transmission Endpunkt, um den text und HTML Inhalt bereitzustellen. Hinter den Kulissen sorgt SparkPost dafür, dass eine gültige RFC 5322 E-Mail erstellt wird. SparkPost wird Ersetzungsvariablen aus substitution_data in den Text- und HTML-Inhalt einfügen. Dies ist eine leistungsstarke Methode, um für jeden Empfänger in einer gemeinsamen Vorlage benutzerdefinierte Inhalte zu generieren.
Hier ist ein Beispiel von transmission mit HTML- und Textinhalten mit substitution_data.
{ "options": { "open_tracking": true, "click_tracking": true }, "campaign_id": "christmas_campaign", "return_path": "bounces-christmas-campaign@domain.com", "metadata": { "user_type": "students" }, "substitution_data": { "sender": "Big Store Team" }, "recipients": [ { "return_path": "123@bounces.domain.com", "address": { "email": "wilma@domain.com", "name": "Wilma Flintstone" }, "tags": [ "greeting", "prehistoric", "fred", "flintstone" ], "metadata": { "place": "Bedrock" }, "substitution_data": { "customer_type": "Platinum" } } ], "content": { "from": { "name": "Fred Flintstone", "email": "fred@domain.com" }, "subject": "Big Christmas savings!", "reply_to": "Christmas Sales <sales@domain.com>", "headers": { "X-Customer-Campaign-ID": "christmas_campaign" }, "text": "Hi {{address.name}} \nSave big this Christmas in your area {{place}}! \nClick http://www.mysite.com and get huge discount\n Hurry, this offer is only to {{user_type}}\n {{sender}}", "html": "<p>Hi {{address.name}} <br>Save big this Christmas in your area {{place}}! <br>Click <a href=\"http://www.mysite.com\">here</a> and get huge discount</p><p>Hurry, this offer is only to {{user_type}}</p><p>{{sender}}</p>" } }
Ersetzen Sie Arrays von Daten
Viele Leute erkennen, dass die Übertragungs- und Template-Endpunkte von SparkPost einfache Inhalts Substitution in E-Mail-Headern und -Körpern durchführen können. Aber viele übersehen die Fähigkeit, bedingte Inhalte oder Datenarrays bereitzustellen, die ebenfalls ersetzt werden können. Sie können auch pro Empfänger einzigartige Inhalte bereitstellen. In diesem Beispiel senden wir jedem Empfänger ein Array mit einzigartigen Links.
Dies wird erreicht, indem ein JSON-Array von Daten bereitgestellt wird, das in den E-Mail-Körper eingefügt wird. Sobald die Daten bereitgestellt werden, verwendet SparkPost Logik im Template, um diese zu befüllen.
In diesem Beispiel sucht SparkPost nach Substitutionsdaten, die „files_html“ genannt werden, und führt eine „for each“ Schleife über jedes Element im Array. Es wird eine Zeile mit dem Wert „file“ im Element „files_html“ erstellt. Beachten Sie die dreifachen geschweiften Klammern um „loop_var.file“. Dies liegt daran, dass jedes Element des Arrays HTML enthält und wir dem Server mitteilen müssen, es zu verwenden, wie es ist, und es nicht umzuwandeln. Der Textteil wird ein einfaches Textetikett und die URL zur Datei sein.
<table> {{each files_html}} <tr> <td>{{{loop_var.file}}}</td> </tr> {{ end }} </table>
Hier ist das vollständig funktionierende Beispiel:
{ "recipients": [ { "address": { "email": "recipient1@domain.com" }, "substitution_data": { "files_html": [ { "file": "<a href=\"http://domain.com/file1a.txt\">File 1a Description</a>" }, { "file": "<a href=\"http://domain.com/file2a.txt\">File 2a Description</a>" } ], "files_plain": [ { "file": "File 1a -- http://domain.com/file1a.txt" }, { "file": "File 2a -- http://domain.com/file2a.txt" } ] } }, { "address": { "email": "recipient2@domain.com" }, "substitution_data": { "files_html": [ { "file": "<a href=\"http://domain.com/file1b.txt\">File 1b Description</a>" }, { "file": "<a href=\"http://domain.com/file2b.txt\">File 2b Description</a>" } ], "files_plain": [ { "file": "File 1b -- http://domain.com/file1b.txt" }, { "file": "File 2b -- http://domain.com/file2b.txt" } ] } } ], "return_path": "chris@test.domain.com", "content": { "from": { "name": "chris@test.domain.com", "email": "chris@test.domain.com" }, "subject": "Sending with SparkPost is Fun", "html": "<b>Your Files:</b><br>\n<table>\n {{each files_html}}\n <tr><td>{{{loop_var.file}}}</td></tr>\n {{ end }}\n</table>\n", "text": "Your Files:\n{{each files_plain}} {{loop_var.file}}\n{{ end }}\n" } }
Profi-Tipp: In Ihrem Code ist es ratsam, das Ansichts-Markup von den Daten zu trennen, aber das Ziel hier war es, das Beispiel so einfach und nachvollziehbar wie möglich zu halten, sodass wir zwei Arrays erstellt haben. Ein Array ist für den HTML-Teil und das andere für den Textteil. In der Produktion wäre es üblich, einen einzigen Datensatz zu haben und die Logik im Template-Code zu schreiben.
Viele Leute erkennen, dass die Übertragungs- und Template-Endpunkte von SparkPost einfache Inhalts Substitution in E-Mail-Headern und -Körpern durchführen können. Aber viele übersehen die Fähigkeit, bedingte Inhalte oder Datenarrays bereitzustellen, die ebenfalls ersetzt werden können. Sie können auch pro Empfänger einzigartige Inhalte bereitstellen. In diesem Beispiel senden wir jedem Empfänger ein Array mit einzigartigen Links.
Dies wird erreicht, indem ein JSON-Array von Daten bereitgestellt wird, das in den E-Mail-Körper eingefügt wird. Sobald die Daten bereitgestellt werden, verwendet SparkPost Logik im Template, um diese zu befüllen.
In diesem Beispiel sucht SparkPost nach Substitutionsdaten, die „files_html“ genannt werden, und führt eine „for each“ Schleife über jedes Element im Array. Es wird eine Zeile mit dem Wert „file“ im Element „files_html“ erstellt. Beachten Sie die dreifachen geschweiften Klammern um „loop_var.file“. Dies liegt daran, dass jedes Element des Arrays HTML enthält und wir dem Server mitteilen müssen, es zu verwenden, wie es ist, und es nicht umzuwandeln. Der Textteil wird ein einfaches Textetikett und die URL zur Datei sein.
<table> {{each files_html}} <tr> <td>{{{loop_var.file}}}</td> </tr> {{ end }} </table>
Hier ist das vollständig funktionierende Beispiel:
{ "recipients": [ { "address": { "email": "recipient1@domain.com" }, "substitution_data": { "files_html": [ { "file": "<a href=\"http://domain.com/file1a.txt\">File 1a Description</a>" }, { "file": "<a href=\"http://domain.com/file2a.txt\">File 2a Description</a>" } ], "files_plain": [ { "file": "File 1a -- http://domain.com/file1a.txt" }, { "file": "File 2a -- http://domain.com/file2a.txt" } ] } }, { "address": { "email": "recipient2@domain.com" }, "substitution_data": { "files_html": [ { "file": "<a href=\"http://domain.com/file1b.txt\">File 1b Description</a>" }, { "file": "<a href=\"http://domain.com/file2b.txt\">File 2b Description</a>" } ], "files_plain": [ { "file": "File 1b -- http://domain.com/file1b.txt" }, { "file": "File 2b -- http://domain.com/file2b.txt" } ] } } ], "return_path": "chris@test.domain.com", "content": { "from": { "name": "chris@test.domain.com", "email": "chris@test.domain.com" }, "subject": "Sending with SparkPost is Fun", "html": "<b>Your Files:</b><br>\n<table>\n {{each files_html}}\n <tr><td>{{{loop_var.file}}}</td></tr>\n {{ end }}\n</table>\n", "text": "Your Files:\n{{each files_plain}} {{loop_var.file}}\n{{ end }}\n" } }
Profi-Tipp: In Ihrem Code ist es ratsam, das Ansichts-Markup von den Daten zu trennen, aber das Ziel hier war es, das Beispiel so einfach und nachvollziehbar wie möglich zu halten, sodass wir zwei Arrays erstellt haben. Ein Array ist für den HTML-Teil und das andere für den Textteil. In der Produktion wäre es üblich, einen einzigen Datensatz zu haben und die Logik im Template-Code zu schreiben.
Viele Leute erkennen, dass die Übertragungs- und Template-Endpunkte von SparkPost einfache Inhalts Substitution in E-Mail-Headern und -Körpern durchführen können. Aber viele übersehen die Fähigkeit, bedingte Inhalte oder Datenarrays bereitzustellen, die ebenfalls ersetzt werden können. Sie können auch pro Empfänger einzigartige Inhalte bereitstellen. In diesem Beispiel senden wir jedem Empfänger ein Array mit einzigartigen Links.
Dies wird erreicht, indem ein JSON-Array von Daten bereitgestellt wird, das in den E-Mail-Körper eingefügt wird. Sobald die Daten bereitgestellt werden, verwendet SparkPost Logik im Template, um diese zu befüllen.
In diesem Beispiel sucht SparkPost nach Substitutionsdaten, die „files_html“ genannt werden, und führt eine „for each“ Schleife über jedes Element im Array. Es wird eine Zeile mit dem Wert „file“ im Element „files_html“ erstellt. Beachten Sie die dreifachen geschweiften Klammern um „loop_var.file“. Dies liegt daran, dass jedes Element des Arrays HTML enthält und wir dem Server mitteilen müssen, es zu verwenden, wie es ist, und es nicht umzuwandeln. Der Textteil wird ein einfaches Textetikett und die URL zur Datei sein.
<table> {{each files_html}} <tr> <td>{{{loop_var.file}}}</td> </tr> {{ end }} </table>
Hier ist das vollständig funktionierende Beispiel:
{ "recipients": [ { "address": { "email": "recipient1@domain.com" }, "substitution_data": { "files_html": [ { "file": "<a href=\"http://domain.com/file1a.txt\">File 1a Description</a>" }, { "file": "<a href=\"http://domain.com/file2a.txt\">File 2a Description</a>" } ], "files_plain": [ { "file": "File 1a -- http://domain.com/file1a.txt" }, { "file": "File 2a -- http://domain.com/file2a.txt" } ] } }, { "address": { "email": "recipient2@domain.com" }, "substitution_data": { "files_html": [ { "file": "<a href=\"http://domain.com/file1b.txt\">File 1b Description</a>" }, { "file": "<a href=\"http://domain.com/file2b.txt\">File 2b Description</a>" } ], "files_plain": [ { "file": "File 1b -- http://domain.com/file1b.txt" }, { "file": "File 2b -- http://domain.com/file2b.txt" } ] } } ], "return_path": "chris@test.domain.com", "content": { "from": { "name": "chris@test.domain.com", "email": "chris@test.domain.com" }, "subject": "Sending with SparkPost is Fun", "html": "<b>Your Files:</b><br>\n<table>\n {{each files_html}}\n <tr><td>{{{loop_var.file}}}</td></tr>\n {{ end }}\n</table>\n", "text": "Your Files:\n{{each files_plain}} {{loop_var.file}}\n{{ end }}\n" } }
Profi-Tipp: In Ihrem Code ist es ratsam, das Ansichts-Markup von den Daten zu trennen, aber das Ziel hier war es, das Beispiel so einfach und nachvollziehbar wie möglich zu halten, sodass wir zwei Arrays erstellt haben. Ein Array ist für den HTML-Teil und das andere für den Textteil. In der Produktion wäre es üblich, einen einzigen Datensatz zu haben und die Logik im Template-Code zu schreiben.
Anhänge in Transmission Capabilities
Der Übertragungspunkt bietet auch eine Abstraktion zum Versenden von Anhängen. Unten sehen Sie, dass Anhänge im content.attachments Array angegeben sind, wobei jedes Objekt im Array ein einzelnes Anhangselement beschreibt. Genau wie zuvor kümmert sich SparkPost um die Kodierung von Text, HTML, Substitutionen und das Iterieren durch das Anhangs-Array, um eine korrekt formatierte E-Mail-Nachricht zu kodieren.
Bewährte Praktiken besagen, dass das Versenden von Anhängen am besten vermieden wird, es sei denn, es ist ausdrücklich als Teil Ihres Dienstes erforderlich.
Unten sind die erforderlichen Felder für einen Anhang aufgeführt:
type: Der MIME-Typ des Anhangs
name: Der Dateiname des Anhangs
data: Base64-kodierte Datei-Daten
So sieht ein Anhang im Übertragungsinhaltsabschnitt aus:
"content": { "attachments": [ { "type": "audio/mp3", "name": "voicemail.mp3", "data": "TVAzIERhdGEK" } ] }
Sie können auch „Inline-Bilder“ in einer Übertragung senden. Diese sind den Anhängen sehr ähnlich und werden im content.inline_images Array angegeben, wobei jedes der inline_image Objekte dem oben gezeigten Anlageobjekt ähnelt.
Der Übertragungspunkt bietet auch eine Abstraktion zum Versenden von Anhängen. Unten sehen Sie, dass Anhänge im content.attachments Array angegeben sind, wobei jedes Objekt im Array ein einzelnes Anhangselement beschreibt. Genau wie zuvor kümmert sich SparkPost um die Kodierung von Text, HTML, Substitutionen und das Iterieren durch das Anhangs-Array, um eine korrekt formatierte E-Mail-Nachricht zu kodieren.
Bewährte Praktiken besagen, dass das Versenden von Anhängen am besten vermieden wird, es sei denn, es ist ausdrücklich als Teil Ihres Dienstes erforderlich.
Unten sind die erforderlichen Felder für einen Anhang aufgeführt:
type: Der MIME-Typ des Anhangs
name: Der Dateiname des Anhangs
data: Base64-kodierte Datei-Daten
So sieht ein Anhang im Übertragungsinhaltsabschnitt aus:
"content": { "attachments": [ { "type": "audio/mp3", "name": "voicemail.mp3", "data": "TVAzIERhdGEK" } ] }
Sie können auch „Inline-Bilder“ in einer Übertragung senden. Diese sind den Anhängen sehr ähnlich und werden im content.inline_images Array angegeben, wobei jedes der inline_image Objekte dem oben gezeigten Anlageobjekt ähnelt.
Der Übertragungspunkt bietet auch eine Abstraktion zum Versenden von Anhängen. Unten sehen Sie, dass Anhänge im content.attachments Array angegeben sind, wobei jedes Objekt im Array ein einzelnes Anhangselement beschreibt. Genau wie zuvor kümmert sich SparkPost um die Kodierung von Text, HTML, Substitutionen und das Iterieren durch das Anhangs-Array, um eine korrekt formatierte E-Mail-Nachricht zu kodieren.
Bewährte Praktiken besagen, dass das Versenden von Anhängen am besten vermieden wird, es sei denn, es ist ausdrücklich als Teil Ihres Dienstes erforderlich.
Unten sind die erforderlichen Felder für einen Anhang aufgeführt:
type: Der MIME-Typ des Anhangs
name: Der Dateiname des Anhangs
data: Base64-kodierte Datei-Daten
So sieht ein Anhang im Übertragungsinhaltsabschnitt aus:
"content": { "attachments": [ { "type": "audio/mp3", "name": "voicemail.mp3", "data": "TVAzIERhdGEK" } ] }
Sie können auch „Inline-Bilder“ in einer Übertragung senden. Diese sind den Anhängen sehr ähnlich und werden im content.inline_images Array angegeben, wobei jedes der inline_image Objekte dem oben gezeigten Anlageobjekt ähnelt.
Anhänge in Templates
Da wir jetzt den richtigen Hintergrund für das Senden von Anhängen mit dem Übertragungsendpunkt haben, werfen wir einen Blick darauf, wie dies mit Vorlagen gemacht wird. Zum Zeitpunkt dieses Schreibens gibt es keine Anhängeabstraktion wie bei Inline-Übertragungen. Man könnte schließen, dass Vorlagen nicht mit Anhängen erstellt werden können. Dies wäre teilweise korrekt, aber es gibt eine Lösung, obwohl Sie nicht mehr vom RFC 5322-Format isoliert sind.
Sie können Anhänge in Vorlagen erreichen, indem Sie den RFC 5322-Inhalt, der die Anhänge enthält, selbst codieren. Die gute Nachricht ist, dass Sie die Fähigkeit nicht verlieren, weiterhin Substitutionsdaten in Ihren E-Mail-Headern, HTML und Text-Teilen zu verwenden. Seien Sie sich bewusst, dass dieser Vorlagentyp die Ersetzungen auf die Header und den ersten HTML- und den ersten Text-Teil beschränkt.
Hier ist ein Beispiel, wie es gemacht wird.
Da wir jetzt den richtigen Hintergrund für das Senden von Anhängen mit dem Übertragungsendpunkt haben, werfen wir einen Blick darauf, wie dies mit Vorlagen gemacht wird. Zum Zeitpunkt dieses Schreibens gibt es keine Anhängeabstraktion wie bei Inline-Übertragungen. Man könnte schließen, dass Vorlagen nicht mit Anhängen erstellt werden können. Dies wäre teilweise korrekt, aber es gibt eine Lösung, obwohl Sie nicht mehr vom RFC 5322-Format isoliert sind.
Sie können Anhänge in Vorlagen erreichen, indem Sie den RFC 5322-Inhalt, der die Anhänge enthält, selbst codieren. Die gute Nachricht ist, dass Sie die Fähigkeit nicht verlieren, weiterhin Substitutionsdaten in Ihren E-Mail-Headern, HTML und Text-Teilen zu verwenden. Seien Sie sich bewusst, dass dieser Vorlagentyp die Ersetzungen auf die Header und den ersten HTML- und den ersten Text-Teil beschränkt.
Hier ist ein Beispiel, wie es gemacht wird.
Da wir jetzt den richtigen Hintergrund für das Senden von Anhängen mit dem Übertragungsendpunkt haben, werfen wir einen Blick darauf, wie dies mit Vorlagen gemacht wird. Zum Zeitpunkt dieses Schreibens gibt es keine Anhängeabstraktion wie bei Inline-Übertragungen. Man könnte schließen, dass Vorlagen nicht mit Anhängen erstellt werden können. Dies wäre teilweise korrekt, aber es gibt eine Lösung, obwohl Sie nicht mehr vom RFC 5322-Format isoliert sind.
Sie können Anhänge in Vorlagen erreichen, indem Sie den RFC 5322-Inhalt, der die Anhänge enthält, selbst codieren. Die gute Nachricht ist, dass Sie die Fähigkeit nicht verlieren, weiterhin Substitutionsdaten in Ihren E-Mail-Headern, HTML und Text-Teilen zu verwenden. Seien Sie sich bewusst, dass dieser Vorlagentyp die Ersetzungen auf die Header und den ersten HTML- und den ersten Text-Teil beschränkt.
Hier ist ein Beispiel, wie es gemacht wird.
RFC822 Email
Erstellen Sie Ihre RFC 5322-E-Mail mit den gewünschten Ersetzungsdaten. Ich habe diese in meinem Mail-Client erstellt und an mich selbst gesendet. Sobald ich sie erhalten habe, kopierte ich die Quelle und ersetzte die Felder, die ich dynamisch substituieren möchte.
MIME-Version: 1.0 Reply-To: {{replyto}} Subject: {{subject}} From: {{from}} To: {{address.email}} Content-Type: multipart/mixed; boundary="001a113c48b0b89d92052d3051da" --001a113c48b0b89d92052d3051da Content-Type: multipart/alternative; boundary="001a113c48b0b89d89052d3051d8" --001a113c48b0b89d89052d3051d8 Content-Type: text/plain; charset=UTF-8 Email with a *text attachment*. {{body2}} --001a113c48b0b89d89052d3051d8 Content-Type: text/html; charset=UTF-8 <div dir="ltr"> <div>Email with a <i>text attachment</i>.</div> {{body1}} <
Der letzte MIME-Teil in dieser Nachricht zeigt Content-Disposition: attachment; filename=myfile.txt. Dort wird der Name der Datei definiert. Der Inhalt Ihres Anhangs wird mit Sicherheit wesentlich komplexer sein, aber dieses Beispiel versucht, es einfach zu halten.
Erstellen Sie Ihre RFC 5322-E-Mail mit den gewünschten Ersetzungsdaten. Ich habe diese in meinem Mail-Client erstellt und an mich selbst gesendet. Sobald ich sie erhalten habe, kopierte ich die Quelle und ersetzte die Felder, die ich dynamisch substituieren möchte.
MIME-Version: 1.0 Reply-To: {{replyto}} Subject: {{subject}} From: {{from}} To: {{address.email}} Content-Type: multipart/mixed; boundary="001a113c48b0b89d92052d3051da" --001a113c48b0b89d92052d3051da Content-Type: multipart/alternative; boundary="001a113c48b0b89d89052d3051d8" --001a113c48b0b89d89052d3051d8 Content-Type: text/plain; charset=UTF-8 Email with a *text attachment*. {{body2}} --001a113c48b0b89d89052d3051d8 Content-Type: text/html; charset=UTF-8 <div dir="ltr"> <div>Email with a <i>text attachment</i>.</div> {{body1}} <
Der letzte MIME-Teil in dieser Nachricht zeigt Content-Disposition: attachment; filename=myfile.txt. Dort wird der Name der Datei definiert. Der Inhalt Ihres Anhangs wird mit Sicherheit wesentlich komplexer sein, aber dieses Beispiel versucht, es einfach zu halten.
Erstellen Sie Ihre RFC 5322-E-Mail mit den gewünschten Ersetzungsdaten. Ich habe diese in meinem Mail-Client erstellt und an mich selbst gesendet. Sobald ich sie erhalten habe, kopierte ich die Quelle und ersetzte die Felder, die ich dynamisch substituieren möchte.
MIME-Version: 1.0 Reply-To: {{replyto}} Subject: {{subject}} From: {{from}} To: {{address.email}} Content-Type: multipart/mixed; boundary="001a113c48b0b89d92052d3051da" --001a113c48b0b89d92052d3051da Content-Type: multipart/alternative; boundary="001a113c48b0b89d89052d3051d8" --001a113c48b0b89d89052d3051d8 Content-Type: text/plain; charset=UTF-8 Email with a *text attachment*. {{body2}} --001a113c48b0b89d89052d3051d8 Content-Type: text/html; charset=UTF-8 <div dir="ltr"> <div>Email with a <i>text attachment</i>.</div> {{body1}} <
Der letzte MIME-Teil in dieser Nachricht zeigt Content-Disposition: attachment; filename=myfile.txt. Dort wird der Name der Datei definiert. Der Inhalt Ihres Anhangs wird mit Sicherheit wesentlich komplexer sein, aber dieses Beispiel versucht, es einfach zu halten.
Stored Template
Sobald Sie eine gültige RFC 5322-E-Mail haben, speichern Sie sie unter Verwendung des email_rfc822-Formats des Template-Endpunkts anstatt Text und HTML-Felder zu verwenden. Hier ist ein Beispiel dafür, wie der content für diese Nachricht aussieht:
{ "content": { "email_rfc822": "MIME-Version: 1.0\nReply-To: {{replyto}}\nSubject: {{subject}}\nFrom: {{from}}\nTo: {{address.email}}\nContent-Type: multipart/mixed; boundary=001a113c48b0b89d92052d3051da\n\n--001a113c48b0b89d92052d3051da\nContent-Type: multipart/alternative; boundary=001a113c48b0b89d89052d3051d8\n\n--001a113c48b0b89d89052d3051d8\nContent-Type: text/plain; charset=UTF-8\n\nEmail with a *text attachment*.\n\n{{body2}}\n\n--001a113c48b0b89d89052d3051d8\nContent-Type: text/html; charset=UTF-8\n\n<div dir=\"ltr\"><div>Email with a <i>text attachment</i>.</div>\n\n{{body1}}\n</div>\n\n--001a113c48b0b89d89052d3051d8--\n--001a113c48b0b89d92052d3051da\nContent-Type: text/plain; charset=US-ASCII; name=\"myfile.txt\"\nContent-Disposition: attachment; filename=\"myfile.txt\"\nContent-Transfer-Encoding: base64\nX-Attachment-Id: f_ild455ce0\n\nVGhpcyBpcyBteSBzaW1wbGUgdGV4dCBmaWxlLgo=\n--001a113c48b0b89d92052d3051da--" }, "name": "_TMP_TEMPLATE_TEST" }
Wenn die Anfrage abgeschlossen ist, antwortet SparkPost mit einem eindeutigen Bezeichner für Ihr neues Template. Zum Beispiel xxxxxxx.
Sobald Sie eine gültige RFC 5322-E-Mail haben, speichern Sie sie unter Verwendung des email_rfc822-Formats des Template-Endpunkts anstatt Text und HTML-Felder zu verwenden. Hier ist ein Beispiel dafür, wie der content für diese Nachricht aussieht:
{ "content": { "email_rfc822": "MIME-Version: 1.0\nReply-To: {{replyto}}\nSubject: {{subject}}\nFrom: {{from}}\nTo: {{address.email}}\nContent-Type: multipart/mixed; boundary=001a113c48b0b89d92052d3051da\n\n--001a113c48b0b89d92052d3051da\nContent-Type: multipart/alternative; boundary=001a113c48b0b89d89052d3051d8\n\n--001a113c48b0b89d89052d3051d8\nContent-Type: text/plain; charset=UTF-8\n\nEmail with a *text attachment*.\n\n{{body2}}\n\n--001a113c48b0b89d89052d3051d8\nContent-Type: text/html; charset=UTF-8\n\n<div dir=\"ltr\"><div>Email with a <i>text attachment</i>.</div>\n\n{{body1}}\n</div>\n\n--001a113c48b0b89d89052d3051d8--\n--001a113c48b0b89d92052d3051da\nContent-Type: text/plain; charset=US-ASCII; name=\"myfile.txt\"\nContent-Disposition: attachment; filename=\"myfile.txt\"\nContent-Transfer-Encoding: base64\nX-Attachment-Id: f_ild455ce0\n\nVGhpcyBpcyBteSBzaW1wbGUgdGV4dCBmaWxlLgo=\n--001a113c48b0b89d92052d3051da--" }, "name": "_TMP_TEMPLATE_TEST" }
Wenn die Anfrage abgeschlossen ist, antwortet SparkPost mit einem eindeutigen Bezeichner für Ihr neues Template. Zum Beispiel xxxxxxx.
Sobald Sie eine gültige RFC 5322-E-Mail haben, speichern Sie sie unter Verwendung des email_rfc822-Formats des Template-Endpunkts anstatt Text und HTML-Felder zu verwenden. Hier ist ein Beispiel dafür, wie der content für diese Nachricht aussieht:
{ "content": { "email_rfc822": "MIME-Version: 1.0\nReply-To: {{replyto}}\nSubject: {{subject}}\nFrom: {{from}}\nTo: {{address.email}}\nContent-Type: multipart/mixed; boundary=001a113c48b0b89d92052d3051da\n\n--001a113c48b0b89d92052d3051da\nContent-Type: multipart/alternative; boundary=001a113c48b0b89d89052d3051d8\n\n--001a113c48b0b89d89052d3051d8\nContent-Type: text/plain; charset=UTF-8\n\nEmail with a *text attachment*.\n\n{{body2}}\n\n--001a113c48b0b89d89052d3051d8\nContent-Type: text/html; charset=UTF-8\n\n<div dir=\"ltr\"><div>Email with a <i>text attachment</i>.</div>\n\n{{body1}}\n</div>\n\n--001a113c48b0b89d89052d3051d8--\n--001a113c48b0b89d92052d3051da\nContent-Type: text/plain; charset=US-ASCII; name=\"myfile.txt\"\nContent-Disposition: attachment; filename=\"myfile.txt\"\nContent-Transfer-Encoding: base64\nX-Attachment-Id: f_ild455ce0\n\nVGhpcyBpcyBteSBzaW1wbGUgdGV4dCBmaWxlLgo=\n--001a113c48b0b89d92052d3051da--" }, "name": "_TMP_TEMPLATE_TEST" }
Wenn die Anfrage abgeschlossen ist, antwortet SparkPost mit einem eindeutigen Bezeichner für Ihr neues Template. Zum Beispiel xxxxxxx.
Fazit
Jetzt, da Sie sehen, wie SparkPost verwendet werden kann, um E-Mails fast jeder Komplexität zu senden, möchten Sie vielleicht einen Blick auf „SparkPost Supports Sending Email on Apple Watch“ werfen oder sich die Ersatzsyntax ansehen, um zu sehen, wie sie mit „if then else“, „expressions in conditionals“ oder „array Iteration“ direkt in Ihrem Template oder Ihrem Übertragungsinhalt verwendet werden kann.
Jetzt, da Sie sehen, wie SparkPost verwendet werden kann, um E-Mails fast jeder Komplexität zu senden, möchten Sie vielleicht einen Blick auf „SparkPost Supports Sending Email on Apple Watch“ werfen oder sich die Ersatzsyntax ansehen, um zu sehen, wie sie mit „if then else“, „expressions in conditionals“ oder „array Iteration“ direkt in Ihrem Template oder Ihrem Übertragungsinhalt verwendet werden kann.
Jetzt, da Sie sehen, wie SparkPost verwendet werden kann, um E-Mails fast jeder Komplexität zu senden, möchten Sie vielleicht einen Blick auf „SparkPost Supports Sending Email on Apple Watch“ werfen oder sich die Ersatzsyntax ansehen, um zu sehen, wie sie mit „if then else“, „expressions in conditionals“ oder „array Iteration“ direkt in Ihrem Template oder Ihrem Übertragungsinhalt verwendet werden kann.



