Geavanceerde E-mailsjablonen

Bird

25 mrt 2016

E-mail

1 min read

Geavanceerde E-mailsjablonen

Belangrijkste punten

    • SparkPost-sjablonen ondersteunen eenvoudige en geavanceerde e-mailcompositie, inclusief HTML, tekst, voorwaardelijke logica, lussen en per ontvanger dynamische gegevens via substitutievariabelen.

    • Arrays kunnen worden doorgegeven in substitutiedata, waardoor u door items kunt itereren (bijv. lijsten van bestanden, recente activiteiten, aangepaste tabelrijen) om gepersonaliseerde secties voor elke ontvanger te genereren.

    • Drievoudige krullige haken {{{ }}} stellen u in staat om ruwe, niet-gesaniteerde HTML in te voegen, wat essentieel is wanneer uw substitutiedata al opmaak bevat.

    • Bijlagen kunnen eenvoudig worden verzonden bij gebruik van het transmissie-eindpunt (content.attachments), dat MIME-grenzen en codering voor u abstracteert.

    • Inline afbeeldingen werken vergelijkbaar met bijlagen maar worden in de body weergegeven met behulp van cid:-referenties.

    • Sjablonen zelf ondersteunen niet native bijlagen, maar u kunt ze wel opnemen door een volledige RFC 5322 e-mail met MIME-delen op te stellen en deze op te slaan als een email_rfc822-sjabloon.

    • Bij het bouwen van ruwe RFC 5322-sjablonen werken substituties nog steeds — maar alleen in de headers en de eerste HTML- en tekst MIME-delen.

    • Het gebruik van de mailclient van uw programmeertaal (bijv. JavaMail) biedt een andere weg: genereer volledige MIME-e-mails programmatisch en verzend deze via de SparkPost transmissions API.

    • Voor onderhoudbaarheid, houd opmaak en gegevens zoveel mogelijk gescheiden, vooral bij het maken van sjablonen die lussen of meerdere MIME-secties bevatten.

    • Geavanceerde sjabloonfuncties (conditionals, expressies, array-iteratie) stellen ontwikkelaars in staat om geavanceerde, gepersonaliseerde e-mails te bouwen zonder hele sjablonen per gebruiksgeval opnieuw te schrijven.

Q&A Hoogtepunten

  • Kunnen SparkPost templates omgaan met loops en arrays?

    Ja. Templates kunnen itereren over arrays met behulp van for each constructies. Dit maakt dynamische tabellen, lijsten, of herhalende HTML-blokken voor elke ontvanger mogelijk.

  • Waar worden triple curly braces voor gebruikt?

    {{{ variable }}} voegt ruwe HTML in zonder te ontsnappen. Het is vereist wanneer uw vervangingsgegevens al HTML-opmaak bevatten.

  • Kan ik bijlagen versturen met templates?

    Niet rechtstreeks via sjabloonvelden — maar je kunt dit doen door een email_rfc822 sjabloon op te slaan dat MIME-bijlageonderdelen bevat.

  • Werkt vervanging nog steeds in RFC 5322-sjablonen?

    Ja, maar alleen binnen de headers en de eerste HTML + tekst MIME-delen.

  • Wanneer moet ik de transmission endpoint gebruiken in plaats van templates?

    Bij het verzenden van dynamische bijlagen, inline afbeeldingen, of wanneer je SparkPost nodig hebt om MIME-afhandeling automatisch te abstraheren.

  • Is het beter om weergavelogica te embedden of apart te houden?

    De beste praktijk is om je weergaveopmaak en data gescheiden te houden. Gebruik sjablonen voor presentatie en geef schone, gestructureerde vervangingsgegevens door.

  • Kan I een volledige MIME e-mail genereren met een programmeerbibliotheek?

    Ja. Bibliotheken zoals JavaMail stellen je in staat om RFC 5322-berichten programmatisch te construeren en ze te verzenden via SparkPost’s transmission API.

  • Worden geavanceerde templatefuncties veel gebruikt?

    Opmerkelijk weinig ontwikkelaars gebruiken ze, maar ze ontgrendelen krachtige personalisatie: lussen, conditionals, inline logica en aangepaste MIME-structuren.

  • Waarom zou ik ooit RFC 5322 templates nodig hebben?

    Alleen bij het verzenden van complexe e-mails met meerdere onderdelen (bijlagen, aangepaste MIME-types) die SparkPost’s standaard template-abstractie niet ondersteunt.

Dit bericht is gericht aan de ontwikkelaar die het meeste uit de SparkPost's emailtemplate mogelijkheden wil halen. Er wordt aangenomen dat je vertrouwd bent met het lezen van JSON-inhoud en het volgen van de basisprogrammeerflow. Termen die misschien nieuw voor je zijn worden geïntroduceerd zoals RFC 5322, waarbij de tekst gelinkt is naar de bronreferentie.

Met dat uit de weg, laten we er meteen induiken.

SparkPost’s template en transmissiemogelijkheden maken het verzenden van e-mails eenvoudig. Die mogelijkheden bieden een abstractie voor tekst en HTML-inhoud, wat betekent dat er meestal geen noodzaak is om direct de ruwe e-mailindeling te coderen, die gedefinieerd is in RFC 5322, voorheen bekend als (RFC 822). Maar soms wil je misschien meer complexe berichten maken die andere Multipurpose Internet Mail Extensions (MIME)-onderdelen bevatten die niet direct toegankelijk zijn via de RESTful-interface van SparkPost.

Dit bericht is gericht aan de ontwikkelaar die het meeste uit de SparkPost's emailtemplate mogelijkheden wil halen. Er wordt aangenomen dat je vertrouwd bent met het lezen van JSON-inhoud en het volgen van de basisprogrammeerflow. Termen die misschien nieuw voor je zijn worden geïntroduceerd zoals RFC 5322, waarbij de tekst gelinkt is naar de bronreferentie.

Met dat uit de weg, laten we er meteen induiken.

SparkPost’s template en transmissiemogelijkheden maken het verzenden van e-mails eenvoudig. Die mogelijkheden bieden een abstractie voor tekst en HTML-inhoud, wat betekent dat er meestal geen noodzaak is om direct de ruwe e-mailindeling te coderen, die gedefinieerd is in RFC 5322, voorheen bekend als (RFC 822). Maar soms wil je misschien meer complexe berichten maken die andere Multipurpose Internet Mail Extensions (MIME)-onderdelen bevatten die niet direct toegankelijk zijn via de RESTful-interface van SparkPost.

Dit bericht is gericht aan de ontwikkelaar die het meeste uit de SparkPost's emailtemplate mogelijkheden wil halen. Er wordt aangenomen dat je vertrouwd bent met het lezen van JSON-inhoud en het volgen van de basisprogrammeerflow. Termen die misschien nieuw voor je zijn worden geïntroduceerd zoals RFC 5322, waarbij de tekst gelinkt is naar de bronreferentie.

Met dat uit de weg, laten we er meteen induiken.

SparkPost’s template en transmissiemogelijkheden maken het verzenden van e-mails eenvoudig. Die mogelijkheden bieden een abstractie voor tekst en HTML-inhoud, wat betekent dat er meestal geen noodzaak is om direct de ruwe e-mailindeling te coderen, die gedefinieerd is in RFC 5322, voorheen bekend als (RFC 822). Maar soms wil je misschien meer complexe berichten maken die andere Multipurpose Internet Mail Extensions (MIME)-onderdelen bevatten die niet direct toegankelijk zijn via de RESTful-interface van SparkPost.

De Template verzenden

Het goede nieuws is dat het aanmaken van de RFC 5322-inhoud het moeilijke deel was. Vanaf hier is het verzenden van die template met SparkPost precies hetzelfde als het verzenden van elke andere template.

Dit is hoe we die template verzenden en de substitutiegegevens invullen:

{
  "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
  }
}

Het goede nieuws is dat het aanmaken van de RFC 5322-inhoud het moeilijke deel was. Vanaf hier is het verzenden van die template met SparkPost precies hetzelfde als het verzenden van elke andere template.

Dit is hoe we die template verzenden en de substitutiegegevens invullen:

{
  "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
  }
}

Het goede nieuws is dat het aanmaken van de RFC 5322-inhoud het moeilijke deel was. Vanaf hier is het verzenden van die template met SparkPost precies hetzelfde als het verzenden van elke andere template.

Dit is hoe we die template verzenden en de substitutiegegevens invullen:

{
  "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
  }
}

Vereenvoudigde Email Composition

Eerst bekijken we een scenario op een zonnige dag voor het versturen van een e-mail. Gebruik het transmission endpoint om de text en HTML inhoud te leveren. Achter de schermen zorgt SparkPost voor het componeren van een geldige RFC 5322 e-mail. SparkPost zal substitutievariabelen uit substitution_data in de tekst- en HTML-inhoud invoegen. Dit is een krachtige manier om aangepaste inhoud voor elke ontvanger in een gemeenschappelijk sjabloon te genereren.

Hier is een voorbeeld transmission met HTML- en tekstinhoud met 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>"
  }
}


Overzicht van substitutie mogelijkheden

Capaciteit

Beschrijving

Basis variabele substitutie

Voegt enkele dynamische waarden in tekst- of HTML-inhoud in

Conditionele logica

Rendeert verschillende inhoud gebaseerd op evaluatie van booleaanse of expressies

Array-iteratie

Loopt door arrays (bijv., lijsten van bestanden) om herhaalde inhoud te genereren

Ruwe HTML-insertie ({{{ }}})

Staat ongeëscapete HTML toe voor situaties waarin opmaak uit de gegevensbron komt

Per ontvanger personalisatie

Ondersteunt volledig unieke inhoud voor elke ontvanger


Eerst bekijken we een scenario op een zonnige dag voor het versturen van een e-mail. Gebruik het transmission endpoint om de text en HTML inhoud te leveren. Achter de schermen zorgt SparkPost voor het componeren van een geldige RFC 5322 e-mail. SparkPost zal substitutievariabelen uit substitution_data in de tekst- en HTML-inhoud invoegen. Dit is een krachtige manier om aangepaste inhoud voor elke ontvanger in een gemeenschappelijk sjabloon te genereren.

Hier is een voorbeeld transmission met HTML- en tekstinhoud met 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>"
  }
}


Overzicht van substitutie mogelijkheden

Capaciteit

Beschrijving

Basis variabele substitutie

Voegt enkele dynamische waarden in tekst- of HTML-inhoud in

Conditionele logica

Rendeert verschillende inhoud gebaseerd op evaluatie van booleaanse of expressies

Array-iteratie

Loopt door arrays (bijv., lijsten van bestanden) om herhaalde inhoud te genereren

Ruwe HTML-insertie ({{{ }}})

Staat ongeëscapete HTML toe voor situaties waarin opmaak uit de gegevensbron komt

Per ontvanger personalisatie

Ondersteunt volledig unieke inhoud voor elke ontvanger


Eerst bekijken we een scenario op een zonnige dag voor het versturen van een e-mail. Gebruik het transmission endpoint om de text en HTML inhoud te leveren. Achter de schermen zorgt SparkPost voor het componeren van een geldige RFC 5322 e-mail. SparkPost zal substitutievariabelen uit substitution_data in de tekst- en HTML-inhoud invoegen. Dit is een krachtige manier om aangepaste inhoud voor elke ontvanger in een gemeenschappelijk sjabloon te genereren.

Hier is een voorbeeld transmission met HTML- en tekstinhoud met 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>"
  }
}


Overzicht van substitutie mogelijkheden

Capaciteit

Beschrijving

Basis variabele substitutie

Voegt enkele dynamische waarden in tekst- of HTML-inhoud in

Conditionele logica

Rendeert verschillende inhoud gebaseerd op evaluatie van booleaanse of expressies

Array-iteratie

Loopt door arrays (bijv., lijsten van bestanden) om herhaalde inhoud te genereren

Ruwe HTML-insertie ({{{ }}})

Staat ongeëscapete HTML toe voor situaties waarin opmaak uit de gegevensbron komt

Per ontvanger personalisatie

Ondersteunt volledig unieke inhoud voor elke ontvanger


Vervang Arrays van Data

Veel mensen realiseren zich dat SparkPost's transmissie- en sjabloonendpunten eenvoudige inhoudvervanging kunnen doen in e-mailheaders en e-maillichamen. Maar velen overzien het vermogen om ook voorwaardelijke inhoud of gegevensarrays te leveren die kunnen worden vervangen. U kunt ook unieke inhoud per ontvanger leveren. In dit voorbeeld sturen we een array van unieke links naar elke ontvanger.

Dit wordt bereikt door een JSON-array met gegevens te leveren die in het e-maillijf zullen worden geplaatst. Zodra de gegevens zijn geleverd, zal SparkPost logica in de sjabloon gebruiken om deze in te vullen.

In dit voorbeeld zal SparkPost zoeken naar vervangingsgegevens genaamd “files_html” en een “voor elk” op elk element in de array uitvoeren. Het zal een rij maken met de waarde van “file” in het “files_html” element. Let op de driedubbele accolades rond “loop_var.file“. Dit is omdat elk element van de array HTML bevat en we de server moeten vertellen het te gebruiken zoals het is en het niet te ontsnappen. Het tekstgedeelte zal een eenvoudige tekstlabel en de URL naar het bestand zijn.

<table>
  {{each files_html}}
    <tr>
      <td>{{{loop_var.file}}}</td>
    </tr>
  {{ end }}
</table>


Hier is het voltooide werkende voorbeeld:

{
  "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"
  }
}

Pro Tip: In uw code is het aan te raden om de weergaveopmaak gescheiden te houden van de gegevens, maar het doel hier was om het voorbeeld zo eenvoudig en gemakkelijk mogelijk te maken, dus hebben we twee arrays gemaakt. Eén array is voor het HTML-gedeelte en de andere is voor het Tekst-gedeelte. In de productieomgeving zou het gebruikelijk zijn om één set gegevens te hebben en de logica in de sjablooncode te schrijven.

Veel mensen realiseren zich dat SparkPost's transmissie- en sjabloonendpunten eenvoudige inhoudvervanging kunnen doen in e-mailheaders en e-maillichamen. Maar velen overzien het vermogen om ook voorwaardelijke inhoud of gegevensarrays te leveren die kunnen worden vervangen. U kunt ook unieke inhoud per ontvanger leveren. In dit voorbeeld sturen we een array van unieke links naar elke ontvanger.

Dit wordt bereikt door een JSON-array met gegevens te leveren die in het e-maillijf zullen worden geplaatst. Zodra de gegevens zijn geleverd, zal SparkPost logica in de sjabloon gebruiken om deze in te vullen.

In dit voorbeeld zal SparkPost zoeken naar vervangingsgegevens genaamd “files_html” en een “voor elk” op elk element in de array uitvoeren. Het zal een rij maken met de waarde van “file” in het “files_html” element. Let op de driedubbele accolades rond “loop_var.file“. Dit is omdat elk element van de array HTML bevat en we de server moeten vertellen het te gebruiken zoals het is en het niet te ontsnappen. Het tekstgedeelte zal een eenvoudige tekstlabel en de URL naar het bestand zijn.

<table>
  {{each files_html}}
    <tr>
      <td>{{{loop_var.file}}}</td>
    </tr>
  {{ end }}
</table>


Hier is het voltooide werkende voorbeeld:

{
  "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"
  }
}

Pro Tip: In uw code is het aan te raden om de weergaveopmaak gescheiden te houden van de gegevens, maar het doel hier was om het voorbeeld zo eenvoudig en gemakkelijk mogelijk te maken, dus hebben we twee arrays gemaakt. Eén array is voor het HTML-gedeelte en de andere is voor het Tekst-gedeelte. In de productieomgeving zou het gebruikelijk zijn om één set gegevens te hebben en de logica in de sjablooncode te schrijven.

Veel mensen realiseren zich dat SparkPost's transmissie- en sjabloonendpunten eenvoudige inhoudvervanging kunnen doen in e-mailheaders en e-maillichamen. Maar velen overzien het vermogen om ook voorwaardelijke inhoud of gegevensarrays te leveren die kunnen worden vervangen. U kunt ook unieke inhoud per ontvanger leveren. In dit voorbeeld sturen we een array van unieke links naar elke ontvanger.

Dit wordt bereikt door een JSON-array met gegevens te leveren die in het e-maillijf zullen worden geplaatst. Zodra de gegevens zijn geleverd, zal SparkPost logica in de sjabloon gebruiken om deze in te vullen.

In dit voorbeeld zal SparkPost zoeken naar vervangingsgegevens genaamd “files_html” en een “voor elk” op elk element in de array uitvoeren. Het zal een rij maken met de waarde van “file” in het “files_html” element. Let op de driedubbele accolades rond “loop_var.file“. Dit is omdat elk element van de array HTML bevat en we de server moeten vertellen het te gebruiken zoals het is en het niet te ontsnappen. Het tekstgedeelte zal een eenvoudige tekstlabel en de URL naar het bestand zijn.

<table>
  {{each files_html}}
    <tr>
      <td>{{{loop_var.file}}}</td>
    </tr>
  {{ end }}
</table>


Hier is het voltooide werkende voorbeeld:

{
  "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"
  }
}

Pro Tip: In uw code is het aan te raden om de weergaveopmaak gescheiden te houden van de gegevens, maar het doel hier was om het voorbeeld zo eenvoudig en gemakkelijk mogelijk te maken, dus hebben we twee arrays gemaakt. Eén array is voor het HTML-gedeelte en de andere is voor het Tekst-gedeelte. In de productieomgeving zou het gebruikelijk zijn om één set gegevens te hebben en de logica in de sjablooncode te schrijven.

Bijlagen in Transmission Capabilities

Het transmissie-eindpunt biedt ook een abstractie voor het verzenden van bijlagen. Hieronder ziet u dat bijlagen worden gespecificeerd in de content.attachments array waar elk object in de array een afzonderlijk bijlage-item beschrijft. Net als voorheen zorgt SparkPost voor het encoderen van text, HTML, substitutions en het doorlopen van de bijlage-array om een correct gevormd e-mailbericht te encoderen.

Beste praktijken dicteren dat het verzenden van bijlagen het beste kan worden vermeden, tenzij expliciet vereist als onderdeel van uw service.

Hieronder staan de vereiste velden voor een bijlage:

  • type: Het MIME-type van de bijlage

  • name: De bestandsnaam van de bijlage

  • data: Base64-gecodeerde bestandsgegevens

Vereiste Velden voor Bijlagen

Veld

Betekenis

type

MIME-type van de bijlage

name

Bestandsnaam zoals het aan de ontvanger verschijnt

data

Base64-gecodeerde bestandspayload


Dit is hoe een bijlage er binnen een transmissie-contentstanza uitziet:

"content": {
  "attachments": [
    {
      "type": "audio/mp3",
      "name": "voicemail.mp3",
      "data": "TVAzIERhdGEK"
    }
  ]
}

U kunt ook "inline images" verzenden in een transmissie. Deze zijn zeer vergelijkbaar met bijlagen en worden gespecificeerd in de content.inline_images array waar elk van de inline_image objecten vergelijkbaar zijn met het hierboven getoonde bijlage-object.

Het transmissie-eindpunt biedt ook een abstractie voor het verzenden van bijlagen. Hieronder ziet u dat bijlagen worden gespecificeerd in de content.attachments array waar elk object in de array een afzonderlijk bijlage-item beschrijft. Net als voorheen zorgt SparkPost voor het encoderen van text, HTML, substitutions en het doorlopen van de bijlage-array om een correct gevormd e-mailbericht te encoderen.

Beste praktijken dicteren dat het verzenden van bijlagen het beste kan worden vermeden, tenzij expliciet vereist als onderdeel van uw service.

Hieronder staan de vereiste velden voor een bijlage:

  • type: Het MIME-type van de bijlage

  • name: De bestandsnaam van de bijlage

  • data: Base64-gecodeerde bestandsgegevens

Vereiste Velden voor Bijlagen

Veld

Betekenis

type

MIME-type van de bijlage

name

Bestandsnaam zoals het aan de ontvanger verschijnt

data

Base64-gecodeerde bestandspayload


Dit is hoe een bijlage er binnen een transmissie-contentstanza uitziet:

"content": {
  "attachments": [
    {
      "type": "audio/mp3",
      "name": "voicemail.mp3",
      "data": "TVAzIERhdGEK"
    }
  ]
}

U kunt ook "inline images" verzenden in een transmissie. Deze zijn zeer vergelijkbaar met bijlagen en worden gespecificeerd in de content.inline_images array waar elk van de inline_image objecten vergelijkbaar zijn met het hierboven getoonde bijlage-object.

Het transmissie-eindpunt biedt ook een abstractie voor het verzenden van bijlagen. Hieronder ziet u dat bijlagen worden gespecificeerd in de content.attachments array waar elk object in de array een afzonderlijk bijlage-item beschrijft. Net als voorheen zorgt SparkPost voor het encoderen van text, HTML, substitutions en het doorlopen van de bijlage-array om een correct gevormd e-mailbericht te encoderen.

Beste praktijken dicteren dat het verzenden van bijlagen het beste kan worden vermeden, tenzij expliciet vereist als onderdeel van uw service.

Hieronder staan de vereiste velden voor een bijlage:

  • type: Het MIME-type van de bijlage

  • name: De bestandsnaam van de bijlage

  • data: Base64-gecodeerde bestandsgegevens

Vereiste Velden voor Bijlagen

Veld

Betekenis

type

MIME-type van de bijlage

name

Bestandsnaam zoals het aan de ontvanger verschijnt

data

Base64-gecodeerde bestandspayload


Dit is hoe een bijlage er binnen een transmissie-contentstanza uitziet:

"content": {
  "attachments": [
    {
      "type": "audio/mp3",
      "name": "voicemail.mp3",
      "data": "TVAzIERhdGEK"
    }
  ]
}

U kunt ook "inline images" verzenden in een transmissie. Deze zijn zeer vergelijkbaar met bijlagen en worden gespecificeerd in de content.inline_images array waar elk van de inline_image objecten vergelijkbaar zijn met het hierboven getoonde bijlage-object.

Bijlagen in Templates

Nu we de juiste achtergrond hebben voor het verzenden van bijlagen met het transmissie-eindpunt, laten we eens kijken hoe we dit kunnen doen met sjablonen. Op het moment van schrijven is er geen bijlagenabstractie zoals je vindt bij inline transmissies. Men zou kunnen concluderen dat sjablonen niet kunnen worden gemaakt met bijlagen. Je zou gedeeltelijk correct zijn, maar er is een oplossing, hoewel je niet langer geïsoleerd bent van het RFC 5322-formaat.

Je kunt bijlagen in sjablonen opnemen door zelf RFC 5322-inhoud te coderen, inclusief de bijlagen. Het goede nieuws is dat je nog steeds de mogelijkheid behoudt om Substitution Data in je e-mailkoppen, HTML en tekst delen te gebruiken. Wees je ervan bewust dat dit type sjabloon de substituties beperkt tot de koppen en het eerste HTML- en eerste tekstdeel.


RFC 5322 sjabloonbeperkingen

Beperking

Beschrijving

Beperkingen voor substituties

Toepasbaar op alleen koppen, eerste HTML-deel en eerste tekstdeel

Handmatige MIME-verwerking

Ontwikkelaar moet alle MIME-grenzen en bijlagendelen construeren

Hogere onderhoudskosten

Moeilijker bij te werken, te controleren en te versieren

Niet abstractievriendelijk

Negeert het gemak van SparkPost's sjabloonsysteem


Hier is een voorbeeld van hoe het is gedaan.

RFC822 E-mail

Maak je RFC 5322 e-mail met de gewenste substitutiedata. Ik heb deze gemaakt in mijn e-mailclient en naar mezelf gestuurd. Toen ik het ontving, kopieerde ik de bron en verving de velden die ik dynamisch wilde vervangen.

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}}
<

Het laatste MIME-deel in dit bericht zult u zien Content-Disposition: attachment; filename=myfile.txt”. Dat is waar de naam van het bestand wordt gedefinieerd. Je bijlage-inhoud zal ongetwijfeld veel complexer zijn, maar dit voorbeeld probeert het eenvoudig te houden.

Nu we de juiste achtergrond hebben voor het verzenden van bijlagen met het transmissie-eindpunt, laten we eens kijken hoe we dit kunnen doen met sjablonen. Op het moment van schrijven is er geen bijlagenabstractie zoals je vindt bij inline transmissies. Men zou kunnen concluderen dat sjablonen niet kunnen worden gemaakt met bijlagen. Je zou gedeeltelijk correct zijn, maar er is een oplossing, hoewel je niet langer geïsoleerd bent van het RFC 5322-formaat.

Je kunt bijlagen in sjablonen opnemen door zelf RFC 5322-inhoud te coderen, inclusief de bijlagen. Het goede nieuws is dat je nog steeds de mogelijkheid behoudt om Substitution Data in je e-mailkoppen, HTML en tekst delen te gebruiken. Wees je ervan bewust dat dit type sjabloon de substituties beperkt tot de koppen en het eerste HTML- en eerste tekstdeel.


RFC 5322 sjabloonbeperkingen

Beperking

Beschrijving

Beperkingen voor substituties

Toepasbaar op alleen koppen, eerste HTML-deel en eerste tekstdeel

Handmatige MIME-verwerking

Ontwikkelaar moet alle MIME-grenzen en bijlagendelen construeren

Hogere onderhoudskosten

Moeilijker bij te werken, te controleren en te versieren

Niet abstractievriendelijk

Negeert het gemak van SparkPost's sjabloonsysteem


Hier is een voorbeeld van hoe het is gedaan.

RFC822 E-mail

Maak je RFC 5322 e-mail met de gewenste substitutiedata. Ik heb deze gemaakt in mijn e-mailclient en naar mezelf gestuurd. Toen ik het ontving, kopieerde ik de bron en verving de velden die ik dynamisch wilde vervangen.

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}}
<

Het laatste MIME-deel in dit bericht zult u zien Content-Disposition: attachment; filename=myfile.txt”. Dat is waar de naam van het bestand wordt gedefinieerd. Je bijlage-inhoud zal ongetwijfeld veel complexer zijn, maar dit voorbeeld probeert het eenvoudig te houden.

Nu we de juiste achtergrond hebben voor het verzenden van bijlagen met het transmissie-eindpunt, laten we eens kijken hoe we dit kunnen doen met sjablonen. Op het moment van schrijven is er geen bijlagenabstractie zoals je vindt bij inline transmissies. Men zou kunnen concluderen dat sjablonen niet kunnen worden gemaakt met bijlagen. Je zou gedeeltelijk correct zijn, maar er is een oplossing, hoewel je niet langer geïsoleerd bent van het RFC 5322-formaat.

Je kunt bijlagen in sjablonen opnemen door zelf RFC 5322-inhoud te coderen, inclusief de bijlagen. Het goede nieuws is dat je nog steeds de mogelijkheid behoudt om Substitution Data in je e-mailkoppen, HTML en tekst delen te gebruiken. Wees je ervan bewust dat dit type sjabloon de substituties beperkt tot de koppen en het eerste HTML- en eerste tekstdeel.


RFC 5322 sjabloonbeperkingen

Beperking

Beschrijving

Beperkingen voor substituties

Toepasbaar op alleen koppen, eerste HTML-deel en eerste tekstdeel

Handmatige MIME-verwerking

Ontwikkelaar moet alle MIME-grenzen en bijlagendelen construeren

Hogere onderhoudskosten

Moeilijker bij te werken, te controleren en te versieren

Niet abstractievriendelijk

Negeert het gemak van SparkPost's sjabloonsysteem


Hier is een voorbeeld van hoe het is gedaan.

RFC822 E-mail

Maak je RFC 5322 e-mail met de gewenste substitutiedata. Ik heb deze gemaakt in mijn e-mailclient en naar mezelf gestuurd. Toen ik het ontving, kopieerde ik de bron en verving de velden die ik dynamisch wilde vervangen.

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}}
<

Het laatste MIME-deel in dit bericht zult u zien Content-Disposition: attachment; filename=myfile.txt”. Dat is waar de naam van het bestand wordt gedefinieerd. Je bijlage-inhoud zal ongetwijfeld veel complexer zijn, maar dit voorbeeld probeert het eenvoudig te houden.

Stored Template

Wanneer je een geldige RFC 5322 e-mail hebt, sla deze dan op met behulp van het email_rfc822 formulier van de template endpoint in plaats van gebruik te maken van text en HTML velden. Hier is een voorbeeld van hoe de content eruit ziet voor dat bericht:

{
  "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"
}

Wanneer het verzoek voltooid is, zal SparkPost reageren met een unieke identificatie voor je nieuwe sjabloon. Bijvoorbeeld xxxxxxx.

Wanneer je een geldige RFC 5322 e-mail hebt, sla deze dan op met behulp van het email_rfc822 formulier van de template endpoint in plaats van gebruik te maken van text en HTML velden. Hier is een voorbeeld van hoe de content eruit ziet voor dat bericht:

{
  "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"
}

Wanneer het verzoek voltooid is, zal SparkPost reageren met een unieke identificatie voor je nieuwe sjabloon. Bijvoorbeeld xxxxxxx.

Wanneer je een geldige RFC 5322 e-mail hebt, sla deze dan op met behulp van het email_rfc822 formulier van de template endpoint in plaats van gebruik te maken van text en HTML velden. Hier is een voorbeeld van hoe de content eruit ziet voor dat bericht:

{
  "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"
}

Wanneer het verzoek voltooid is, zal SparkPost reageren met een unieke identificatie voor je nieuwe sjabloon. Bijvoorbeeld xxxxxxx.

Conclusie

Nu u ziet hoe SparkPost kan worden gebruikt om e-mails van bijna elke complexiteit te verzenden, wilt u misschien een kijkje nemen bij “SparkPost Supports Sending Email on Apple Watch” of een kijkje nemen bij de substitutiesyntaxis om te zien hoe dit kan worden gebruikt met “if then else”, “expressies in conditionals” of “array Iteratie” direct in uw sjabloon- of transmissie-inhoud.

Nu u ziet hoe SparkPost kan worden gebruikt om e-mails van bijna elke complexiteit te verzenden, wilt u misschien een kijkje nemen bij “SparkPost Supports Sending Email on Apple Watch” of een kijkje nemen bij de substitutiesyntaxis om te zien hoe dit kan worden gebruikt met “if then else”, “expressies in conditionals” of “array Iteratie” direct in uw sjabloon- of transmissie-inhoud.

Nu u ziet hoe SparkPost kan worden gebruikt om e-mails van bijna elke complexiteit te verzenden, wilt u misschien een kijkje nemen bij “SparkPost Supports Sending Email on Apple Watch” of een kijkje nemen bij de substitutiesyntaxis om te zien hoe dit kan worden gebruikt met “if then else”, “expressies in conditionals” of “array Iteratie” direct in uw sjabloon- of transmissie-inhoud.

Andere nieuws

Lees meer uit deze categorie

A person is standing at a desk while typing on a laptop.

Het complete AI-native platform dat met uw bedrijf meegroeit.

A person is standing at a desk while typing on a laptop.

Het complete AI-native platform dat met uw bedrijf meegroeit.