Modelli di email avanzati
Uccello
25 mar 2016
1 min read

Punti Chiave
I modelli di SparkPost supportano composizione di email semplice e avanzata, inclusi HTML, testo, logica condizionale, cicli e dati dinamici per destinatario attraverso variabili di sostituzione.
Le matrici possono essere passate nei dati di sostituzione, permettendoti di ciclare attraverso gli elementi (ad es., elenchi di file, attività recenti, righe di tabelle personalizzate) per generare sezioni personalizzate per ciascun destinatario.
Triple parentesi graffe
{{{ }}}ti permettono di inserire HTML grezzo e non scappato, che è essenziale quando i tuoi dati di sostituzione contengono già markup.Gli allegati possono essere inviati facilmente quando si utilizza l'endpoint di trasmissione (
content.attachments), che astrae i confini MIME e la codifica per te.Le immagini inline funzionano in modo simile agli allegati ma vengono visualizzate nel corpo utilizzando riferimenti
cid:.I modelli stessi non supportano nativamente gli allegati, ma puoi comunque includerli creando una email completa RFC 5322 con parti MIME e memorizzando quella come un
email_rfc822modello.Quando si costruiscono modelli raw RFC 5322, le sostituzioni funzionano comunque — ma solo negli header e le prime parti MIME HTML e testo.
Usare il client di posta della tua lingua di programmazione (ad es., JavaMail) offre un altro percorso: genera email MIME complete programmaticamente e inviale tramite l'API delle trasmissioni di SparkPost.
Per la manutenibilità, mantieni il markup e i dati separati ogni volta che è possibile—soprattutto quando costruisci modelli che includono cicli o più sezioni MIME.
Le funzionalità avanzate dei modelli (condizionali, espressioni, iterazione degli array) consentono agli sviluppatori di costruire email sofisticate e personalizzate senza riscrivere interi modelli per ogni caso d'uso.
Punti salienti del Q&A
I modelli di SparkPost possono gestire cicli e array?
Sì. I modelli possono iterare su array utilizzando costrutti
for each. Ciò consente tabelle, elenchi o blocchi HTML ripetuti dinamicamente per ciascun destinatario.A cosa servono le triple parentesi graffe?
{{{ variable }}}inserisce HTML grezzo senza escape. È necessario quando i dati di sostituzione contengono già markup HTML.Posso inviare allegati con modelli?
Non direttamente attraverso i campi del modello — ma puoi farlo memorizzando un
email_rfc822modello che include parti di allegato MIME.La sostituzione funziona ancora nei modelli RFC 5322?
Sì, ma solo all'interno delle intestazioni e delle prime parti MIME HTML + testo.
Quando dovrei utilizzare l'endpoint di trasmissione invece dei modelli?
Quando si inviano allegati dinamici, immagini in linea, o quando è necessario che SparkPost gestisca automaticamente il MIME.
È meglio incorporare la logica di visualizzazione o mantenerla separata?
La migliore prassi è mantenere il markup della vista e i dati separati. Usa i modelli per la presentazione e passa dati di sostituzione puliti e strutturati.
Posso generare un'email MIME completa utilizzando una libreria di programmazione?
Sì. Le librerie come JavaMail ti permettono di costruire messaggi RFC 5322 programmaticamente e inviarli tramite l'API di trasmissione di SparkPost.
Le funzionalità avanzate dei modelli sono ampiamente utilizzate?
Sorprendentemente pochi sviluppatori li usano, ma sbloccano potenti personalizzazioni: cicli, condizioni, logica inline e strutture MIME personalizzate.
Perché avrei mai bisogno dei modelli RFC 5322?
Solo quando si inviano email multi-parte complesse (allegati, tipi MIME personalizzati) che l'astrazione dei modelli standard di SparkPost non supporta.
Questo post è rivolto allo sviluppatore che vuole sfruttare al massimo le capacità dei modelli di email di SparkPost. Si presume che tu sia a tuo agio nella lettura dei contenuti JSON e nel seguire il flusso di programmazione di base. Poiché vengono introdotti termini che potrebbero esserti nuovi, come RFC 5322, il testo è collegato al suo riferimento sorgente.
Fatto questo, tuffiamoci subito nell'argomento.
Le template di SparkPost e le capacità di trasmissione rendono l'invio di email semplice e diretto. Queste capacità forniscono un'astrazione per i contenuti testo e HTML, il che significa che nella maggior parte dei casi non è necessario codificare direttamente il formato email grezzo definito in RFC 5322 precedentemente noto come (RFC 822). Ma a volte potresti voler creare messaggi più complessi che hanno altre parti di Multipurpose Internet Mail Extensions (MIME) che non sono direttamente esposte tramite l'interfaccia RESTful di SparkPost.
Questo post è rivolto allo sviluppatore che vuole sfruttare al massimo le capacità dei modelli di email di SparkPost. Si presume che tu sia a tuo agio nella lettura dei contenuti JSON e nel seguire il flusso di programmazione di base. Poiché vengono introdotti termini che potrebbero esserti nuovi, come RFC 5322, il testo è collegato al suo riferimento sorgente.
Fatto questo, tuffiamoci subito nell'argomento.
Le template di SparkPost e le capacità di trasmissione rendono l'invio di email semplice e diretto. Queste capacità forniscono un'astrazione per i contenuti testo e HTML, il che significa che nella maggior parte dei casi non è necessario codificare direttamente il formato email grezzo definito in RFC 5322 precedentemente noto come (RFC 822). Ma a volte potresti voler creare messaggi più complessi che hanno altre parti di Multipurpose Internet Mail Extensions (MIME) che non sono direttamente esposte tramite l'interfaccia RESTful di SparkPost.
Questo post è rivolto allo sviluppatore che vuole sfruttare al massimo le capacità dei modelli di email di SparkPost. Si presume che tu sia a tuo agio nella lettura dei contenuti JSON e nel seguire il flusso di programmazione di base. Poiché vengono introdotti termini che potrebbero esserti nuovi, come RFC 5322, il testo è collegato al suo riferimento sorgente.
Fatto questo, tuffiamoci subito nell'argomento.
Le template di SparkPost e le capacità di trasmissione rendono l'invio di email semplice e diretto. Queste capacità forniscono un'astrazione per i contenuti testo e HTML, il che significa che nella maggior parte dei casi non è necessario codificare direttamente il formato email grezzo definito in RFC 5322 precedentemente noto come (RFC 822). Ma a volte potresti voler creare messaggi più complessi che hanno altre parti di Multipurpose Internet Mail Extensions (MIME) che non sono direttamente esposte tramite l'interfaccia RESTful di SparkPost.
Invio del Modello
La buona notizia è che creare il contenuto RFC 5322 è stata la parte difficile. Da qui in poi, inviare quel modello con SparkPost è esattamente la stessa cosa che inviare qualsiasi altro modello.
Ecco come inviamo quel modello e popoliamo i dati di sostituzione:
{ "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 buona notizia è che creare il contenuto RFC 5322 è stata la parte difficile. Da qui in poi, inviare quel modello con SparkPost è esattamente la stessa cosa che inviare qualsiasi altro modello.
Ecco come inviamo quel modello e popoliamo i dati di sostituzione:
{ "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 buona notizia è che creare il contenuto RFC 5322 è stata la parte difficile. Da qui in poi, inviare quel modello con SparkPost è esattamente la stessa cosa che inviare qualsiasi altro modello.
Ecco come inviamo quel modello e popoliamo i dati di sostituzione:
{ "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 } }
Composizione email semplificata
Innanzitutto, rivediamo uno scenario di una giornata di sole per l'invio di un'email. Usa il endPoint di trasmissione per fornire il testo e contenuto HTML. Dietro le quinte, SparkPost si occupa di comporre un'email valida secondo RFC 5322. SparkPost inserirà le variabili di sostituzione da substitution_data nel contenuto di testo e HTML. Questo è un modo potente per generare contenuti personalizzati per ogni destinatario in un modello comune.
Ecco un esempio di trasmissione con contenuti HTML e di testo con 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>" } }
Panoramica delle Capacità di Sostituzione
Capacità | Descrizione |
|---|---|
Sostituzione di variabili di base | Inserisce valori dinamici singoli nel contenuto di testo o HTML |
Logica condizionale | Visualizza contenuti diversi in base alla valutazione booleana o di espressione |
Iterazione su array | Ripete gli array (ad es., elenchi di file) per generare contenuti ripetuti |
Inserimento di HTML raw ({{{ }}}) | Consente HTML non codificato per situazioni in cui il markup proviene dalla fonte dei dati |
Personalizzazione per destinatario | Supporta contenuti completamente unici per ogni destinatario |
Innanzitutto, rivediamo uno scenario di una giornata di sole per l'invio di un'email. Usa il endPoint di trasmissione per fornire il testo e contenuto HTML. Dietro le quinte, SparkPost si occupa di comporre un'email valida secondo RFC 5322. SparkPost inserirà le variabili di sostituzione da substitution_data nel contenuto di testo e HTML. Questo è un modo potente per generare contenuti personalizzati per ogni destinatario in un modello comune.
Ecco un esempio di trasmissione con contenuti HTML e di testo con 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>" } }
Panoramica delle Capacità di Sostituzione
Capacità | Descrizione |
|---|---|
Sostituzione di variabili di base | Inserisce valori dinamici singoli nel contenuto di testo o HTML |
Logica condizionale | Visualizza contenuti diversi in base alla valutazione booleana o di espressione |
Iterazione su array | Ripete gli array (ad es., elenchi di file) per generare contenuti ripetuti |
Inserimento di HTML raw ({{{ }}}) | Consente HTML non codificato per situazioni in cui il markup proviene dalla fonte dei dati |
Personalizzazione per destinatario | Supporta contenuti completamente unici per ogni destinatario |
Innanzitutto, rivediamo uno scenario di una giornata di sole per l'invio di un'email. Usa il endPoint di trasmissione per fornire il testo e contenuto HTML. Dietro le quinte, SparkPost si occupa di comporre un'email valida secondo RFC 5322. SparkPost inserirà le variabili di sostituzione da substitution_data nel contenuto di testo e HTML. Questo è un modo potente per generare contenuti personalizzati per ogni destinatario in un modello comune.
Ecco un esempio di trasmissione con contenuti HTML e di testo con 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>" } }
Panoramica delle Capacità di Sostituzione
Capacità | Descrizione |
|---|---|
Sostituzione di variabili di base | Inserisce valori dinamici singoli nel contenuto di testo o HTML |
Logica condizionale | Visualizza contenuti diversi in base alla valutazione booleana o di espressione |
Iterazione su array | Ripete gli array (ad es., elenchi di file) per generare contenuti ripetuti |
Inserimento di HTML raw ({{{ }}}) | Consente HTML non codificato per situazioni in cui il markup proviene dalla fonte dei dati |
Personalizzazione per destinatario | Supporta contenuti completamente unici per ogni destinatario |
Sostituisci array di dati
Molte persone si rendono conto che i punti di trasmissione e i modelli di SparkPost possono fare semplici contenuti sostituzioni nelle intestazioni delle email e nei corpi delle email. Ma molti trascurano la possibilità di fornire contenuti condizionali o array di dati che possono essere sostituiti altrettanto. Puoi anche fornire contenuti unici per ogni destinatario. In questo esempio inviamo un array di link unici a ciascun destinatario.
Questo è realizzato fornendo un array JSON di dati che verranno popolati nel corpo dell'email. Una volta forniti i dati, SparkPost utilizzerà la logica nel modello per popolarli.
In questo esempio SparkPost cercherà i dati di sostituzione chiamati “files_html” e farà un “for each” su ciascun elemento nell'array. Creerà una riga con il valore di “file” nell'elemento “files_html”. Nota le triple graffe attorno a “loop_var.file“. Questo è perché ogni elemento dell'array contiene HTML e dobbiamo dire al server di usarlo così com'è e non di eseguire l'escape. La parte di testo sarà un semplice etichetta di testo e l'URL del file.
<table> {{each files_html}} <tr> <td>{{{loop_var.file}}}</td> </tr> {{ end }} </table>
Ecco l'esempio di lavoro completato:
{ "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" } }
Molte persone si rendono conto che i punti di trasmissione e i modelli di SparkPost possono fare semplici contenuti sostituzioni nelle intestazioni delle email e nei corpi delle email. Ma molti trascurano la possibilità di fornire contenuti condizionali o array di dati che possono essere sostituiti altrettanto. Puoi anche fornire contenuti unici per ogni destinatario. In questo esempio inviamo un array di link unici a ciascun destinatario.
Questo è realizzato fornendo un array JSON di dati che verranno popolati nel corpo dell'email. Una volta forniti i dati, SparkPost utilizzerà la logica nel modello per popolarli.
In questo esempio SparkPost cercherà i dati di sostituzione chiamati “files_html” e farà un “for each” su ciascun elemento nell'array. Creerà una riga con il valore di “file” nell'elemento “files_html”. Nota le triple graffe attorno a “loop_var.file“. Questo è perché ogni elemento dell'array contiene HTML e dobbiamo dire al server di usarlo così com'è e non di eseguire l'escape. La parte di testo sarà un semplice etichetta di testo e l'URL del file.
<table> {{each files_html}} <tr> <td>{{{loop_var.file}}}</td> </tr> {{ end }} </table>
Ecco l'esempio di lavoro completato:
{ "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" } }
Molte persone si rendono conto che i punti di trasmissione e i modelli di SparkPost possono fare semplici contenuti sostituzioni nelle intestazioni delle email e nei corpi delle email. Ma molti trascurano la possibilità di fornire contenuti condizionali o array di dati che possono essere sostituiti altrettanto. Puoi anche fornire contenuti unici per ogni destinatario. In questo esempio inviamo un array di link unici a ciascun destinatario.
Questo è realizzato fornendo un array JSON di dati che verranno popolati nel corpo dell'email. Una volta forniti i dati, SparkPost utilizzerà la logica nel modello per popolarli.
In questo esempio SparkPost cercherà i dati di sostituzione chiamati “files_html” e farà un “for each” su ciascun elemento nell'array. Creerà una riga con il valore di “file” nell'elemento “files_html”. Nota le triple graffe attorno a “loop_var.file“. Questo è perché ogni elemento dell'array contiene HTML e dobbiamo dire al server di usarlo così com'è e non di eseguire l'escape. La parte di testo sarà un semplice etichetta di testo e l'URL del file.
<table> {{each files_html}} <tr> <td>{{{loop_var.file}}}</td> </tr> {{ end }} </table>
Ecco l'esempio di lavoro completato:
{ "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" } }
Allegati nelle Capacità di Trasmissione
Il punto di trasmissione fornisce anche un'astrazione per inviare allegati. Di seguito vedrai che gli allegati sono specificati nell'array content.attachments dove ogni oggetto nell'array descrive un singolo elemento allegato. Proprio come prima, SparkPost si occuperà della codifica di text, HTML, substitutions e dell'iterazione attraverso l'array degli allegati per codificare un messaggio email correttamente formattato.
Le buone pratiche indicano che l'invio di allegati è meglio evitarlo, a meno che non sia esplicitamente richiesto come parte del tuo servizio.
Di seguito sono riportati i campi richiesti per un allegato:
type: Il tipo MIME dell'allegato
name: Il nome del file dell'allegato
data: Dati del file codificati in Base64
Campi richiesti per gli allegati
Campo | Significato |
|---|---|
type | Tipo MIME dell'allegato |
name | Nome del file come apparirà al destinatario |
data | Payload del file codificato in Base64 |
Questo è come appare un allegato all'interno della stanza del contenuto di trasmissione:
"content": { "attachments": [ { "type": "audio/mp3", "name": "voicemail.mp3", "data": "TVAzIERhdGEK" } ] }
Puoi anche inviare “immagini inline” in una trasmissione. Queste sono molto simili agli allegati e sono specificate nell'array content.inline_images dove ciascuno degli oggetti inline_image è simile all'oggetto allegato mostrato sopra.
Il punto di trasmissione fornisce anche un'astrazione per inviare allegati. Di seguito vedrai che gli allegati sono specificati nell'array content.attachments dove ogni oggetto nell'array descrive un singolo elemento allegato. Proprio come prima, SparkPost si occuperà della codifica di text, HTML, substitutions e dell'iterazione attraverso l'array degli allegati per codificare un messaggio email correttamente formattato.
Le buone pratiche indicano che l'invio di allegati è meglio evitarlo, a meno che non sia esplicitamente richiesto come parte del tuo servizio.
Di seguito sono riportati i campi richiesti per un allegato:
type: Il tipo MIME dell'allegato
name: Il nome del file dell'allegato
data: Dati del file codificati in Base64
Campi richiesti per gli allegati
Campo | Significato |
|---|---|
type | Tipo MIME dell'allegato |
name | Nome del file come apparirà al destinatario |
data | Payload del file codificato in Base64 |
Questo è come appare un allegato all'interno della stanza del contenuto di trasmissione:
"content": { "attachments": [ { "type": "audio/mp3", "name": "voicemail.mp3", "data": "TVAzIERhdGEK" } ] }
Puoi anche inviare “immagini inline” in una trasmissione. Queste sono molto simili agli allegati e sono specificate nell'array content.inline_images dove ciascuno degli oggetti inline_image è simile all'oggetto allegato mostrato sopra.
Il punto di trasmissione fornisce anche un'astrazione per inviare allegati. Di seguito vedrai che gli allegati sono specificati nell'array content.attachments dove ogni oggetto nell'array descrive un singolo elemento allegato. Proprio come prima, SparkPost si occuperà della codifica di text, HTML, substitutions e dell'iterazione attraverso l'array degli allegati per codificare un messaggio email correttamente formattato.
Le buone pratiche indicano che l'invio di allegati è meglio evitarlo, a meno che non sia esplicitamente richiesto come parte del tuo servizio.
Di seguito sono riportati i campi richiesti per un allegato:
type: Il tipo MIME dell'allegato
name: Il nome del file dell'allegato
data: Dati del file codificati in Base64
Campi richiesti per gli allegati
Campo | Significato |
|---|---|
type | Tipo MIME dell'allegato |
name | Nome del file come apparirà al destinatario |
data | Payload del file codificato in Base64 |
Questo è come appare un allegato all'interno della stanza del contenuto di trasmissione:
"content": { "attachments": [ { "type": "audio/mp3", "name": "voicemail.mp3", "data": "TVAzIERhdGEK" } ] }
Puoi anche inviare “immagini inline” in una trasmissione. Queste sono molto simili agli allegati e sono specificate nell'array content.inline_images dove ciascuno degli oggetti inline_image è simile all'oggetto allegato mostrato sopra.
Allegati nei modelli
Ora che abbiamo il background corretto per inviare allegati con l'endpoint di trasmissione, diamo un'occhiata a come fare questo con i modelli. Al momento della stesura di questo testo, non esiste un'astrazione per gli allegati come si trova per le trasmissioni inline. Si potrebbe concludere che i modelli non possono essere creati con allegati. Avresti parzialmente ragione, ma c'è un modo per aggirare la situazione, anche se non sarai più isolato dal formato RFC 5322.
Puoi realizzare allegati nei modelli codificando tu stesso il contenuto RFC 5322 che include gli allegati. La buona notizia è che non perderai la possibilità di utilizzare ancora Dati di Sostituzione nelle tue intestazioni email, HTML e parti testo. Fai attenzione che questo tipo di modello limita le sostituzioni alle intestazioni e alla prima parte HTML e alla prima parte testo.
Limitazioni del Modello RFC 5322
Limitazione | Descrizione |
|---|---|
Sostituzioni ristrette | Si applicano solo alle intestazioni, alla prima parte HTML e alla prima parte testo |
Gestione MIME manuale | Lo sviluppatore deve costruire tutti i confini e le parti degli allegati MIME |
Maggiore onere di manutenzione | Più difficile da aggiornare, controllare e versionare |
Non amichevole verso le astrazioni | Salta la comodità del sistema di modelli di SparkPost |
Ecco un esempio di come viene fatto.
Email RFC822
Crea la tua email RFC 5322 con i dati di sostituzione desiderati. Ho creato questa in my client di posta e gliel'ho inviata. Una volta ricevuta, ho copiato il sorgente e sostituito i campi che voglio sostituire dinamicamente.
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}} <
Ultima parte MIME in questo messaggio vedrai Content-Disposition: attachment; filename=myfile.txt”. Qui è dove viene definito il nome del file. Il contenuto del tuo allegato sarà certamente molto più complesso, ma questo esempio cerca di mantenerlo semplice.
Ora che abbiamo il background corretto per inviare allegati con l'endpoint di trasmissione, diamo un'occhiata a come fare questo con i modelli. Al momento della stesura di questo testo, non esiste un'astrazione per gli allegati come si trova per le trasmissioni inline. Si potrebbe concludere che i modelli non possono essere creati con allegati. Avresti parzialmente ragione, ma c'è un modo per aggirare la situazione, anche se non sarai più isolato dal formato RFC 5322.
Puoi realizzare allegati nei modelli codificando tu stesso il contenuto RFC 5322 che include gli allegati. La buona notizia è che non perderai la possibilità di utilizzare ancora Dati di Sostituzione nelle tue intestazioni email, HTML e parti testo. Fai attenzione che questo tipo di modello limita le sostituzioni alle intestazioni e alla prima parte HTML e alla prima parte testo.
Limitazioni del Modello RFC 5322
Limitazione | Descrizione |
|---|---|
Sostituzioni ristrette | Si applicano solo alle intestazioni, alla prima parte HTML e alla prima parte testo |
Gestione MIME manuale | Lo sviluppatore deve costruire tutti i confini e le parti degli allegati MIME |
Maggiore onere di manutenzione | Più difficile da aggiornare, controllare e versionare |
Non amichevole verso le astrazioni | Salta la comodità del sistema di modelli di SparkPost |
Ecco un esempio di come viene fatto.
Email RFC822
Crea la tua email RFC 5322 con i dati di sostituzione desiderati. Ho creato questa in my client di posta e gliel'ho inviata. Una volta ricevuta, ho copiato il sorgente e sostituito i campi che voglio sostituire dinamicamente.
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}} <
Ultima parte MIME in questo messaggio vedrai Content-Disposition: attachment; filename=myfile.txt”. Qui è dove viene definito il nome del file. Il contenuto del tuo allegato sarà certamente molto più complesso, ma questo esempio cerca di mantenerlo semplice.
Ora che abbiamo il background corretto per inviare allegati con l'endpoint di trasmissione, diamo un'occhiata a come fare questo con i modelli. Al momento della stesura di questo testo, non esiste un'astrazione per gli allegati come si trova per le trasmissioni inline. Si potrebbe concludere che i modelli non possono essere creati con allegati. Avresti parzialmente ragione, ma c'è un modo per aggirare la situazione, anche se non sarai più isolato dal formato RFC 5322.
Puoi realizzare allegati nei modelli codificando tu stesso il contenuto RFC 5322 che include gli allegati. La buona notizia è che non perderai la possibilità di utilizzare ancora Dati di Sostituzione nelle tue intestazioni email, HTML e parti testo. Fai attenzione che questo tipo di modello limita le sostituzioni alle intestazioni e alla prima parte HTML e alla prima parte testo.
Limitazioni del Modello RFC 5322
Limitazione | Descrizione |
|---|---|
Sostituzioni ristrette | Si applicano solo alle intestazioni, alla prima parte HTML e alla prima parte testo |
Gestione MIME manuale | Lo sviluppatore deve costruire tutti i confini e le parti degli allegati MIME |
Maggiore onere di manutenzione | Più difficile da aggiornare, controllare e versionare |
Non amichevole verso le astrazioni | Salta la comodità del sistema di modelli di SparkPost |
Ecco un esempio di come viene fatto.
Email RFC822
Crea la tua email RFC 5322 con i dati di sostituzione desiderati. Ho creato questa in my client di posta e gliel'ho inviata. Una volta ricevuta, ho copiato il sorgente e sostituito i campi che voglio sostituire dinamicamente.
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}} <
Ultima parte MIME in questo messaggio vedrai Content-Disposition: attachment; filename=myfile.txt”. Qui è dove viene definito il nome del file. Il contenuto del tuo allegato sarà certamente molto più complesso, ma questo esempio cerca di mantenerlo semplice.
Template memorizzato
Una volta che hai un'email RFC 5322 valida, memorizzala utilizzando il email_rfc822 modulo dell'endpoint del modello invece di utilizzare text e HTML campi. Ecco un esempio di come appare il content per quel messaggio:
{ "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" }
Quando la richiesta viene completata, SparkPost risponderà con un identificatore unico per il tuo nuovo modello. Ad esempio xxxxxxx.
Una volta che hai un'email RFC 5322 valida, memorizzala utilizzando il email_rfc822 modulo dell'endpoint del modello invece di utilizzare text e HTML campi. Ecco un esempio di come appare il content per quel messaggio:
{ "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" }
Quando la richiesta viene completata, SparkPost risponderà con un identificatore unico per il tuo nuovo modello. Ad esempio xxxxxxx.
Una volta che hai un'email RFC 5322 valida, memorizzala utilizzando il email_rfc822 modulo dell'endpoint del modello invece di utilizzare text e HTML campi. Ecco un esempio di come appare il content per quel messaggio:
{ "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" }
Quando la richiesta viene completata, SparkPost risponderà con un identificatore unico per il tuo nuovo modello. Ad esempio xxxxxxx.
Conclusione
Ora che vedi come SparkPost può essere utilizzato per inviare email di quasi qualsiasi complessità, potresti voler dare un'occhiata a “SparkPost supporta l'invio di email su Apple Watch” oppure dare un'occhiata alla sintassi di sostituzione per vedere come può essere utilizzata con “if then else”, “espressioni nei condizionali” o “iterazione degli array” direttamente all'interno del tuo modello o contenuto di trasmissione.
Ora che vedi come SparkPost può essere utilizzato per inviare email di quasi qualsiasi complessità, potresti voler dare un'occhiata a “SparkPost supporta l'invio di email su Apple Watch” oppure dare un'occhiata alla sintassi di sostituzione per vedere come può essere utilizzata con “if then else”, “espressioni nei condizionali” o “iterazione degli array” direttamente all'interno del tuo modello o contenuto di trasmissione.
Ora che vedi come SparkPost può essere utilizzato per inviare email di quasi qualsiasi complessità, potresti voler dare un'occhiata a “SparkPost supporta l'invio di email su Apple Watch” oppure dare un'occhiata alla sintassi di sostituzione per vedere come può essere utilizzata con “if then else”, “espressioni nei condizionali” o “iterazione degli array” direttamente all'interno del tuo modello o contenuto di trasmissione.



