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.

Vereenvoudigde Email Composition

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

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

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

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

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

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

Vervang Arrays van Data

Veel mensen beseffen dat de transmissie- en sjabloonendpoints van SparkPost eenvoudige content vervanging in e-mailkoppen en e-maillichamen kunnen doen. Maar velen vergeten het vermogen om voorwaardelijke inhoud of arrays van gegevens te bieden die ook kunnen worden vervangen. Je kunt ook unieke inhoud per ontvanger bieden. In dit voorbeeld sturen we een array van unieke links naar elke ontvanger.

Dit wordt bereikt door een JSON-array van gegevens te verstrekken die in het e-maillichaam zal worden gevuld. Zodra de gegevens zijn verstrekt, zal SparkPost logica in de sjabloon gebruiken om het in te vullen.

In dit voorbeeld zal SparkPost zoeken naar vervangingsgegevens genaamd “files_html” en een “voor elk” uitvoeren op elk element in de array. Het zal een rij maken met de waarde van “file” in het “files_html” element. Let op de drie haakjes rondom “loop_var.file“. Dit is omdat elk element van de array HTML bevat en we de server moeten vertellen om het te gebruiken zoals het is en het niet te ontsnappen. Het tekstgedeelte zal een eenvoudig 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"
  }
}

Expert Tip: Het is raadzaam om in je code de weergave-opmaak gescheiden te houden van de gegevens, maar het doel hier was om het voorbeeld zo eenvoudig en gemakkelijk mogelijk te volgen, daarom hebben we twee arrays gecreëerd. Eén array is voor het HTML-gedeelte en de andere voor het Tekst-gedeelte. In productiegebruik zou het gebruikelijk zijn om één set gegevens te hebben en de logica in de sjablooncode te schrijven.

Veel mensen beseffen dat de transmissie- en sjabloonendpoints van SparkPost eenvoudige content vervanging in e-mailkoppen en e-maillichamen kunnen doen. Maar velen vergeten het vermogen om voorwaardelijke inhoud of arrays van gegevens te bieden die ook kunnen worden vervangen. Je kunt ook unieke inhoud per ontvanger bieden. In dit voorbeeld sturen we een array van unieke links naar elke ontvanger.

Dit wordt bereikt door een JSON-array van gegevens te verstrekken die in het e-maillichaam zal worden gevuld. Zodra de gegevens zijn verstrekt, zal SparkPost logica in de sjabloon gebruiken om het in te vullen.

In dit voorbeeld zal SparkPost zoeken naar vervangingsgegevens genaamd “files_html” en een “voor elk” uitvoeren op elk element in de array. Het zal een rij maken met de waarde van “file” in het “files_html” element. Let op de drie haakjes rondom “loop_var.file“. Dit is omdat elk element van de array HTML bevat en we de server moeten vertellen om het te gebruiken zoals het is en het niet te ontsnappen. Het tekstgedeelte zal een eenvoudig 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"
  }
}

Expert Tip: Het is raadzaam om in je code de weergave-opmaak gescheiden te houden van de gegevens, maar het doel hier was om het voorbeeld zo eenvoudig en gemakkelijk mogelijk te volgen, daarom hebben we twee arrays gecreëerd. Eén array is voor het HTML-gedeelte en de andere voor het Tekst-gedeelte. In productiegebruik zou het gebruikelijk zijn om één set gegevens te hebben en de logica in de sjablooncode te schrijven.

Veel mensen beseffen dat de transmissie- en sjabloonendpoints van SparkPost eenvoudige content vervanging in e-mailkoppen en e-maillichamen kunnen doen. Maar velen vergeten het vermogen om voorwaardelijke inhoud of arrays van gegevens te bieden die ook kunnen worden vervangen. Je kunt ook unieke inhoud per ontvanger bieden. In dit voorbeeld sturen we een array van unieke links naar elke ontvanger.

Dit wordt bereikt door een JSON-array van gegevens te verstrekken die in het e-maillichaam zal worden gevuld. Zodra de gegevens zijn verstrekt, zal SparkPost logica in de sjabloon gebruiken om het in te vullen.

In dit voorbeeld zal SparkPost zoeken naar vervangingsgegevens genaamd “files_html” en een “voor elk” uitvoeren op elk element in de array. Het zal een rij maken met de waarde van “file” in het “files_html” element. Let op de drie haakjes rondom “loop_var.file“. Dit is omdat elk element van de array HTML bevat en we de server moeten vertellen om het te gebruiken zoals het is en het niet te ontsnappen. Het tekstgedeelte zal een eenvoudig 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"
  }
}

Expert Tip: Het is raadzaam om in je code de weergave-opmaak gescheiden te houden van de gegevens, maar het doel hier was om het voorbeeld zo eenvoudig en gemakkelijk mogelijk te volgen, daarom hebben we twee arrays gecreëerd. Eén array is voor het HTML-gedeelte en de andere voor het Tekst-gedeelte. In productiegebruik 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 zal SparkPost zorgen voor de codering van text, HTML, substitutions en het doorlopen van de bijlage-array om een correct gevormd e-mailbericht te coderen.

Best practices dicteren dat het verzenden van bijlagen het best vermeden kan worden, tenzij expliciet vereist als onderdeel van uw service.

Hieronder zijn de vereiste velden voor een bijlage:

  • type: Het MIME-type van de bijlage

  • name: De bestandsnaam van de bijlage

  • data: Base64-gecodeerde bestandsgegevens

Dit is hoe een bijlage eruitziet binnen de transmissie-inhoudsstanza:

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

U kunt ook "inline-afbeeldingen" verzenden in een transmissie. Deze zijn heel 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 zal SparkPost zorgen voor de codering van text, HTML, substitutions en het doorlopen van de bijlage-array om een correct gevormd e-mailbericht te coderen.

Best practices dicteren dat het verzenden van bijlagen het best vermeden kan worden, tenzij expliciet vereist als onderdeel van uw service.

Hieronder zijn de vereiste velden voor een bijlage:

  • type: Het MIME-type van de bijlage

  • name: De bestandsnaam van de bijlage

  • data: Base64-gecodeerde bestandsgegevens

Dit is hoe een bijlage eruitziet binnen de transmissie-inhoudsstanza:

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

U kunt ook "inline-afbeeldingen" verzenden in een transmissie. Deze zijn heel 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 zal SparkPost zorgen voor de codering van text, HTML, substitutions en het doorlopen van de bijlage-array om een correct gevormd e-mailbericht te coderen.

Best practices dicteren dat het verzenden van bijlagen het best vermeden kan worden, tenzij expliciet vereist als onderdeel van uw service.

Hieronder zijn de vereiste velden voor een bijlage:

  • type: Het MIME-type van de bijlage

  • name: De bestandsnaam van de bijlage

  • data: Base64-gecodeerde bestandsgegevens

Dit is hoe een bijlage eruitziet binnen de transmissie-inhoudsstanza:

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

U kunt ook "inline-afbeeldingen" verzenden in een transmissie. Deze zijn heel 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 met sjablonen kunnen doen. Op het moment van schrijven is er geen abstrahering voor bijlagen zoals je die voor inline transmissies vindt. Men zou kunnen concluderen dat sjablonen niet met bijlagen kunnen worden gemaakt. Je zou gedeeltelijk gelijk hebben, maar er is een oplossing, hoewel je niet langer geïsoleerd zult zijn van het RFC 5322-formaat.

Je kunt bijlagen in sjablonen realiseren door zelf de RFC 5322-inhoud te coderen, inclusief de bijlagen. Het goede nieuws is dat je de mogelijkheid om nog steeds gebruik te maken van Substitution Data in je e-mail headers, HTML en tekst delen niet verliest. Wees je ervan bewust dat dit type sjabloon de substituties beperkt tot de headers en het eerste HTML en eerste tekst deel.

Hier is een voorbeeld van hoe het wordt gedaan.

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

Je kunt bijlagen in sjablonen realiseren door zelf de RFC 5322-inhoud te coderen, inclusief de bijlagen. Het goede nieuws is dat je de mogelijkheid om nog steeds gebruik te maken van Substitution Data in je e-mail headers, HTML en tekst delen niet verliest. Wees je ervan bewust dat dit type sjabloon de substituties beperkt tot de headers en het eerste HTML en eerste tekst deel.

Hier is een voorbeeld van hoe het wordt gedaan.

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

Je kunt bijlagen in sjablonen realiseren door zelf de RFC 5322-inhoud te coderen, inclusief de bijlagen. Het goede nieuws is dat je de mogelijkheid om nog steeds gebruik te maken van Substitution Data in je e-mail headers, HTML en tekst delen niet verliest. Wees je ervan bewust dat dit type sjabloon de substituties beperkt tot de headers en het eerste HTML en eerste tekst deel.

Hier is een voorbeeld van hoe het wordt gedaan.

RFC822 Email

Creëer uw RFC 5322 e-mail met de substitutiegegevens die u wilt. Ik heb deze gemaakt in mijn mailclient en naar mezelf gestuurd. Zodra ik hem 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 is gedefinieerd. Uw bijlage-inhoud zal vrijwel zeker veel complexer zijn, maar dit voorbeeld probeert het eenvoudig te houden.

Creëer uw RFC 5322 e-mail met de substitutiegegevens die u wilt. Ik heb deze gemaakt in mijn mailclient en naar mezelf gestuurd. Zodra ik hem 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 is gedefinieerd. Uw bijlage-inhoud zal vrijwel zeker veel complexer zijn, maar dit voorbeeld probeert het eenvoudig te houden.

Creëer uw RFC 5322 e-mail met de substitutiegegevens die u wilt. Ik heb deze gemaakt in mijn mailclient en naar mezelf gestuurd. Zodra ik hem 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 is gedefinieerd. Uw bijlage-inhoud zal vrijwel zeker veel complexer zijn, maar dit voorbeeld probeert het eenvoudig te houden.

Stored Template

Zodra je een geldige RFC 5322 e-mail hebt, sla deze op met behulp van het email_rfc822 formulier van het template-endpoint in plaats van de tekst en HTML velden te gebruiken. 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 is voltooid, zal SparkPost reageren met een unieke identifier voor jouw nieuwe template. Bijvoorbeeld xxxxxxx.

Zodra je een geldige RFC 5322 e-mail hebt, sla deze op met behulp van het email_rfc822 formulier van het template-endpoint in plaats van de tekst en HTML velden te gebruiken. 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 is voltooid, zal SparkPost reageren met een unieke identifier voor jouw nieuwe template. Bijvoorbeeld xxxxxxx.

Zodra je een geldige RFC 5322 e-mail hebt, sla deze op met behulp van het email_rfc822 formulier van het template-endpoint in plaats van de tekst en HTML velden te gebruiken. 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 is voltooid, zal SparkPost reageren met een unieke identifier voor jouw nieuwe template. Bijvoorbeeld xxxxxxx.

De Template verzenden

Het goede nieuws is dat het maken 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.

Zo versturen we die template en vullen we de substitutiedata in:

{
  "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 maken 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.

Zo versturen we die template en vullen we de substitutiedata in:

{
  "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 maken 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.

Zo versturen we die template en vullen we de substitutiedata in:

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

Templates van een Mail Client's API

Als je een programmeertaal gebruikt die een bibliotheek heeft voor het opstellen van een e-mail, kun je deze gebruiken om programmatisch de sjabloon te maken of zelfs het bericht inline te verzenden. Hier is een voorbeeld van het gebruik van JavaMail via SparkPost's transmissie-eindpunt. Deze methode zou eenvoudig vertaald moeten kunnen worden naar PHP of je taal naar keuze.

/**
 * Demonstration of using JavaMail MIME message with the SparkPost RESTful interface
 */
public class App extends SparkPostBaseApp {
    public static void main(String[] args) throws Exception {
        Logger.getRootLogger().setLevel(Level.DEBUG);
        App app = new App();
        app.runApp();
    }
    private void runApp() throws Exception {
        Message message = createMultipartMessage();
        // Convert JavaMail message into a string for transmission
        String rfc822Content = getMessageAsString(message);
        // Add dynamic To and From using SparkPost substitution syntax
        rfc822Content = "To: {{address.email}}\r\nFrom: {{from}}\r\n" + rfc822Content;
        String fromAddress = getFromAddress();
        String[] recipients = getTestRecipients();
        sendEmail(fromAddress, recipients, rfc822Content);
    }
    private void sendEmail(String from, String[] recipients, String email)
            throws SparkPostException, IOException {
        Client sparkpostClient = newConfiguredClient();
        TransmissionWithRecipientArray transmission = new TransmissionWithRecipientArray();
        // Populate Recipients
        List<RecipientAttributes> recipientArray = new ArrayList<>();
        for (String recipient : recipients) {
            RecipientAttributes recipientAttribs = new RecipientAttributes();
            recipientAttribs.setAddress(new AddressAttributes(recipient));
            recipientArray.add(recipientAttribs);
        }
        transmission.setRecipientArray(recipientArray);
        transmission.setReturnPath(from);
        // Populate Substitution Data
        Map<String, String> substitutionData = new HashMap<>();
        substitutionData.put("from", from);
        substitutionData.put("name", "Your Name Here");
        transmission.setSubstitutionData(substitutionData);
        // Populate Email Body with RFC822 MIME
        TemplateContentAttributes contentAttributes = new TemplateContentAttributes();
        contentAttributes.setEmailRFC822(email);
        transmission.setContentAttributes(contentAttributes);
        // Send Email
        RestConnection connection = new RestConnection(sparkpostClient, getEndPoint());
        Response response = ResourceTransmissions.create(connection, 0, transmission);
        if (response.getResponseCode() == 200) {
            System.out.println("✅ Transmission Response: " + response);
        } else {
            System.err.println("❌ TRANSMISSION ERROR: " + response);
        }
    }
    /**
     * Builds an email with text, HTML, and attachment parts
     */
    private Message createMultipartMessage() throws MessagingException {
        Properties props = new Properties();
        props.put("mail.smtp.host", "none"); // Required for JavaMail to work
        Session session = Session.getDefaultInstance(props, null);
        Message message = new MimeMessage(session);
        message.setSubject("A multipart MIME message demo");
        // Main multipart container
        Multipart multiPart = new MimeMultipart("mixed");
        // Sub multipart for text + HTML
        MimeMultipart altPart = new MimeMultipart("alternative");
        // Text part
        MimeBodyPart textPart = new MimeBodyPart();
        textPart.setText("{{name}},\r\nplain text content", "utf-8");
        // HTML part
        MimeBodyPart htmlPart = new MimeBodyPart();
        htmlPart.setContent("<b>{{name}},<br><br>Our HTML content</b>", "text/html; charset=utf-8");
        // Add text and HTML to the alternative container
        altPart.addBodyPart(textPart);
        altPart.addBodyPart(htmlPart);
        // Wrap alternative part in a MimeBodyPart so it can be added to mixed container
        MimeBodyPart altBodyPart = new MimeBodyPart();
        altBodyPart.setContent(altPart);
        // Add alternative section to mixed container
        multiPart.addBodyPart(altBodyPart);
        // Add attachment
        MimeBodyPart attachmentPart = new MimeBodyPart();
        String filename = "java_SparkPost_background.pdf";
        DataSource source = new FileDataSource(filename);
        attachmentPart.setDataHandler(new DataHandler(source));
        attachmentPart.setFileName(filename);
        multiPart.addBodyPart(attachmentPart);
        // Set full content
        message.setContent(multiPart);
        return message;
    }
    /**
     * Converts a JavaMail message into an RFC822 string
     */
    private String getMessageAsString(Message msg) throws IOException, MessagingException {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        try {
            msg.writeTo(out);
            return out.toString("UTF-8");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("UTF-8 not found! " + e.getMessage());
        } finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

Als je een programmeertaal gebruikt die een bibliotheek heeft voor het opstellen van een e-mail, kun je deze gebruiken om programmatisch de sjabloon te maken of zelfs het bericht inline te verzenden. Hier is een voorbeeld van het gebruik van JavaMail via SparkPost's transmissie-eindpunt. Deze methode zou eenvoudig vertaald moeten kunnen worden naar PHP of je taal naar keuze.

/**
 * Demonstration of using JavaMail MIME message with the SparkPost RESTful interface
 */
public class App extends SparkPostBaseApp {
    public static void main(String[] args) throws Exception {
        Logger.getRootLogger().setLevel(Level.DEBUG);
        App app = new App();
        app.runApp();
    }
    private void runApp() throws Exception {
        Message message = createMultipartMessage();
        // Convert JavaMail message into a string for transmission
        String rfc822Content = getMessageAsString(message);
        // Add dynamic To and From using SparkPost substitution syntax
        rfc822Content = "To: {{address.email}}\r\nFrom: {{from}}\r\n" + rfc822Content;
        String fromAddress = getFromAddress();
        String[] recipients = getTestRecipients();
        sendEmail(fromAddress, recipients, rfc822Content);
    }
    private void sendEmail(String from, String[] recipients, String email)
            throws SparkPostException, IOException {
        Client sparkpostClient = newConfiguredClient();
        TransmissionWithRecipientArray transmission = new TransmissionWithRecipientArray();
        // Populate Recipients
        List<RecipientAttributes> recipientArray = new ArrayList<>();
        for (String recipient : recipients) {
            RecipientAttributes recipientAttribs = new RecipientAttributes();
            recipientAttribs.setAddress(new AddressAttributes(recipient));
            recipientArray.add(recipientAttribs);
        }
        transmission.setRecipientArray(recipientArray);
        transmission.setReturnPath(from);
        // Populate Substitution Data
        Map<String, String> substitutionData = new HashMap<>();
        substitutionData.put("from", from);
        substitutionData.put("name", "Your Name Here");
        transmission.setSubstitutionData(substitutionData);
        // Populate Email Body with RFC822 MIME
        TemplateContentAttributes contentAttributes = new TemplateContentAttributes();
        contentAttributes.setEmailRFC822(email);
        transmission.setContentAttributes(contentAttributes);
        // Send Email
        RestConnection connection = new RestConnection(sparkpostClient, getEndPoint());
        Response response = ResourceTransmissions.create(connection, 0, transmission);
        if (response.getResponseCode() == 200) {
            System.out.println("✅ Transmission Response: " + response);
        } else {
            System.err.println("❌ TRANSMISSION ERROR: " + response);
        }
    }
    /**
     * Builds an email with text, HTML, and attachment parts
     */
    private Message createMultipartMessage() throws MessagingException {
        Properties props = new Properties();
        props.put("mail.smtp.host", "none"); // Required for JavaMail to work
        Session session = Session.getDefaultInstance(props, null);
        Message message = new MimeMessage(session);
        message.setSubject("A multipart MIME message demo");
        // Main multipart container
        Multipart multiPart = new MimeMultipart("mixed");
        // Sub multipart for text + HTML
        MimeMultipart altPart = new MimeMultipart("alternative");
        // Text part
        MimeBodyPart textPart = new MimeBodyPart();
        textPart.setText("{{name}},\r\nplain text content", "utf-8");
        // HTML part
        MimeBodyPart htmlPart = new MimeBodyPart();
        htmlPart.setContent("<b>{{name}},<br><br>Our HTML content</b>", "text/html; charset=utf-8");
        // Add text and HTML to the alternative container
        altPart.addBodyPart(textPart);
        altPart.addBodyPart(htmlPart);
        // Wrap alternative part in a MimeBodyPart so it can be added to mixed container
        MimeBodyPart altBodyPart = new MimeBodyPart();
        altBodyPart.setContent(altPart);
        // Add alternative section to mixed container
        multiPart.addBodyPart(altBodyPart);
        // Add attachment
        MimeBodyPart attachmentPart = new MimeBodyPart();
        String filename = "java_SparkPost_background.pdf";
        DataSource source = new FileDataSource(filename);
        attachmentPart.setDataHandler(new DataHandler(source));
        attachmentPart.setFileName(filename);
        multiPart.addBodyPart(attachmentPart);
        // Set full content
        message.setContent(multiPart);
        return message;
    }
    /**
     * Converts a JavaMail message into an RFC822 string
     */
    private String getMessageAsString(Message msg) throws IOException, MessagingException {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        try {
            msg.writeTo(out);
            return out.toString("UTF-8");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("UTF-8 not found! " + e.getMessage());
        } finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

Als je een programmeertaal gebruikt die een bibliotheek heeft voor het opstellen van een e-mail, kun je deze gebruiken om programmatisch de sjabloon te maken of zelfs het bericht inline te verzenden. Hier is een voorbeeld van het gebruik van JavaMail via SparkPost's transmissie-eindpunt. Deze methode zou eenvoudig vertaald moeten kunnen worden naar PHP of je taal naar keuze.

/**
 * Demonstration of using JavaMail MIME message with the SparkPost RESTful interface
 */
public class App extends SparkPostBaseApp {
    public static void main(String[] args) throws Exception {
        Logger.getRootLogger().setLevel(Level.DEBUG);
        App app = new App();
        app.runApp();
    }
    private void runApp() throws Exception {
        Message message = createMultipartMessage();
        // Convert JavaMail message into a string for transmission
        String rfc822Content = getMessageAsString(message);
        // Add dynamic To and From using SparkPost substitution syntax
        rfc822Content = "To: {{address.email}}\r\nFrom: {{from}}\r\n" + rfc822Content;
        String fromAddress = getFromAddress();
        String[] recipients = getTestRecipients();
        sendEmail(fromAddress, recipients, rfc822Content);
    }
    private void sendEmail(String from, String[] recipients, String email)
            throws SparkPostException, IOException {
        Client sparkpostClient = newConfiguredClient();
        TransmissionWithRecipientArray transmission = new TransmissionWithRecipientArray();
        // Populate Recipients
        List<RecipientAttributes> recipientArray = new ArrayList<>();
        for (String recipient : recipients) {
            RecipientAttributes recipientAttribs = new RecipientAttributes();
            recipientAttribs.setAddress(new AddressAttributes(recipient));
            recipientArray.add(recipientAttribs);
        }
        transmission.setRecipientArray(recipientArray);
        transmission.setReturnPath(from);
        // Populate Substitution Data
        Map<String, String> substitutionData = new HashMap<>();
        substitutionData.put("from", from);
        substitutionData.put("name", "Your Name Here");
        transmission.setSubstitutionData(substitutionData);
        // Populate Email Body with RFC822 MIME
        TemplateContentAttributes contentAttributes = new TemplateContentAttributes();
        contentAttributes.setEmailRFC822(email);
        transmission.setContentAttributes(contentAttributes);
        // Send Email
        RestConnection connection = new RestConnection(sparkpostClient, getEndPoint());
        Response response = ResourceTransmissions.create(connection, 0, transmission);
        if (response.getResponseCode() == 200) {
            System.out.println("✅ Transmission Response: " + response);
        } else {
            System.err.println("❌ TRANSMISSION ERROR: " + response);
        }
    }
    /**
     * Builds an email with text, HTML, and attachment parts
     */
    private Message createMultipartMessage() throws MessagingException {
        Properties props = new Properties();
        props.put("mail.smtp.host", "none"); // Required for JavaMail to work
        Session session = Session.getDefaultInstance(props, null);
        Message message = new MimeMessage(session);
        message.setSubject("A multipart MIME message demo");
        // Main multipart container
        Multipart multiPart = new MimeMultipart("mixed");
        // Sub multipart for text + HTML
        MimeMultipart altPart = new MimeMultipart("alternative");
        // Text part
        MimeBodyPart textPart = new MimeBodyPart();
        textPart.setText("{{name}},\r\nplain text content", "utf-8");
        // HTML part
        MimeBodyPart htmlPart = new MimeBodyPart();
        htmlPart.setContent("<b>{{name}},<br><br>Our HTML content</b>", "text/html; charset=utf-8");
        // Add text and HTML to the alternative container
        altPart.addBodyPart(textPart);
        altPart.addBodyPart(htmlPart);
        // Wrap alternative part in a MimeBodyPart so it can be added to mixed container
        MimeBodyPart altBodyPart = new MimeBodyPart();
        altBodyPart.setContent(altPart);
        // Add alternative section to mixed container
        multiPart.addBodyPart(altBodyPart);
        // Add attachment
        MimeBodyPart attachmentPart = new MimeBodyPart();
        String filename = "java_SparkPost_background.pdf";
        DataSource source = new FileDataSource(filename);
        attachmentPart.setDataHandler(new DataHandler(source));
        attachmentPart.setFileName(filename);
        multiPart.addBodyPart(attachmentPart);
        // Set full content
        message.setContent(multiPart);
        return message;
    }
    /**
     * Converts a JavaMail message into an RFC822 string
     */
    private String getMessageAsString(Message msg) throws IOException, MessagingException {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        try {
            msg.writeTo(out);
            return out.toString("UTF-8");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("UTF-8 not found! " + e.getMessage());
        } finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

Conclusie

Nu je ziet hoe SparkPost kan worden gebruikt om e-mails van vrijwel elke complexiteit te verzenden, wil je misschien een kijkje nemen bij “SparkPost Supports Sending Email on Apple Watch” of de substitutiesyntaxis bekijken om te zien hoe deze kan worden gebruikt met “if then else”, “expressions in conditionals” of “array Iteration” direct in je sjabloon of transmissie-inhoud.

Nu je ziet hoe SparkPost kan worden gebruikt om e-mails van vrijwel elke complexiteit te verzenden, wil je misschien een kijkje nemen bij “SparkPost Supports Sending Email on Apple Watch” of de substitutiesyntaxis bekijken om te zien hoe deze kan worden gebruikt met “if then else”, “expressions in conditionals” of “array Iteration” direct in je sjabloon of transmissie-inhoud.

Nu je ziet hoe SparkPost kan worden gebruikt om e-mails van vrijwel elke complexiteit te verzenden, wil je misschien een kijkje nemen bij “SparkPost Supports Sending Email on Apple Watch” of de substitutiesyntaxis bekijken om te zien hoe deze kan worden gebruikt met “if then else”, “expressions in conditionals” of “array Iteration” direct in je 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.