Modèles d'e-mail avancés
Oiseau
25 mars 2016
1 min read

Points Clés
Les modèles SparkPost prennent en charge la composition d'e-mails simples et avancés, y compris HTML, texte, logique conditionnelle, boucles et données dynamiques par destinataire via des variables de substitution.
Les tableaux peuvent être passés dans les données de substitution, vous permettant de parcourir les éléments (par exemple, listes de fichiers, activité récente, lignes de tables personnalisées) pour générer des sections personnalisées pour chaque destinataire.
Les triples crochets
{{{ }}}vous permettent d'insérer du HTML brut et non échappé, ce qui est essentiel lorsque vos données de substitution contiennent déjà du balisage.Les pièces jointes peuvent être envoyées facilement en utilisant le point de terminaison de transmission (
content.attachments), qui abstrait pour vous les limites et encodages MIME.Les images en ligne fonctionnent de manière similaire aux pièces jointes, mais se rendent dans le corps en utilisant des références
cid:.Les modèles eux-mêmes ne prennent pas en charge nativement les pièces jointes, mais vous pouvez toujours les inclure en créant un e-mail complet RFC 5322 avec des parties MIME et en stockant cela comme modèle
email_rfc822.Lors de la création de modèles RFC 5322 bruts, les substitutions fonctionnent toujours — mais uniquement dans les en-têtes et les premières parties MIME HTML et texte.
Utiliser le client de messagerie de votre langage de programmation (par exemple, JavaMail) offre une autre voie : générer des e-mails MIME complets par programmation et les envoyer via l'API des transmissions SparkPost.
Pour la maintenabilité, gardez le balisage et les données séparés autant que possible — surtout lors de la création de modèles qui incluent des boucles ou plusieurs sections MIME.
Les fonctionnalités avancées de modèle (conditionnels, expressions, itération de tableaux) permettent aux développeurs de créer des e-mails sophistiqués et personnalisés sans réécrire entièrement les modèles pour chaque cas d'utilisation.
Points forts des Q&A
Les modèles SparkPost peuvent-ils gérer les boucles et les tableaux ?
Oui. Les modèles peuvent parcourir des tableaux en utilisant des constructions
for each. Cela permet de créer des tableaux dynamiques, des listes ou des blocs HTML répétés pour chaque destinataire.À quoi servent les triple accolades ?
{{{ variable }}}insère du HTML brut sans échappement. C'est nécessaire lorsque vos données de substitution incluent déjà du balisage HTML.Puis-je envoyer des pièces jointes avec des templates ?
Pas directement à travers les champs de modèle — mais vous pouvez en stockant un modèle
email_rfc822qui inclut des parties de pièces jointes MIME.La substitution fonctionne-t-elle toujours dans les modèles RFC 5322 ?
Oui, mais seulement dans les en-têtes et les premières parties MIME HTML + texte.
Quand devrais-je utiliser le point de terminaison de transmission au lieu des modèles ?
Lorsque vous envoyez des pièces jointes dynamiques, des images intégrées, ou lorsque vous avez besoin que SparkPost gère automatiquement le traitement MIME.
Est-il préférable d'incorporer la logique d'affichage ou de la garder séparée ?
La meilleure pratique consiste à séparer le balisage de votre vue et les données. Utilisez des modèles pour la présentation et passez des données de substitution propres et structurées.
Puis-je générer un email complet en format MIME en utilisant une bibliothèque de programmation ?
Oui. Les bibliothèques comme JavaMail vous permettent de construire des messages RFC 5322 de manière programmatique et de les envoyer via l'API de transmission de SparkPost.
Les fonctionnalités avancées de template sont-elles largement utilisées ?
Étonnamment peu de développeurs les utilisent, mais ils débloquent une personnalisation puissante : boucles, conditionnelles, logique en ligne et structures MIME personnalisées.
Pourquoi aurais-je jamais besoin des modèles RFC 5322?
Uniquement lors de l'envoi d'e-mails complexes multi-parties (pièces jointes, types MIME personnalisés) que l'abstraction de modèle standard de SparkPost ne prend pas en charge.
Ce post est destiné au développeur qui souhaite tirer le meilleur parti des capacités de modèles d'email de SparkPost. Il est supposé que vous êtes à l'aise avec la lecture du contenu JSON et que vous suivez le flux de programmation de base. Les termes qui peuvent être nouveaux pour vous sont introduits comme RFC 5322, le texte est lié à sa référence source.
Écartons cela, plongeons directement dedans.
Les capacités de modèle et de transmission de SparkPost rendent l'envoi d'emails simple. Ces capacités fournissent une abstraction pour le contenu texte et HTML, ce qui signifie que la plupart du temps, il n'est pas nécessaire de coder directement la format brut de l'email qui est défini dans RFC 5322, anciennement connu sous le nom (RFC 822). Mais parfois, vous pouvez vouloir créer des messages plus complexes contenant d'autres Extensions de Mail Internet Multipurpose (MIME) qui ne sont pas directement exposées via l'interface RESTful de SparkPost.
Ce post est destiné au développeur qui souhaite tirer le meilleur parti des capacités de modèles d'email de SparkPost. Il est supposé que vous êtes à l'aise avec la lecture du contenu JSON et que vous suivez le flux de programmation de base. Les termes qui peuvent être nouveaux pour vous sont introduits comme RFC 5322, le texte est lié à sa référence source.
Écartons cela, plongeons directement dedans.
Les capacités de modèle et de transmission de SparkPost rendent l'envoi d'emails simple. Ces capacités fournissent une abstraction pour le contenu texte et HTML, ce qui signifie que la plupart du temps, il n'est pas nécessaire de coder directement la format brut de l'email qui est défini dans RFC 5322, anciennement connu sous le nom (RFC 822). Mais parfois, vous pouvez vouloir créer des messages plus complexes contenant d'autres Extensions de Mail Internet Multipurpose (MIME) qui ne sont pas directement exposées via l'interface RESTful de SparkPost.
Ce post est destiné au développeur qui souhaite tirer le meilleur parti des capacités de modèles d'email de SparkPost. Il est supposé que vous êtes à l'aise avec la lecture du contenu JSON et que vous suivez le flux de programmation de base. Les termes qui peuvent être nouveaux pour vous sont introduits comme RFC 5322, le texte est lié à sa référence source.
Écartons cela, plongeons directement dedans.
Les capacités de modèle et de transmission de SparkPost rendent l'envoi d'emails simple. Ces capacités fournissent une abstraction pour le contenu texte et HTML, ce qui signifie que la plupart du temps, il n'est pas nécessaire de coder directement la format brut de l'email qui est défini dans RFC 5322, anciennement connu sous le nom (RFC 822). Mais parfois, vous pouvez vouloir créer des messages plus complexes contenant d'autres Extensions de Mail Internet Multipurpose (MIME) qui ne sont pas directement exposées via l'interface RESTful de SparkPost.
Envoi du Template
La bonne nouvelle est que créer le contenu RFC 5322 était la partie difficile. À partir de maintenant, envoyer ce modèle avec SparkPost est exactement la même chose que d'envoyer n'importe quel autre modèle.
Voici comment nous envoyons ce modèle et remplissons les données de substitution :
{ "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 } }
La bonne nouvelle est que créer le contenu RFC 5322 était la partie difficile. À partir de maintenant, envoyer ce modèle avec SparkPost est exactement la même chose que d'envoyer n'importe quel autre modèle.
Voici comment nous envoyons ce modèle et remplissons les données de substitution :
{ "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 } }
La bonne nouvelle est que créer le contenu RFC 5322 était la partie difficile. À partir de maintenant, envoyer ce modèle avec SparkPost est exactement la même chose que d'envoyer n'importe quel autre modèle.
Voici comment nous envoyons ce modèle et remplissons les données de substitution :
{ "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 } }
Composition d'Email Simplifiée
Tout d'abord, examinons un scénario par une journée ensoleillée pour envoyer un courriel. Utilisez le point de terminaison transmission pour fournir le texte et le contenu HTML. En arrière-plan, SparkPost s'occupe de composer un courriel valide RFC 5322. SparkPost insérera des variables de substitution de substitution_data dans le texte et le contenu HTML. C'est une façon puissante de générer du contenu personnalisé pour chaque destinataire dans un modèle commun.
Voici un exemple de transmission avec contenu HTML et texte avec 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>" } }
Vue d'ensemble des capacités de substitution
Capacité | Description |
|---|---|
Substitution de variable de base | Insère des valeurs dynamiques uniques dans le texte ou le contenu HTML |
Logique conditionnelle | Affiche un contenu différent basé sur l'évaluation de booléen ou d'expressions |
Itération de tableau | Boucle à travers des tableaux (par ex., des listes de fichiers) pour générer du contenu répété |
Insertion de HTML brut ({{{ }}}) | Permet le HTML non échappé pour des situations où le balisage provient de la source de données |
Personnalisation par destinataire | Permet un contenu entièrement unique pour chaque destinataire |
Tout d'abord, examinons un scénario par une journée ensoleillée pour envoyer un courriel. Utilisez le point de terminaison transmission pour fournir le texte et le contenu HTML. En arrière-plan, SparkPost s'occupe de composer un courriel valide RFC 5322. SparkPost insérera des variables de substitution de substitution_data dans le texte et le contenu HTML. C'est une façon puissante de générer du contenu personnalisé pour chaque destinataire dans un modèle commun.
Voici un exemple de transmission avec contenu HTML et texte avec 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>" } }
Vue d'ensemble des capacités de substitution
Capacité | Description |
|---|---|
Substitution de variable de base | Insère des valeurs dynamiques uniques dans le texte ou le contenu HTML |
Logique conditionnelle | Affiche un contenu différent basé sur l'évaluation de booléen ou d'expressions |
Itération de tableau | Boucle à travers des tableaux (par ex., des listes de fichiers) pour générer du contenu répété |
Insertion de HTML brut ({{{ }}}) | Permet le HTML non échappé pour des situations où le balisage provient de la source de données |
Personnalisation par destinataire | Permet un contenu entièrement unique pour chaque destinataire |
Tout d'abord, examinons un scénario par une journée ensoleillée pour envoyer un courriel. Utilisez le point de terminaison transmission pour fournir le texte et le contenu HTML. En arrière-plan, SparkPost s'occupe de composer un courriel valide RFC 5322. SparkPost insérera des variables de substitution de substitution_data dans le texte et le contenu HTML. C'est une façon puissante de générer du contenu personnalisé pour chaque destinataire dans un modèle commun.
Voici un exemple de transmission avec contenu HTML et texte avec 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>" } }
Vue d'ensemble des capacités de substitution
Capacité | Description |
|---|---|
Substitution de variable de base | Insère des valeurs dynamiques uniques dans le texte ou le contenu HTML |
Logique conditionnelle | Affiche un contenu différent basé sur l'évaluation de booléen ou d'expressions |
Itération de tableau | Boucle à travers des tableaux (par ex., des listes de fichiers) pour générer du contenu répété |
Insertion de HTML brut ({{{ }}}) | Permet le HTML non échappé pour des situations où le balisage provient de la source de données |
Personnalisation par destinataire | Permet un contenu entièrement unique pour chaque destinataire |
Substituer des tableaux de données
Beaucoup de gens réalisent que les points de terminaison de transmission et de modèle de SparkPost peuvent faire une simple substitution de contenu dans les en-têtes d'email et les corps d'email. Mais beaucoup ignorent la capacité de fournir du contenu conditionnel ou des tableaux de données qui peuvent également être substitués. Vous pouvez aussi fournir un contenu unique par destinataire. Dans cet exemple, nous envoyons un tableau de liens uniques à chaque destinataire.
Cela est accompli en fournissant un tableau JSON de données qui sera intégré dans le corps de l'email. Une fois que les données sont fournies, SparkPost utilisera une logique dans le modèle pour les intégrer.
Dans cet exemple, SparkPost recherchera des données de substitution appelées “files_html” et effectuera une boucle “for each” sur chaque élément du tableau. Il créera une ligne avec la valeur de “file” dans l'élément “files_html”. Notez le triple accolade autour de “loop_var.file“. C'est parce que chaque élément du tableau contient du HTML et nous devons indiquer au serveur de l'utiliser tel quel et de ne pas l'échapper. La partie texte sera une simple étiquette texte et l'URL vers le fichier.
<table> {{each files_html}} <tr> <td>{{{loop_var.file}}}</td> </tr> {{ end }} </table>
Voici l'exemple complet fonctionnel:
{ "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" } }
Conseil de pro : Dans votre code, il est conseillé de garder le balisage de la vue séparé des données, mais le but ici était de garder l'exemple aussi simple et facile à suivre que possible, donc nous avons créé deux tableaux. Un tableau est pour la partie HTML et l'autre est pour la partie Texte. En utilisation production, il serait courant d'avoir un ensemble de données et d'écrire la logique dans le code du modèle.
Beaucoup de gens réalisent que les points de terminaison de transmission et de modèle de SparkPost peuvent faire une simple substitution de contenu dans les en-têtes d'email et les corps d'email. Mais beaucoup ignorent la capacité de fournir du contenu conditionnel ou des tableaux de données qui peuvent également être substitués. Vous pouvez aussi fournir un contenu unique par destinataire. Dans cet exemple, nous envoyons un tableau de liens uniques à chaque destinataire.
Cela est accompli en fournissant un tableau JSON de données qui sera intégré dans le corps de l'email. Une fois que les données sont fournies, SparkPost utilisera une logique dans le modèle pour les intégrer.
Dans cet exemple, SparkPost recherchera des données de substitution appelées “files_html” et effectuera une boucle “for each” sur chaque élément du tableau. Il créera une ligne avec la valeur de “file” dans l'élément “files_html”. Notez le triple accolade autour de “loop_var.file“. C'est parce que chaque élément du tableau contient du HTML et nous devons indiquer au serveur de l'utiliser tel quel et de ne pas l'échapper. La partie texte sera une simple étiquette texte et l'URL vers le fichier.
<table> {{each files_html}} <tr> <td>{{{loop_var.file}}}</td> </tr> {{ end }} </table>
Voici l'exemple complet fonctionnel:
{ "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" } }
Conseil de pro : Dans votre code, il est conseillé de garder le balisage de la vue séparé des données, mais le but ici était de garder l'exemple aussi simple et facile à suivre que possible, donc nous avons créé deux tableaux. Un tableau est pour la partie HTML et l'autre est pour la partie Texte. En utilisation production, il serait courant d'avoir un ensemble de données et d'écrire la logique dans le code du modèle.
Beaucoup de gens réalisent que les points de terminaison de transmission et de modèle de SparkPost peuvent faire une simple substitution de contenu dans les en-têtes d'email et les corps d'email. Mais beaucoup ignorent la capacité de fournir du contenu conditionnel ou des tableaux de données qui peuvent également être substitués. Vous pouvez aussi fournir un contenu unique par destinataire. Dans cet exemple, nous envoyons un tableau de liens uniques à chaque destinataire.
Cela est accompli en fournissant un tableau JSON de données qui sera intégré dans le corps de l'email. Une fois que les données sont fournies, SparkPost utilisera une logique dans le modèle pour les intégrer.
Dans cet exemple, SparkPost recherchera des données de substitution appelées “files_html” et effectuera une boucle “for each” sur chaque élément du tableau. Il créera une ligne avec la valeur de “file” dans l'élément “files_html”. Notez le triple accolade autour de “loop_var.file“. C'est parce que chaque élément du tableau contient du HTML et nous devons indiquer au serveur de l'utiliser tel quel et de ne pas l'échapper. La partie texte sera une simple étiquette texte et l'URL vers le fichier.
<table> {{each files_html}} <tr> <td>{{{loop_var.file}}}</td> </tr> {{ end }} </table>
Voici l'exemple complet fonctionnel:
{ "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" } }
Conseil de pro : Dans votre code, il est conseillé de garder le balisage de la vue séparé des données, mais le but ici était de garder l'exemple aussi simple et facile à suivre que possible, donc nous avons créé deux tableaux. Un tableau est pour la partie HTML et l'autre est pour la partie Texte. En utilisation production, il serait courant d'avoir un ensemble de données et d'écrire la logique dans le code du modèle.
Pièces jointes dans les capacités de Transmission
Le point de terminaison de transmission fournit également une abstraction pour l'envoi de pièces jointes. Ci-dessous, vous verrez que les pièces jointes sont spécifiées dans le tableau content.attachments où chaque objet du tableau décrit un élément de pièce jointe individuel. Comme auparavant, SparkPost se chargera du codage de text, HTML, substitutions et de l'itération à travers le tableau de pièces jointes pour encoder un message email correctement formé.
Les meilleures pratiques dictent qu'il est préférable d'éviter d'envoyer des pièces jointes, sauf si cela est explicitement requis dans le cadre de votre service.
Ci-dessous se trouvent les champs requis pour une pièce jointe :
type : Le type MIME de la pièce jointe
name : Le nom de fichier de la pièce jointe
data : Données de fichier encodées en Base64
Champs Requis pour les Pièces Jointes
Champ | Signification |
|---|---|
type | Type MIME de la pièce jointe |
name | Nom du fichier tel qu'il apparaîtra pour le destinataire |
data | Charge utile du fichier encodée en Base64 |
Voici à quoi ressemble une pièce jointe à l'intérieur de la section de contenu de transmission :
"content": { "attachments": [ { "type": "audio/mp3", "name": "voicemail.mp3", "data": "TVAzIERhdGEK" } ] }
Vous pouvez également envoyer des « images incorporées » dans une transmission. Celles-ci sont très similaires aux pièces jointes et sont spécifiées dans le tableau content.inline_images où chacun des objets inline_image est similaire à l'objet pièce jointe montré ci-dessus.
Le point de terminaison de transmission fournit également une abstraction pour l'envoi de pièces jointes. Ci-dessous, vous verrez que les pièces jointes sont spécifiées dans le tableau content.attachments où chaque objet du tableau décrit un élément de pièce jointe individuel. Comme auparavant, SparkPost se chargera du codage de text, HTML, substitutions et de l'itération à travers le tableau de pièces jointes pour encoder un message email correctement formé.
Les meilleures pratiques dictent qu'il est préférable d'éviter d'envoyer des pièces jointes, sauf si cela est explicitement requis dans le cadre de votre service.
Ci-dessous se trouvent les champs requis pour une pièce jointe :
type : Le type MIME de la pièce jointe
name : Le nom de fichier de la pièce jointe
data : Données de fichier encodées en Base64
Champs Requis pour les Pièces Jointes
Champ | Signification |
|---|---|
type | Type MIME de la pièce jointe |
name | Nom du fichier tel qu'il apparaîtra pour le destinataire |
data | Charge utile du fichier encodée en Base64 |
Voici à quoi ressemble une pièce jointe à l'intérieur de la section de contenu de transmission :
"content": { "attachments": [ { "type": "audio/mp3", "name": "voicemail.mp3", "data": "TVAzIERhdGEK" } ] }
Vous pouvez également envoyer des « images incorporées » dans une transmission. Celles-ci sont très similaires aux pièces jointes et sont spécifiées dans le tableau content.inline_images où chacun des objets inline_image est similaire à l'objet pièce jointe montré ci-dessus.
Le point de terminaison de transmission fournit également une abstraction pour l'envoi de pièces jointes. Ci-dessous, vous verrez que les pièces jointes sont spécifiées dans le tableau content.attachments où chaque objet du tableau décrit un élément de pièce jointe individuel. Comme auparavant, SparkPost se chargera du codage de text, HTML, substitutions et de l'itération à travers le tableau de pièces jointes pour encoder un message email correctement formé.
Les meilleures pratiques dictent qu'il est préférable d'éviter d'envoyer des pièces jointes, sauf si cela est explicitement requis dans le cadre de votre service.
Ci-dessous se trouvent les champs requis pour une pièce jointe :
type : Le type MIME de la pièce jointe
name : Le nom de fichier de la pièce jointe
data : Données de fichier encodées en Base64
Champs Requis pour les Pièces Jointes
Champ | Signification |
|---|---|
type | Type MIME de la pièce jointe |
name | Nom du fichier tel qu'il apparaîtra pour le destinataire |
data | Charge utile du fichier encodée en Base64 |
Voici à quoi ressemble une pièce jointe à l'intérieur de la section de contenu de transmission :
"content": { "attachments": [ { "type": "audio/mp3", "name": "voicemail.mp3", "data": "TVAzIERhdGEK" } ] }
Vous pouvez également envoyer des « images incorporées » dans une transmission. Celles-ci sont très similaires aux pièces jointes et sont spécifiées dans le tableau content.inline_images où chacun des objets inline_image est similaire à l'objet pièce jointe montré ci-dessus.
Pièces jointes dans Templates
Maintenant que nous avons le contexte approprié pour envoyer des pièces jointes avec le point de terminaison de transmission, examinons comment procéder avec des modèles. Au moment de la rédaction de cet article, il n’existe pas d’abstraction des pièces jointes comme vous pouvez en trouver pour les transmissions en ligne. On pourrait en déduire que les modèles ne peuvent pas être créés avec des pièces jointes. Vous auriez partiellement raison, mais il existe une solution, bien que vous ne soyez plus isolé du format RFC 5322.
Vous pouvez effectuer des pièces jointes dans des modèles en codant vous-même le contenu RFC 5322, qui comprend les pièces jointes. La bonne nouvelle est que vous ne perdrez pas la possibilité d'utiliser toujours les Données de Substitution dans vos en-têtes d'email, parties HTML et texte. Sachez que ce type de modèle limite les substitutions aux en-têtes et à la première partie HTML et à la première partie texte.
Limites du Modèle RFC 5322
Limitation | Description |
|---|---|
Substitutions restreintes | Appliquées uniquement aux en-têtes, première partie HTML, et première partie texte |
Gestion MIME manuelle | Le développeur doit construire toutes les frontières MIME et les parties de pièces jointes |
Surcharge de maintenance plus élevée | Plus difficile à mettre à jour, auditer et versionner |
Pas convivial pour les abstractions | Contourne la commodité du système de modèles de SparkPost |
Voici un exemple de comment cela se fait.
Email RFC822
Créez votre email RFC 5322 avec les données de substitution souhaitées. J'ai créé celui-ci dans mon client de messagerie et me l'ai envoyé. Une fois que je l'ai reçu, j'ai copié la source et remplacé les champs que je veux substituer dynamiquement.
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}} <
La dernière partie MIME dans ce message vous verrez Content-Disposition: attachment; filename=myfile.txt”. C'est là que le nom du fichier est défini. Le contenu de votre pièce jointe sera très certainement beaucoup plus complexe, mais cet exemple tente de le simplifier.
Maintenant que nous avons le contexte approprié pour envoyer des pièces jointes avec le point de terminaison de transmission, examinons comment procéder avec des modèles. Au moment de la rédaction de cet article, il n’existe pas d’abstraction des pièces jointes comme vous pouvez en trouver pour les transmissions en ligne. On pourrait en déduire que les modèles ne peuvent pas être créés avec des pièces jointes. Vous auriez partiellement raison, mais il existe une solution, bien que vous ne soyez plus isolé du format RFC 5322.
Vous pouvez effectuer des pièces jointes dans des modèles en codant vous-même le contenu RFC 5322, qui comprend les pièces jointes. La bonne nouvelle est que vous ne perdrez pas la possibilité d'utiliser toujours les Données de Substitution dans vos en-têtes d'email, parties HTML et texte. Sachez que ce type de modèle limite les substitutions aux en-têtes et à la première partie HTML et à la première partie texte.
Limites du Modèle RFC 5322
Limitation | Description |
|---|---|
Substitutions restreintes | Appliquées uniquement aux en-têtes, première partie HTML, et première partie texte |
Gestion MIME manuelle | Le développeur doit construire toutes les frontières MIME et les parties de pièces jointes |
Surcharge de maintenance plus élevée | Plus difficile à mettre à jour, auditer et versionner |
Pas convivial pour les abstractions | Contourne la commodité du système de modèles de SparkPost |
Voici un exemple de comment cela se fait.
Email RFC822
Créez votre email RFC 5322 avec les données de substitution souhaitées. J'ai créé celui-ci dans mon client de messagerie et me l'ai envoyé. Une fois que je l'ai reçu, j'ai copié la source et remplacé les champs que je veux substituer dynamiquement.
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}} <
La dernière partie MIME dans ce message vous verrez Content-Disposition: attachment; filename=myfile.txt”. C'est là que le nom du fichier est défini. Le contenu de votre pièce jointe sera très certainement beaucoup plus complexe, mais cet exemple tente de le simplifier.
Maintenant que nous avons le contexte approprié pour envoyer des pièces jointes avec le point de terminaison de transmission, examinons comment procéder avec des modèles. Au moment de la rédaction de cet article, il n’existe pas d’abstraction des pièces jointes comme vous pouvez en trouver pour les transmissions en ligne. On pourrait en déduire que les modèles ne peuvent pas être créés avec des pièces jointes. Vous auriez partiellement raison, mais il existe une solution, bien que vous ne soyez plus isolé du format RFC 5322.
Vous pouvez effectuer des pièces jointes dans des modèles en codant vous-même le contenu RFC 5322, qui comprend les pièces jointes. La bonne nouvelle est que vous ne perdrez pas la possibilité d'utiliser toujours les Données de Substitution dans vos en-têtes d'email, parties HTML et texte. Sachez que ce type de modèle limite les substitutions aux en-têtes et à la première partie HTML et à la première partie texte.
Limites du Modèle RFC 5322
Limitation | Description |
|---|---|
Substitutions restreintes | Appliquées uniquement aux en-têtes, première partie HTML, et première partie texte |
Gestion MIME manuelle | Le développeur doit construire toutes les frontières MIME et les parties de pièces jointes |
Surcharge de maintenance plus élevée | Plus difficile à mettre à jour, auditer et versionner |
Pas convivial pour les abstractions | Contourne la commodité du système de modèles de SparkPost |
Voici un exemple de comment cela se fait.
Email RFC822
Créez votre email RFC 5322 avec les données de substitution souhaitées. J'ai créé celui-ci dans mon client de messagerie et me l'ai envoyé. Une fois que je l'ai reçu, j'ai copié la source et remplacé les champs que je veux substituer dynamiquement.
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}} <
La dernière partie MIME dans ce message vous verrez Content-Disposition: attachment; filename=myfile.txt”. C'est là que le nom du fichier est défini. Le contenu de votre pièce jointe sera très certainement beaucoup plus complexe, mais cet exemple tente de le simplifier.
Stored Template
Une fois que vous avez un email RFC 5322 valide, stockez-le en utilisant le formulaire email_rfc822 du point de terminaison du modèle au lieu d'utiliser les champs text et HTML. Voici un exemple de ce à quoi ressemble le content pour ce message :
{ "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" }
Lorsque la requête est terminée, SparkPost répondra avec un identifiant unique pour votre nouveau modèle. Par exemple xxxxxxx.
Une fois que vous avez un email RFC 5322 valide, stockez-le en utilisant le formulaire email_rfc822 du point de terminaison du modèle au lieu d'utiliser les champs text et HTML. Voici un exemple de ce à quoi ressemble le content pour ce message :
{ "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" }
Lorsque la requête est terminée, SparkPost répondra avec un identifiant unique pour votre nouveau modèle. Par exemple xxxxxxx.
Une fois que vous avez un email RFC 5322 valide, stockez-le en utilisant le formulaire email_rfc822 du point de terminaison du modèle au lieu d'utiliser les champs text et HTML. Voici un exemple de ce à quoi ressemble le content pour ce message :
{ "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" }
Lorsque la requête est terminée, SparkPost répondra avec un identifiant unique pour votre nouveau modèle. Par exemple xxxxxxx.
Conclusion
Maintenant que vous voyez comment SparkPost peut être utilisé pour envoyer des emails de presque toute complexité, vous pouvez vouloir jeter un œil à «SparkPost Supports Sending Email on Apple Watch» ou avoir un regard sur la syntaxe de substitution pour voir comment elle peut être utilisée avec «si alors sinon», «expressions dans les conditionnels» ou «Itération de tableau» directement dans votre modèle ou contenu de transmission.
Maintenant que vous voyez comment SparkPost peut être utilisé pour envoyer des emails de presque toute complexité, vous pouvez vouloir jeter un œil à «SparkPost Supports Sending Email on Apple Watch» ou avoir un regard sur la syntaxe de substitution pour voir comment elle peut être utilisée avec «si alors sinon», «expressions dans les conditionnels» ou «Itération de tableau» directement dans votre modèle ou contenu de transmission.
Maintenant que vous voyez comment SparkPost peut être utilisé pour envoyer des emails de presque toute complexité, vous pouvez vouloir jeter un œil à «SparkPost Supports Sending Email on Apple Watch» ou avoir un regard sur la syntaxe de substitution pour voir comment elle peut être utilisée avec «si alors sinon», «expressions dans les conditionnels» ou «Itération de tableau» directement dans votre modèle ou contenu de transmission.



