Modelos de Email Avançados
Pássaro
25 de mar. de 2016
1 min read

Principais Conclusões
Os modelos do SparkPost suportam composição de email simples e avançada, incluindo HTML, texto, lógica condicional, loops e dados dinâmicos por destinatário através de variáveis de substituição.
Arrays podem ser passados para os dados de substituição, permitindo que você percorrer itens (por exemplo, listas de arquivos, atividades recentes, linhas de tabela personalizadas) para gerar seções personalizadas para cada destinatário.
Chaves triplas
{{{ }}}permitem que você insira HTML bruto e não escapado, que é essencial quando seus dados de substituição já contêm marcação.Anexos podem ser enviados facilmente ao usar o endpoint de transmissão (
content.attachments), que abstrai limites de MIME e codificação para você.Imagens embutidas funcionam de forma semelhante aos anexos, mas são renderizadas no corpo usando referências
cid:.Os próprios modelos não suportam nativamente anexos, mas você pode ainda incluí-los criando um email completo RFC 5322 com partes MIME e armazenando isso como um
email_rfc822template.Ao construir templates RFC 5322 brutos, as substituições ainda funcionam — mas apenas nos cabeçalhos e nas partes MIME HTML e de texto primeiras.
Usar o cliente de email da sua linguagem de programação (por exemplo, JavaMail) oferece outro caminho: gerar emails MIME completos programaticamente e enviar via a API de transmissões do SparkPost.
Para manutenibilidade, mantenha a marcação e os dados separados sempre que possível—especialmente ao construir templates que incluem loops ou múltiplas seções MIME.
Recursos avançados de templates (condicionais, expressões, iteração de arrays) permitem que os desenvolvedores construam emails sofisticados e personalizados sem reescrever templates inteiros para cada caso de uso.
Destaques de Perguntas e Respostas
Os templates do SparkPost conseguem lidar com loops e arrays?
Sim. Os templates podem iterar sobre arrays usando construções de
for each. Isso permite tabelas dinâmicas, listas ou blocos HTML repetidos para cada destinatário.Para que servem as chaves triplas?
{{{ variable }}}insere HTML bruto sem escapamento. É necessário quando seus dados de substituição já incluem marcação HTML.Posso enviar anexos com modelos?
Não diretamente através de campos de template — mas você pode armazenar um
email_rfc822template que inclui partes de anexo MIME.A substituição ainda funciona em modelos RFC 5322?
Sim, mas apenas dentro dos cabeçalhos e das primeiras partes MIME de HTML + texto.
Quando devo usar o endpoint de transmissão em vez de modelos?
Ao enviar anexos dinâmicos, imagens embutidas, ou quando você precisa que o SparkPost trate o manuseio de MIME automaticamente.
É melhor incorporar a lógica de visualização ou mantê-la separada?
A melhor prática é manter sua marcação de visualização e dados separados. Use templates para apresentação e passe dados de substituição limpos e estruturados.
Posso gerar um email MIME completo usando uma biblioteca de programação?
Sim. Bibliotecas como JavaMail permitem que você construa mensagens RFC 5322 programaticamente e as envie através da API de transmissão do SparkPost.
As funcionalidades avançadas de template são amplamente utilizadas?
Surpreendentemente, poucos desenvolvedores os usam, mas eles desbloqueiam uma personalização poderosa: loops, condicionais, lógica inline e estruturas MIME personalizadas.
Por que eu precisaria de modelos RFC 5322?
Somente ao enviar e-mails complexos de múltiplas partes (anexos, tipos MIME personalizados) que a abstração de template padrão do SparkPost não suporta.
Este post é direcionado ao desenvolvedor que deseja aproveitar ao máximo as capacidades de modelagem de e-mail do SparkPost. Presume-se que você esteja confortável em ler conteúdo JSON e seguir o fluxo básico de programação. À medida que termos que podem ser novos para você são introduzidos, como RFC 5322, o texto está vinculado à sua referência de origem.
Com isso esclarecido, vamos direto ao ponto.
As modelos e capacidades de transmissão do SparkPost tornam o envio de e-mails simples. Essas capacidades fornecem uma abstração para conteúdo texto e HTML, o que significa que na maioria das vezes não há necessidade de codificar diretamente o formato bruto do e-mail, que é definido em RFC 5322 anteriormente conhecido como (RFC 822). Mas às vezes você pode querer criar mensagens mais complexas que têm outras partes de Extensões de Correio da Internet Multipropósito (MIME) que não estão diretamente expostas através da interface RESTful do SparkPost.
Este post é direcionado ao desenvolvedor que deseja aproveitar ao máximo as capacidades de modelagem de e-mail do SparkPost. Presume-se que você esteja confortável em ler conteúdo JSON e seguir o fluxo básico de programação. À medida que termos que podem ser novos para você são introduzidos, como RFC 5322, o texto está vinculado à sua referência de origem.
Com isso esclarecido, vamos direto ao ponto.
As modelos e capacidades de transmissão do SparkPost tornam o envio de e-mails simples. Essas capacidades fornecem uma abstração para conteúdo texto e HTML, o que significa que na maioria das vezes não há necessidade de codificar diretamente o formato bruto do e-mail, que é definido em RFC 5322 anteriormente conhecido como (RFC 822). Mas às vezes você pode querer criar mensagens mais complexas que têm outras partes de Extensões de Correio da Internet Multipropósito (MIME) que não estão diretamente expostas através da interface RESTful do SparkPost.
Este post é direcionado ao desenvolvedor que deseja aproveitar ao máximo as capacidades de modelagem de e-mail do SparkPost. Presume-se que você esteja confortável em ler conteúdo JSON e seguir o fluxo básico de programação. À medida que termos que podem ser novos para você são introduzidos, como RFC 5322, o texto está vinculado à sua referência de origem.
Com isso esclarecido, vamos direto ao ponto.
As modelos e capacidades de transmissão do SparkPost tornam o envio de e-mails simples. Essas capacidades fornecem uma abstração para conteúdo texto e HTML, o que significa que na maioria das vezes não há necessidade de codificar diretamente o formato bruto do e-mail, que é definido em RFC 5322 anteriormente conhecido como (RFC 822). Mas às vezes você pode querer criar mensagens mais complexas que têm outras partes de Extensões de Correio da Internet Multipropósito (MIME) que não estão diretamente expostas através da interface RESTful do SparkPost.
Enviando o Modelo
A boa notícia é que criar o conteúdo do RFC 5322 foi a parte difícil. A partir de agora, enviar esse modelo com o SparkPost é exatamente igual a enviar qualquer outro modelo.
Veja como enviamos esse modelo e populamos os dados de substituição:
{ "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 } }
A boa notícia é que criar o conteúdo do RFC 5322 foi a parte difícil. A partir de agora, enviar esse modelo com o SparkPost é exatamente igual a enviar qualquer outro modelo.
Veja como enviamos esse modelo e populamos os dados de substituição:
{ "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 } }
A boa notícia é que criar o conteúdo do RFC 5322 foi a parte difícil. A partir de agora, enviar esse modelo com o SparkPost é exatamente igual a enviar qualquer outro modelo.
Veja como enviamos esse modelo e populamos os dados de substituição:
{ "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 } }
Composição de Email Simplificada
Primeiro, vamos revisar um cenário de dia ensolarado para enviar um e-mail. Use o endpoint de transmissão para fornecer o texto e conteúdo HTML. Nos bastidores, o SparkPost cuida de compor um e-mail válido RFC 5322. O SparkPost irá inserir variáveis de substituição de substitution_data no conteúdo de texto e HTML. Esta é uma forma poderosa de gerar conteúdo personalizado para cada destinatário em um modelo comum.
Aqui está um exemplo transmissão com conteúdo HTML e de texto com 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>" } }
Visão Geral das Capacidades de Substituição
Capacidade | Descrição |
|---|---|
Substituição de variável básica | Insere valores dinâmicos únicos no conteúdo de texto ou HTML |
Lógica condicional | Renderiza conteúdo diferente com base na avaliação booleana ou de expressão |
Iteração de array | Passa por arrays (por exemplo, listas de arquivos) para gerar conteúdo repetido |
Inserção de HTML bruto ({{{ }}}) | Permite HTML não escapado para situações onde a marcação vem da fonte de dados |
Personalização por destinatário | Apoia conteúdo totalmente único para cada destinatário |
Primeiro, vamos revisar um cenário de dia ensolarado para enviar um e-mail. Use o endpoint de transmissão para fornecer o texto e conteúdo HTML. Nos bastidores, o SparkPost cuida de compor um e-mail válido RFC 5322. O SparkPost irá inserir variáveis de substituição de substitution_data no conteúdo de texto e HTML. Esta é uma forma poderosa de gerar conteúdo personalizado para cada destinatário em um modelo comum.
Aqui está um exemplo transmissão com conteúdo HTML e de texto com 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>" } }
Visão Geral das Capacidades de Substituição
Capacidade | Descrição |
|---|---|
Substituição de variável básica | Insere valores dinâmicos únicos no conteúdo de texto ou HTML |
Lógica condicional | Renderiza conteúdo diferente com base na avaliação booleana ou de expressão |
Iteração de array | Passa por arrays (por exemplo, listas de arquivos) para gerar conteúdo repetido |
Inserção de HTML bruto ({{{ }}}) | Permite HTML não escapado para situações onde a marcação vem da fonte de dados |
Personalização por destinatário | Apoia conteúdo totalmente único para cada destinatário |
Primeiro, vamos revisar um cenário de dia ensolarado para enviar um e-mail. Use o endpoint de transmissão para fornecer o texto e conteúdo HTML. Nos bastidores, o SparkPost cuida de compor um e-mail válido RFC 5322. O SparkPost irá inserir variáveis de substituição de substitution_data no conteúdo de texto e HTML. Esta é uma forma poderosa de gerar conteúdo personalizado para cada destinatário em um modelo comum.
Aqui está um exemplo transmissão com conteúdo HTML e de texto com 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>" } }
Visão Geral das Capacidades de Substituição
Capacidade | Descrição |
|---|---|
Substituição de variável básica | Insere valores dinâmicos únicos no conteúdo de texto ou HTML |
Lógica condicional | Renderiza conteúdo diferente com base na avaliação booleana ou de expressão |
Iteração de array | Passa por arrays (por exemplo, listas de arquivos) para gerar conteúdo repetido |
Inserção de HTML bruto ({{{ }}}) | Permite HTML não escapado para situações onde a marcação vem da fonte de dados |
Personalização por destinatário | Apoia conteúdo totalmente único para cada destinatário |
Substituir Arrays de Dados
Muitas pessoas percebem que os pontos finais de transmissão e de modelo do SparkPost podem fazer uma simples substituição de conteúdo substituição em cabeçalhos de email e corpos de email. Mas muitos negligenciam a capacidade de fornecer conteúdo condicional ou arrays de dados que podem ser substituídos também. Você também pode fornecer conteúdo exclusivo por destinatário. Neste exemplo, enviamos um array de links exclusivos para cada destinatário.
Isso é realizado fornecendo um array JSON de dados que será populado no corpo do email. Uma vez que os dados são fornecidos, o SparkPost irá usar a lógica no modelo para populá-los.
Neste exemplo, o SparkPost procurará por dados de substituição chamados “files_html” e fará um “for each” em cada elemento do array. Ele criará uma linha com o valor de “file” no elemento “files_html”. Note as três chaves em volta de “loop_var.file“. Isso é porque cada elemento do array contém HTML e precisamos informar ao servidor para usá-lo como está e não escapá-lo. A parte de texto será um rótulo de texto simples e o URL para o arquivo.
<table> {{each files_html}} <tr> <td>{{{loop_var.file}}}</td> </tr> {{ end }} </table>
Aqui está o exemplo completo e funcional:
{ "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" } }
Muitas pessoas percebem que os pontos finais de transmissão e de modelo do SparkPost podem fazer uma simples substituição de conteúdo substituição em cabeçalhos de email e corpos de email. Mas muitos negligenciam a capacidade de fornecer conteúdo condicional ou arrays de dados que podem ser substituídos também. Você também pode fornecer conteúdo exclusivo por destinatário. Neste exemplo, enviamos um array de links exclusivos para cada destinatário.
Isso é realizado fornecendo um array JSON de dados que será populado no corpo do email. Uma vez que os dados são fornecidos, o SparkPost irá usar a lógica no modelo para populá-los.
Neste exemplo, o SparkPost procurará por dados de substituição chamados “files_html” e fará um “for each” em cada elemento do array. Ele criará uma linha com o valor de “file” no elemento “files_html”. Note as três chaves em volta de “loop_var.file“. Isso é porque cada elemento do array contém HTML e precisamos informar ao servidor para usá-lo como está e não escapá-lo. A parte de texto será um rótulo de texto simples e o URL para o arquivo.
<table> {{each files_html}} <tr> <td>{{{loop_var.file}}}</td> </tr> {{ end }} </table>
Aqui está o exemplo completo e funcional:
{ "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" } }
Muitas pessoas percebem que os pontos finais de transmissão e de modelo do SparkPost podem fazer uma simples substituição de conteúdo substituição em cabeçalhos de email e corpos de email. Mas muitos negligenciam a capacidade de fornecer conteúdo condicional ou arrays de dados que podem ser substituídos também. Você também pode fornecer conteúdo exclusivo por destinatário. Neste exemplo, enviamos um array de links exclusivos para cada destinatário.
Isso é realizado fornecendo um array JSON de dados que será populado no corpo do email. Uma vez que os dados são fornecidos, o SparkPost irá usar a lógica no modelo para populá-los.
Neste exemplo, o SparkPost procurará por dados de substituição chamados “files_html” e fará um “for each” em cada elemento do array. Ele criará uma linha com o valor de “file” no elemento “files_html”. Note as três chaves em volta de “loop_var.file“. Isso é porque cada elemento do array contém HTML e precisamos informar ao servidor para usá-lo como está e não escapá-lo. A parte de texto será um rótulo de texto simples e o URL para o arquivo.
<table> {{each files_html}} <tr> <td>{{{loop_var.file}}}</td> </tr> {{ end }} </table>
Aqui está o exemplo completo e funcional:
{ "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" } }
Anexos nas Capacidades de Transmissão
O ponto final de transmissão também fornece uma abstração para o envio de anexos. Abaixo você verá que os anexos são especificados no array content.attachments onde cada objeto no array descreve um item de anexo individual. Assim como antes, o SparkPost cuidará da codificação de texto, HTML, substituições e iterará através do array de anexos para codificar uma mensagem de e-mail devidamente formada.
As melhores práticas indicam que o envio de anexos deve ser evitado, a menos que explicitamente necessário como parte do seu serviço.
Abaixo estão os campos obrigatórios para um anexo:
tipo: O tipo MIME do anexo
nome: O nome do arquivo do anexo
dados: Dados do arquivo codificados em Base64
Campos Obrigatórios para Anexos
Campo | Significado |
|---|---|
tipo | Tipo MIME do anexo |
nome | Nome do arquivo como aparecerá para o destinatário |
dados | Payload de arquivo codificado em Base64 |
Isso é como um anexo se parece dentro do estrofe do conteúdo da transmissão:
"content": { "attachments": [ { "type": "audio/mp3", "name": "voicemail.mp3", "data": "TVAzIERhdGEK" } ] }
Você também pode enviar “imagens embutidas” em uma transmissão. Estas são muito semelhantes aos anexos e são especificadas no array content.inline_images onde cada um dos objetos inline_image é semelhante ao objeto de anexo mostrado acima.
O ponto final de transmissão também fornece uma abstração para o envio de anexos. Abaixo você verá que os anexos são especificados no array content.attachments onde cada objeto no array descreve um item de anexo individual. Assim como antes, o SparkPost cuidará da codificação de texto, HTML, substituições e iterará através do array de anexos para codificar uma mensagem de e-mail devidamente formada.
As melhores práticas indicam que o envio de anexos deve ser evitado, a menos que explicitamente necessário como parte do seu serviço.
Abaixo estão os campos obrigatórios para um anexo:
tipo: O tipo MIME do anexo
nome: O nome do arquivo do anexo
dados: Dados do arquivo codificados em Base64
Campos Obrigatórios para Anexos
Campo | Significado |
|---|---|
tipo | Tipo MIME do anexo |
nome | Nome do arquivo como aparecerá para o destinatário |
dados | Payload de arquivo codificado em Base64 |
Isso é como um anexo se parece dentro do estrofe do conteúdo da transmissão:
"content": { "attachments": [ { "type": "audio/mp3", "name": "voicemail.mp3", "data": "TVAzIERhdGEK" } ] }
Você também pode enviar “imagens embutidas” em uma transmissão. Estas são muito semelhantes aos anexos e são especificadas no array content.inline_images onde cada um dos objetos inline_image é semelhante ao objeto de anexo mostrado acima.
O ponto final de transmissão também fornece uma abstração para o envio de anexos. Abaixo você verá que os anexos são especificados no array content.attachments onde cada objeto no array descreve um item de anexo individual. Assim como antes, o SparkPost cuidará da codificação de texto, HTML, substituições e iterará através do array de anexos para codificar uma mensagem de e-mail devidamente formada.
As melhores práticas indicam que o envio de anexos deve ser evitado, a menos que explicitamente necessário como parte do seu serviço.
Abaixo estão os campos obrigatórios para um anexo:
tipo: O tipo MIME do anexo
nome: O nome do arquivo do anexo
dados: Dados do arquivo codificados em Base64
Campos Obrigatórios para Anexos
Campo | Significado |
|---|---|
tipo | Tipo MIME do anexo |
nome | Nome do arquivo como aparecerá para o destinatário |
dados | Payload de arquivo codificado em Base64 |
Isso é como um anexo se parece dentro do estrofe do conteúdo da transmissão:
"content": { "attachments": [ { "type": "audio/mp3", "name": "voicemail.mp3", "data": "TVAzIERhdGEK" } ] }
Você também pode enviar “imagens embutidas” em uma transmissão. Estas são muito semelhantes aos anexos e são especificadas no array content.inline_images onde cada um dos objetos inline_image é semelhante ao objeto de anexo mostrado acima.
Anexos em Modelos
Agora que temos o contexto adequado para enviar anexos com o ponto de transmissão, vamos dar uma olhada em como fazer isso com modelos. No momento em que estou escrevendo, não há uma abstração de anexos como você encontra para transmissões embutidas. Pode-se concluir que modelos não podem ser criados com anexos. Você estaria parcialmente correto, mas há uma solução alternativa, embora você não estará mais isolado do formato RFC 5322.
Você pode realizar anexos em modelos codificando o conteúdo RFC 5322 você mesmo, o que inclui os anexos. A boa notícia é que você não perderá a capacidade de ainda usar Dados de Substituição nos seus cabeçalhos de email, HTML e partes de texto. Fique ciente que esse tipo de modelo limita as substituições aos cabeçalhos e à primeira parte HTML e à primeira parte de texto.
Limitações do Modelo RFC 5322
Limitação | Descrição |
|---|---|
Substituições restritas | Aplicam-se apenas aos cabeçalhos, primeira parte HTML e primeira parte de texto |
Manipulação manual de MIME | O desenvolvedor deve construir todos os limites de MIME e partes de anexo |
Maior manutenção | Mais difícil de atualizar, auditar e versionar |
Não amigável à abstração | Desconsidera a conveniência do sistema de modelos da SparkPost |
Aqui está um exemplo de como isso é feito.
Email RFC822
Crie seu email RFC 5322 com os dados de substituição que você deseja. Eu criei esse no meu cliente de email e enviei para mim mesmo. Assim que o recebi, copiei a fonte e substituí os campos que quero substituir 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}} <
A última parte MIME nessa mensagem que você verá é Content-Disposition: attachment; filename=myfile.txt”. É onde o nome do arquivo é definido. O conteúdo do seu anexo provavelmente será muito mais complexo, mas este exemplo tenta mantê-lo simples.
Agora que temos o contexto adequado para enviar anexos com o ponto de transmissão, vamos dar uma olhada em como fazer isso com modelos. No momento em que estou escrevendo, não há uma abstração de anexos como você encontra para transmissões embutidas. Pode-se concluir que modelos não podem ser criados com anexos. Você estaria parcialmente correto, mas há uma solução alternativa, embora você não estará mais isolado do formato RFC 5322.
Você pode realizar anexos em modelos codificando o conteúdo RFC 5322 você mesmo, o que inclui os anexos. A boa notícia é que você não perderá a capacidade de ainda usar Dados de Substituição nos seus cabeçalhos de email, HTML e partes de texto. Fique ciente que esse tipo de modelo limita as substituições aos cabeçalhos e à primeira parte HTML e à primeira parte de texto.
Limitações do Modelo RFC 5322
Limitação | Descrição |
|---|---|
Substituições restritas | Aplicam-se apenas aos cabeçalhos, primeira parte HTML e primeira parte de texto |
Manipulação manual de MIME | O desenvolvedor deve construir todos os limites de MIME e partes de anexo |
Maior manutenção | Mais difícil de atualizar, auditar e versionar |
Não amigável à abstração | Desconsidera a conveniência do sistema de modelos da SparkPost |
Aqui está um exemplo de como isso é feito.
Email RFC822
Crie seu email RFC 5322 com os dados de substituição que você deseja. Eu criei esse no meu cliente de email e enviei para mim mesmo. Assim que o recebi, copiei a fonte e substituí os campos que quero substituir 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}} <
A última parte MIME nessa mensagem que você verá é Content-Disposition: attachment; filename=myfile.txt”. É onde o nome do arquivo é definido. O conteúdo do seu anexo provavelmente será muito mais complexo, mas este exemplo tenta mantê-lo simples.
Agora que temos o contexto adequado para enviar anexos com o ponto de transmissão, vamos dar uma olhada em como fazer isso com modelos. No momento em que estou escrevendo, não há uma abstração de anexos como você encontra para transmissões embutidas. Pode-se concluir que modelos não podem ser criados com anexos. Você estaria parcialmente correto, mas há uma solução alternativa, embora você não estará mais isolado do formato RFC 5322.
Você pode realizar anexos em modelos codificando o conteúdo RFC 5322 você mesmo, o que inclui os anexos. A boa notícia é que você não perderá a capacidade de ainda usar Dados de Substituição nos seus cabeçalhos de email, HTML e partes de texto. Fique ciente que esse tipo de modelo limita as substituições aos cabeçalhos e à primeira parte HTML e à primeira parte de texto.
Limitações do Modelo RFC 5322
Limitação | Descrição |
|---|---|
Substituições restritas | Aplicam-se apenas aos cabeçalhos, primeira parte HTML e primeira parte de texto |
Manipulação manual de MIME | O desenvolvedor deve construir todos os limites de MIME e partes de anexo |
Maior manutenção | Mais difícil de atualizar, auditar e versionar |
Não amigável à abstração | Desconsidera a conveniência do sistema de modelos da SparkPost |
Aqui está um exemplo de como isso é feito.
Email RFC822
Crie seu email RFC 5322 com os dados de substituição que você deseja. Eu criei esse no meu cliente de email e enviei para mim mesmo. Assim que o recebi, copiei a fonte e substituí os campos que quero substituir 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}} <
A última parte MIME nessa mensagem que você verá é Content-Disposition: attachment; filename=myfile.txt”. É onde o nome do arquivo é definido. O conteúdo do seu anexo provavelmente será muito mais complexo, mas este exemplo tenta mantê-lo simples.
Modelo Armazenado
Uma vez que você tenha um email RFC 5322 válido, armazene-o usando a forma email_rfc822 do endpoint do template em vez de usar text e HTML campos. Aqui está um exemplo de como o conteúdo se parece para essa mensagem:
{ "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 a solicitação for concluída, o SparkPost responderá com um identificador único para seu novo template. Por exemplo xxxxxxx.
Uma vez que você tenha um email RFC 5322 válido, armazene-o usando a forma email_rfc822 do endpoint do template em vez de usar text e HTML campos. Aqui está um exemplo de como o conteúdo se parece para essa mensagem:
{ "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 a solicitação for concluída, o SparkPost responderá com um identificador único para seu novo template. Por exemplo xxxxxxx.
Uma vez que você tenha um email RFC 5322 válido, armazene-o usando a forma email_rfc822 do endpoint do template em vez de usar text e HTML campos. Aqui está um exemplo de como o conteúdo se parece para essa mensagem:
{ "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 a solicitação for concluída, o SparkPost responderá com um identificador único para seu novo template. Por exemplo xxxxxxx.
Conclusão
Agora que você vê como o SparkPost pode ser utilizado para enviar e-mails de quase qualquer complexidade, você pode dar uma olhada em “O SparkPost suporta o envio de e-mails no Apple Watch” ou conferir a sintaxe de substituição para ver como ela pode ser usada com “se então senão”, “expressões em condicionais” ou “iteração de array” diretamente dentro do seu template ou conteúdo de transmissão.
Agora que você vê como o SparkPost pode ser utilizado para enviar e-mails de quase qualquer complexidade, você pode dar uma olhada em “O SparkPost suporta o envio de e-mails no Apple Watch” ou conferir a sintaxe de substituição para ver como ela pode ser usada com “se então senão”, “expressões em condicionais” ou “iteração de array” diretamente dentro do seu template ou conteúdo de transmissão.
Agora que você vê como o SparkPost pode ser utilizado para enviar e-mails de quase qualquer complexidade, você pode dar uma olhada em “O SparkPost suporta o envio de e-mails no Apple Watch” ou conferir a sintaxe de substituição para ver como ela pode ser usada com “se então senão”, “expressões em condicionais” ou “iteração de array” diretamente dentro do seu template ou conteúdo de transmissão.



