Modelli Email Avanzati
Uccello
25 mar 2016
1 min read

Conclusioni principali
I modelli di SparkPost supportano la composizione email semplice e avanzata, inclusi HTML, testo, logica condizionale, cicli e dati dinamici per destinatario tramite variabili di sostituzione.
Gli array possono essere passati nei dati di sostituzione, permettendo di iterare attraverso gli elementi (ad esempio, elenchi di file, attività recenti, righe di tabella personalizzate) per generare sezioni personalizzate per ogni destinatario.
Le triplice parentesi ricce
{{{ }}}ti permettono di inserire HTML grezzo, non filtrato, essenziale quando i tuoi dati di sostituzione contengono già markup.Gli allegati possono essere inviati facilmente utilizzando l'endpoint di trasmissione (
content.attachments), che astrarrà per te i confini e la codifica MIME.Le immagini inline funzionano in modo simile agli allegati ma vengono visualizzate nel corpo usando riferimenti
cid:.I modelli stessi non supportano nativamente gli allegati, ma puoi ancora includerli creando un'email RFC 5322 completa con parti MIME e memorizzandola come un modello
email_rfc822.Quando si creano modelli RFC 5322 grezzi, le sostituzioni funzionano ancora — ma solo nelle intestazioni e nelle primissime parti MIME di HTML e testo.
Usare il client di posta del tuo linguaggio di programmazione (es. JavaMail) offre un'altra strada: generare email MIME complete programmaticamente e inviarle via l'API delle trasmissioni SparkPost.
Per la manutenibilità, mantieni separati il markup e i dati ogni volta che è possibile—soprattutto quando si costruiscono modelli che includono cicli o più sezioni MIME.
Le funzionalità avanzate dei modelli (condizionali, espressioni, iterazione degli array) permettono agli sviluppatori di costruire email sofisticate e personalizzate senza riscrivere interi modelli per ogni caso d'uso.
Q&A Highlights
I modelli SparkPost possono gestire cicli e array?
Sì. I modelli possono iterare su array utilizzando i costrutti
for each. Questo consente tabelle dinamiche, elenchi o blocchi HTML ripetuti per ogni destinatario.A cosa servono le triple parentesi graffe?
{{{ variable }}}inserisce HTML non elaborato senza esecuzione. È necessario quando i tuoi dati di sostituzione includono già markup HTML.Posso inviare allegati con templates?
Non direttamente tramite i campi del modello — ma puoi farlo memorizzando un modello
email_rfc822che include parti di allegati 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 usare il Transmission endpoint invece dei templates?
Quando invii allegati dinamici, immagini inline, o quando hai bisogno che SparkPost gestisca automaticamente il MIME.
È meglio incorporare la logica di visualizzazione o tenerla separata?
La migliore pratica è mantenere separati il markup della vista e i dati. 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 in modo programmatico e di inviarli tramite l'API di trasmissione di SparkPost.
Le funzionalità avanzate dei template sono ampiamente utilizzate?
Sorprendentemente pochi sviluppatori li usano, ma sbloccano una potente personalizzazione: cicli, condizionali, logica inline, e strutture MIME personalizzate.
Perché avrei mai bisogno di RFC 5322 templates?
Solo quando si inviano email complesse multi-parte (allegati, tipi MIME personalizzati) che l'astrazione standard del modello di SparkPost non supporta.
Questo post è rivolto allo sviluppatore che vuole ottenere il massimo dalle capacità di modelli email di SparkPost. Si presume che tu sia a tuo agio con la lettura di contenuti JSON e con il seguire il flusso di programmazione di base. Quando vengono introdotti termini che potrebbero essere nuovi per te, come RFC 5322, il testo è collegato alla sua fonte di riferimento.
Con ciò fuori dai piedi, entriamo subito nel vivo.
Le capacità di trasmissione e di modello di SparkPost rendono l'invio di email diretto. Tali capacità forniscono un'astrazione per il contenuto testuale e HTML il che significa che la maggior parte delle volte non c'è bisogno di codificare direttamente il formato grezzo dell'email definito in RFC 5322 precedentemente conosciuto come (RFC 822). Ma a volte potresti voler creare messaggi più complessi che abbiano altre parti di Estensioni Multipurpose Internet Mail (MIME) che non sono direttamente esposte tramite l'interfaccia RESTful di SparkPost.
Questo post è rivolto allo sviluppatore che vuole ottenere il massimo dalle capacità di modelli email di SparkPost. Si presume che tu sia a tuo agio con la lettura di contenuti JSON e con il seguire il flusso di programmazione di base. Quando vengono introdotti termini che potrebbero essere nuovi per te, come RFC 5322, il testo è collegato alla sua fonte di riferimento.
Con ciò fuori dai piedi, entriamo subito nel vivo.
Le capacità di trasmissione e di modello di SparkPost rendono l'invio di email diretto. Tali capacità forniscono un'astrazione per il contenuto testuale e HTML il che significa che la maggior parte delle volte non c'è bisogno di codificare direttamente il formato grezzo dell'email definito in RFC 5322 precedentemente conosciuto come (RFC 822). Ma a volte potresti voler creare messaggi più complessi che abbiano altre parti di Estensioni Multipurpose Internet Mail (MIME) che non sono direttamente esposte tramite l'interfaccia RESTful di SparkPost.
Questo post è rivolto allo sviluppatore che vuole ottenere il massimo dalle capacità di modelli email di SparkPost. Si presume che tu sia a tuo agio con la lettura di contenuti JSON e con il seguire il flusso di programmazione di base. Quando vengono introdotti termini che potrebbero essere nuovi per te, come RFC 5322, il testo è collegato alla sua fonte di riferimento.
Con ciò fuori dai piedi, entriamo subito nel vivo.
Le capacità di trasmissione e di modello di SparkPost rendono l'invio di email diretto. Tali capacità forniscono un'astrazione per il contenuto testuale e HTML il che significa che la maggior parte delle volte non c'è bisogno di codificare direttamente il formato grezzo dell'email definito in RFC 5322 precedentemente conosciuto come (RFC 822). Ma a volte potresti voler creare messaggi più complessi che abbiano altre parti di Estensioni Multipurpose Internet Mail (MIME) che non sono direttamente esposte tramite l'interfaccia RESTful di SparkPost.
Invio del Template
La buona notizia è che creare il contenuto RFC 5322 è stata la parte difficile. Da qui in poi inviare quel modello con SparkPost è esattamente lo stesso che inviare qualsiasi altro modello.
Ecco come inviamo quel modello e popolare 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 lo stesso che inviare qualsiasi altro modello.
Ecco come inviamo quel modello e popolare 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 lo stesso che inviare qualsiasi altro modello.
Ecco come inviamo quel modello e popolare 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
Prima di tutto, passiamo in rassegna uno scenario di una giornata di sole per l'invio di un'e-mail. Utilizza il transmission endpoint per fornire il text e il HTML content. Dietro le quinte, SparkPost si occupa di comporre un'e-mail valida RFC 5322. SparkPost inserirà variabili di sostituzione da substitution_data nel testo e nel contenuto HTML. Questo è un metodo potente per generare contenuti personalizzati per ciascun destinatario in un modello comune.
Ecco un esempio di transmission con contenuti HTML e 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>" } }
Prima di tutto, passiamo in rassegna uno scenario di una giornata di sole per l'invio di un'e-mail. Utilizza il transmission endpoint per fornire il text e il HTML content. Dietro le quinte, SparkPost si occupa di comporre un'e-mail valida RFC 5322. SparkPost inserirà variabili di sostituzione da substitution_data nel testo e nel contenuto HTML. Questo è un metodo potente per generare contenuti personalizzati per ciascun destinatario in un modello comune.
Ecco un esempio di transmission con contenuti HTML e 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>" } }
Prima di tutto, passiamo in rassegna uno scenario di una giornata di sole per l'invio di un'e-mail. Utilizza il transmission endpoint per fornire il text e il HTML content. Dietro le quinte, SparkPost si occupa di comporre un'e-mail valida RFC 5322. SparkPost inserirà variabili di sostituzione da substitution_data nel testo e nel contenuto HTML. Questo è un metodo potente per generare contenuti personalizzati per ciascun destinatario in un modello comune.
Ecco un esempio di transmission con contenuti HTML e 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>" } }
Sostituire Array di Dati
Molti utenti si rendono conto che gli endpoint di trasmissione e modello di SparkPost possono eseguire semplici sostituzioni di contenuto nelle intestazioni delle email e nei corpi delle email. Ma molti trascurano la capacità di fornire contenuti condizionali o array di dati che possono essere sostituiti anche. Puoi anche fornire contenuti unici per destinatario. In questo esempio inviamo una serie di link unici a ciascun destinatario.
Ciò viene realizzato fornendo un array di dati JSON che sarà popolato nel corpo dell'email. Una volta forniti i dati, SparkPost utilizzerà la logica nel modello per popolarli.
In questo esempio, SparkPost cercherà dati di sostituzione chiamati “files_html” ed eseguirà un “per ciascuno” su ogni elemento dell'array. Creerà una riga con il valore “file” nell'elemento “files_html”. Nota le triple parentesi 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 codificarlo. La parte testuale sarà un'etichetta di testo semplice e l'URL del file.
<table> {{each files_html}} <tr> <td>{{{loop_var.file}}}</td> </tr> {{ end }} </table>
Ecco l'esempio completo funzionante:
{ "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" } }
Consiglio Pro: Nel tuo codice è consigliabile mantenere il markup della vista separato dai dati, ma l'obiettivo qui era mantenere l'esempio il più semplice e facile da seguire possibile, quindi abbiamo creato due array. Un array è per la parte HTML e l'altro è per la parte testuale. In uso in produzione sarebbe comune avere un set di dati e scrivere la logica nel codice del modello.
Molti utenti si rendono conto che gli endpoint di trasmissione e modello di SparkPost possono eseguire semplici sostituzioni di contenuto nelle intestazioni delle email e nei corpi delle email. Ma molti trascurano la capacità di fornire contenuti condizionali o array di dati che possono essere sostituiti anche. Puoi anche fornire contenuti unici per destinatario. In questo esempio inviamo una serie di link unici a ciascun destinatario.
Ciò viene realizzato fornendo un array di dati JSON che sarà popolato nel corpo dell'email. Una volta forniti i dati, SparkPost utilizzerà la logica nel modello per popolarli.
In questo esempio, SparkPost cercherà dati di sostituzione chiamati “files_html” ed eseguirà un “per ciascuno” su ogni elemento dell'array. Creerà una riga con il valore “file” nell'elemento “files_html”. Nota le triple parentesi 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 codificarlo. La parte testuale sarà un'etichetta di testo semplice e l'URL del file.
<table> {{each files_html}} <tr> <td>{{{loop_var.file}}}</td> </tr> {{ end }} </table>
Ecco l'esempio completo funzionante:
{ "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" } }
Consiglio Pro: Nel tuo codice è consigliabile mantenere il markup della vista separato dai dati, ma l'obiettivo qui era mantenere l'esempio il più semplice e facile da seguire possibile, quindi abbiamo creato due array. Un array è per la parte HTML e l'altro è per la parte testuale. In uso in produzione sarebbe comune avere un set di dati e scrivere la logica nel codice del modello.
Molti utenti si rendono conto che gli endpoint di trasmissione e modello di SparkPost possono eseguire semplici sostituzioni di contenuto nelle intestazioni delle email e nei corpi delle email. Ma molti trascurano la capacità di fornire contenuti condizionali o array di dati che possono essere sostituiti anche. Puoi anche fornire contenuti unici per destinatario. In questo esempio inviamo una serie di link unici a ciascun destinatario.
Ciò viene realizzato fornendo un array di dati JSON che sarà popolato nel corpo dell'email. Una volta forniti i dati, SparkPost utilizzerà la logica nel modello per popolarli.
In questo esempio, SparkPost cercherà dati di sostituzione chiamati “files_html” ed eseguirà un “per ciascuno” su ogni elemento dell'array. Creerà una riga con il valore “file” nell'elemento “files_html”. Nota le triple parentesi 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 codificarlo. La parte testuale sarà un'etichetta di testo semplice e l'URL del file.
<table> {{each files_html}} <tr> <td>{{{loop_var.file}}}</td> </tr> {{ end }} </table>
Ecco l'esempio completo funzionante:
{ "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" } }
Consiglio Pro: Nel tuo codice è consigliabile mantenere il markup della vista separato dai dati, ma l'obiettivo qui era mantenere l'esempio il più semplice e facile da seguire possibile, quindi abbiamo creato due array. Un array è per la parte HTML e l'altro è per la parte testuale. In uso in produzione sarebbe comune avere un set di dati e scrivere la logica nel codice del modello.
Allegati in Capacità di Trasmissione
L'endpoint di trasmissione fornisce anche un'astrazione per l'invio di allegati. Qui sotto vedrai che gli allegati sono specificati nell'array content.attachments dove ogni oggetto nell'array descrive un singolo elemento di allegato. Proprio come prima, SparkPost si occuperà di codificare text, HTML, substitutions e iterare attraverso l'array di allegati per codificare un messaggio email correttamente formato.
Le migliori 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
Così appare un allegato all'interno 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 sono simili all'oggetto allegato mostrato sopra.
L'endpoint di trasmissione fornisce anche un'astrazione per l'invio di allegati. Qui sotto vedrai che gli allegati sono specificati nell'array content.attachments dove ogni oggetto nell'array descrive un singolo elemento di allegato. Proprio come prima, SparkPost si occuperà di codificare text, HTML, substitutions e iterare attraverso l'array di allegati per codificare un messaggio email correttamente formato.
Le migliori 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
Così appare un allegato all'interno 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 sono simili all'oggetto allegato mostrato sopra.
L'endpoint di trasmissione fornisce anche un'astrazione per l'invio di allegati. Qui sotto vedrai che gli allegati sono specificati nell'array content.attachments dove ogni oggetto nell'array descrive un singolo elemento di allegato. Proprio come prima, SparkPost si occuperà di codificare text, HTML, substitutions e iterare attraverso l'array di allegati per codificare un messaggio email correttamente formato.
Le migliori 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
Così appare un allegato all'interno 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 sono simili all'oggetto allegato mostrato sopra.
Allegati nei Templates
Ora che abbiamo il background adeguato per inviare allegati con il punto finale di trasmissione, diamo un'occhiata a come fare questo con i modelli. Al momento della stesura di questo documento, non esiste una astrazione per 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'è una soluzione alternativa, anche se non sarai più isolato dal formato RFC 5322.
Puoi ottenere allegati nei modelli codificando tu stesso il contenuto RFC 5322 che include gli allegati. La buona notizia è che non perderai la capacità di utilizzare ancora i Substitution Data nelle tue intestazioni email, parti in HTML e parti in testo. Tieni presente che questo tipo di modello limita le sostituzioni alle intestazioni e alla prima parte HTML e alla prima parte in testo.
Ecco un esempio di come è fatto.
Ora che abbiamo il background adeguato per inviare allegati con il punto finale di trasmissione, diamo un'occhiata a come fare questo con i modelli. Al momento della stesura di questo documento, non esiste una astrazione per 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'è una soluzione alternativa, anche se non sarai più isolato dal formato RFC 5322.
Puoi ottenere allegati nei modelli codificando tu stesso il contenuto RFC 5322 che include gli allegati. La buona notizia è che non perderai la capacità di utilizzare ancora i Substitution Data nelle tue intestazioni email, parti in HTML e parti in testo. Tieni presente che questo tipo di modello limita le sostituzioni alle intestazioni e alla prima parte HTML e alla prima parte in testo.
Ecco un esempio di come è fatto.
Ora che abbiamo il background adeguato per inviare allegati con il punto finale di trasmissione, diamo un'occhiata a come fare questo con i modelli. Al momento della stesura di questo documento, non esiste una astrazione per 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'è una soluzione alternativa, anche se non sarai più isolato dal formato RFC 5322.
Puoi ottenere allegati nei modelli codificando tu stesso il contenuto RFC 5322 che include gli allegati. La buona notizia è che non perderai la capacità di utilizzare ancora i Substitution Data nelle tue intestazioni email, parti in HTML e parti in testo. Tieni presente che questo tipo di modello limita le sostituzioni alle intestazioni e alla prima parte HTML e alla prima parte in testo.
Ecco un esempio di come è fatto.
RFC822 Email
Crea la tua email RFC 5322 con i dati di sostituzione desiderati. Ho creato questo nel mio client di posta e l'ho inviato a me stesso. Una volta ricevuto, ho copiato la 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}} <
L'ultima parte del MIME in questo messaggio vedrai Content-Disposition: attachment; filename=myfile.txt”. È lì dove viene definito il nome del file. Il contenuto del tuo allegato sarà sicuramente molto più complesso, ma questo esempio cerca di mantenerlo semplice.
Crea la tua email RFC 5322 con i dati di sostituzione desiderati. Ho creato questo nel mio client di posta e l'ho inviato a me stesso. Una volta ricevuto, ho copiato la 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}} <
L'ultima parte del MIME in questo messaggio vedrai Content-Disposition: attachment; filename=myfile.txt”. È lì dove viene definito il nome del file. Il contenuto del tuo allegato sarà sicuramente molto più complesso, ma questo esempio cerca di mantenerlo semplice.
Crea la tua email RFC 5322 con i dati di sostituzione desiderati. Ho creato questo nel mio client di posta e l'ho inviato a me stesso. Una volta ricevuto, ho copiato la 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}} <
L'ultima parte del MIME in questo messaggio vedrai Content-Disposition: attachment; filename=myfile.txt”. È lì dove viene definito il nome del file. Il contenuto del tuo allegato sarà sicuramente molto più complesso, ma questo esempio cerca di mantenerlo semplice.
Stored Template
Una volta che hai una email RFC 5322 valida, memorizzala utilizzando il modulo email_rfc822 dell'endpoint del modello invece di usare i campi text e HTML. Ecco un esempio di come appare il content di 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 è completata, SparkPost risponderà con un identificatore univoco per il tuo nuovo modello. Per esempio xxxxxxx.
Una volta che hai una email RFC 5322 valida, memorizzala utilizzando il modulo email_rfc822 dell'endpoint del modello invece di usare i campi text e HTML. Ecco un esempio di come appare il content di 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 è completata, SparkPost risponderà con un identificatore univoco per il tuo nuovo modello. Per esempio xxxxxxx.
Una volta che hai una email RFC 5322 valida, memorizzala utilizzando il modulo email_rfc822 dell'endpoint del modello invece di usare i campi text e HTML. Ecco un esempio di come appare il content di 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 è completata, SparkPost risponderà con un identificatore univoco per il tuo nuovo modello. Per 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 Supports Sending Email on Apple Watch” o dare un'occhiata alla sintassi di sostituzione per vedere come può essere utilizzata con “if then else”, “espressioni in condizionali” o “iterazione di 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 Supports Sending Email on Apple Watch” o dare un'occhiata alla sintassi di sostituzione per vedere come può essere utilizzata con “if then else”, “espressioni in condizionali” o “iterazione di 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 Supports Sending Email on Apple Watch” o dare un'occhiata alla sintassi di sostituzione per vedere come può essere utilizzata con “if then else”, “espressioni in condizionali” o “iterazione di array” direttamente all'interno del tuo modello o contenuto di trasmissione.



