Erweiterte E-Mail-Vorlagen

Vogel

25.03.2016

E-Mail

1 min read

Erweiterte E-Mail-Vorlagen

Wichtige Erkenntnisse

    • SparkPost Vorlagen unterstützen einfache und fortgeschrittene E-Mail-Kompositionen, einschließlich HTML, Text, bedingte Logik, Schleifen und empfängerbezogene dynamische Daten durch Ersetzungsvariablen.

    • Arrays können in Ersetzungsdaten übergeben werden, sodass Sie durch Elemente schleifen können (z. B. Listen von Dateien, aktuelle Aktivitäten, benutzerdefinierte Tabelleneinträge), um personalisierte Abschnitte für jeden Empfänger zu generieren.

    • Dreifache geschweifte Klammern {{{ }}} ermöglichen es Ihnen, rohes, unescaped HTML einzufügen, was unerlässlich ist, wenn Ihre Ersetzungsdaten bereits Markup enthalten.

    • Anhänge können leicht gesendet werden, wenn Sie den Übertragungspunkt verwenden (content.attachments), der MIME-Grenzen und Kodierung für Sie abstrahiert.

    • Inline-Bilder funktionieren ähnlich wie Anhänge, werden jedoch im Hauptteil mit cid:-Referenzen gerendert.

    • Vorlagen selbst unterstützen Anhänge nicht nativ, aber Sie können sie trotzdem einfügen, indem Sie ein vollständiges RFC 5322 E-Mail mit MIME-Teilen erstellen und dieses als email_rfc822 Vorlage speichern.

    • Beim Erstellen von rohen RFC 5322 Vorlagen funktionieren Ersetzungen immer noch — jedoch nur in den Kopfzeilen und den ersten HTML- und Text-MIME-Teilen.

    • Die Verwendung des Mail-Clients Ihrer Programmiersprache (z. B. JavaMail) bietet einen weiteren Weg: vollständige MIME-E-Mails programmgesteuert generieren und über die SparkPost Transmissions-API senden.

    • Für die Wartbarkeit sollten Markup und Daten wann immer möglich getrennt gehalten werden—insbesondere beim Erstellen von Vorlagen, die Schleifen oder mehrere MIME-Abschnitte enthalten.

    • Erweiterte Vorlagenfunktionen (Bedingungen, Ausdrücke, Array-Iterationen) ermöglichen es Entwicklern, komplexe, personalisierte E-Mails zu erstellen, ohne ganze Vorlagen pro Anwendungsfall neu zu schreiben.

Q&A Highlights

  • Können SparkPost-Vorlagen Schleifen und Arrays verarbeiten?

    Ja. Vorlagen können mit for each-Konstrukten über Arrays iterieren. Dies ermöglicht dynamische Tabellen, Listen oder wiederholende HTML-Blöcke für jeden Empfänger.

  • Wofür werden dreifache geschweifte Klammern verwendet?

    {{{ variable }}} fügt rohes HTML ohne Escaping ein. Es ist erforderlich, wenn Ihre Ersatzdaten bereits HTML-Markup enthalten.

  • Kann ich Anhänge mit templates senden?

    Nicht direkt über Vorlagenfelder — aber Sie können, indem Sie eine email_rfc822-Vorlage speichern, die MIME-Anhangsteile enthält.

  • Funktioniert die Substitution weiterhin in RFC 5322-Vorlagen?

    Ja, aber nur innerhalb der Kopfzeilen und der ersten HTML + Text-MIME-Teile.

  • Wann sollte I den transmission endpoint anstelle von templates verwenden?

    Wenn Sie dynamische Anhänge, Inline-Bilder senden oder wenn Sie SparkPost benötigen, um das MIME-Handling automatisch zu abstrahieren.

  • Ist es besser, die Ansicht-Logik einzubetten oder getrennt zu halten?

    Die beste Vorgehensweise besteht darin, Ihre View-Auszeichnung und Daten getrennt zu halten. Verwenden Sie Vorlagen für die Präsentation und übergeben Sie saubere, strukturierte Ersetzungsdaten.

  • Kann I ein vollständiges MIME-Email mit einer Programmbibliothek generieren?

    Ja. Bibliotheken wie JavaMail ermöglichen es Ihnen, RFC 5322-Nachrichten programmatisch zu erstellen und über SparkPost's Transmission API zu senden.

  • Werden erweiterte Vorlagenfunktionen weit verbreitet genutzt?

    Überraschend wenige Entwickler verwenden sie, aber sie ermöglichen leistungsstarke Personalisierung: Schleifen, conditionals, inline logic, und benutzerdefinierte MIME-Strukturen.

  • Warum sollte ich jemals RFC 5322-Vorlagen benötigen?

    Nur beim Senden komplexer mehrteiliger E-Mails (Anhänge, benutzerdefinierte MIME-Typen), die von der Standardvorlagenabstraktion von SparkPost nicht unterstützt werden.

Dieser Beitrag richtet sich an den Entwickler, der das Beste aus den E-Mail-Vorlagenfunktionen von SparkPost herausholen möchte. Es wird davon ausgegangen, dass Sie mit dem Lesen von JSON-Inhalten und dem Befolgen einfacher Programmierabläufe vertraut sind. Begriffe, die Ihnen möglicherweise neu sind, wie RFC 5322, sind mit der entsprechenden Quelle verlinkt.

Nachdem das gesagt ist, legen wir direkt los.

Die Vorlagen- und Übertragungsfunktionen von SparkPost machen das Versenden von E-Mails einfach. Diese Funktionen bieten eine Abstraktion für Text und HTML-Inhalte, was bedeutet, dass es in den meisten Fällen nicht erforderlich ist, das rohe E-Mail-Format, das in RFC 5322 (ehemals bekannt als RFC 822) definiert ist, direkt zu kodieren. Aber manchmal möchten Sie möglicherweise komplexere Nachrichten erstellen, die andere Teile der Multipurpose Internet Mail Extensions (MIME) enthalten, die über die RESTful-Schnittstelle von SparkPost nicht direkt verfügbar sind.

Dieser Beitrag richtet sich an den Entwickler, der das Beste aus den E-Mail-Vorlagenfunktionen von SparkPost herausholen möchte. Es wird davon ausgegangen, dass Sie mit dem Lesen von JSON-Inhalten und dem Befolgen einfacher Programmierabläufe vertraut sind. Begriffe, die Ihnen möglicherweise neu sind, wie RFC 5322, sind mit der entsprechenden Quelle verlinkt.

Nachdem das gesagt ist, legen wir direkt los.

Die Vorlagen- und Übertragungsfunktionen von SparkPost machen das Versenden von E-Mails einfach. Diese Funktionen bieten eine Abstraktion für Text und HTML-Inhalte, was bedeutet, dass es in den meisten Fällen nicht erforderlich ist, das rohe E-Mail-Format, das in RFC 5322 (ehemals bekannt als RFC 822) definiert ist, direkt zu kodieren. Aber manchmal möchten Sie möglicherweise komplexere Nachrichten erstellen, die andere Teile der Multipurpose Internet Mail Extensions (MIME) enthalten, die über die RESTful-Schnittstelle von SparkPost nicht direkt verfügbar sind.

Dieser Beitrag richtet sich an den Entwickler, der das Beste aus den E-Mail-Vorlagenfunktionen von SparkPost herausholen möchte. Es wird davon ausgegangen, dass Sie mit dem Lesen von JSON-Inhalten und dem Befolgen einfacher Programmierabläufe vertraut sind. Begriffe, die Ihnen möglicherweise neu sind, wie RFC 5322, sind mit der entsprechenden Quelle verlinkt.

Nachdem das gesagt ist, legen wir direkt los.

Die Vorlagen- und Übertragungsfunktionen von SparkPost machen das Versenden von E-Mails einfach. Diese Funktionen bieten eine Abstraktion für Text und HTML-Inhalte, was bedeutet, dass es in den meisten Fällen nicht erforderlich ist, das rohe E-Mail-Format, das in RFC 5322 (ehemals bekannt als RFC 822) definiert ist, direkt zu kodieren. Aber manchmal möchten Sie möglicherweise komplexere Nachrichten erstellen, die andere Teile der Multipurpose Internet Mail Extensions (MIME) enthalten, die über die RESTful-Schnittstelle von SparkPost nicht direkt verfügbar sind.

Versenden der Template

Die gute Nachricht ist, dass die Erstellung des RFC 5322-Inhalts der schwierige Teil war. Von hier an ist das Senden dieser Vorlage mit SparkPost genau so, wie das Senden jeder anderen Vorlage.

So senden wir diese Vorlage und füllen die Ersetzungsdaten:

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

Die gute Nachricht ist, dass die Erstellung des RFC 5322-Inhalts der schwierige Teil war. Von hier an ist das Senden dieser Vorlage mit SparkPost genau so, wie das Senden jeder anderen Vorlage.

So senden wir diese Vorlage und füllen die Ersetzungsdaten:

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

Die gute Nachricht ist, dass die Erstellung des RFC 5322-Inhalts der schwierige Teil war. Von hier an ist das Senden dieser Vorlage mit SparkPost genau so, wie das Senden jeder anderen Vorlage.

So senden wir diese Vorlage und füllen die Ersetzungsdaten:

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

Vereinfachte Email Composition

Erstens, lassen Sie uns ein Szenario an einem sonnigen Tag für das Versenden einer E-Mail überprüfen. Verwenden Sie den transmission-Endpunkt, um den text und den HTML Inhalt bereitzustellen. Hinter den Kulissen kümmert sich SparkPost darum, eine gültige RFC 5322 E-Mail zu erstellen. SparkPost wird Ersetzungsvariablen aus substitution_data in den Text und HTML-Inhalt einfügen. Dies ist eine mächtige Methode, um benutzerdefinierte Inhalte für jeden Empfänger in einer gemeinsamen Vorlage zu generieren.

Hier ist ein Beispiel transmission mit HTML- und Textinhalt mit 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>"
  }
}


Überblick über die Ersetzungsfunktionen

Fähigkeit

Beschreibung

Einfache Variablenersetzung

Fügt einzelne dynamische Werte in Text- oder HTML-Inhalte ein

Bedingte Logik

Gibt unterschiedliche Inhalte basierend auf booleanscher oder Ausdrucksauswertung wieder

Array-Iteration

Durchläuft Arrays (z.B. Dateilisten), um wiederkehrende Inhalte zu erzeugen

Roh-HTML-Einfügung ({{{ }}})

Erlaubt unangetastetes HTML für Situationen, in denen das Markup aus der Datenquelle stammt

Personalisierung pro Empfänger

Unterstützt vollständig einzigartige Inhalte für jeden Empfänger


Erstens, lassen Sie uns ein Szenario an einem sonnigen Tag für das Versenden einer E-Mail überprüfen. Verwenden Sie den transmission-Endpunkt, um den text und den HTML Inhalt bereitzustellen. Hinter den Kulissen kümmert sich SparkPost darum, eine gültige RFC 5322 E-Mail zu erstellen. SparkPost wird Ersetzungsvariablen aus substitution_data in den Text und HTML-Inhalt einfügen. Dies ist eine mächtige Methode, um benutzerdefinierte Inhalte für jeden Empfänger in einer gemeinsamen Vorlage zu generieren.

Hier ist ein Beispiel transmission mit HTML- und Textinhalt mit 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>"
  }
}


Überblick über die Ersetzungsfunktionen

Fähigkeit

Beschreibung

Einfache Variablenersetzung

Fügt einzelne dynamische Werte in Text- oder HTML-Inhalte ein

Bedingte Logik

Gibt unterschiedliche Inhalte basierend auf booleanscher oder Ausdrucksauswertung wieder

Array-Iteration

Durchläuft Arrays (z.B. Dateilisten), um wiederkehrende Inhalte zu erzeugen

Roh-HTML-Einfügung ({{{ }}})

Erlaubt unangetastetes HTML für Situationen, in denen das Markup aus der Datenquelle stammt

Personalisierung pro Empfänger

Unterstützt vollständig einzigartige Inhalte für jeden Empfänger


Erstens, lassen Sie uns ein Szenario an einem sonnigen Tag für das Versenden einer E-Mail überprüfen. Verwenden Sie den transmission-Endpunkt, um den text und den HTML Inhalt bereitzustellen. Hinter den Kulissen kümmert sich SparkPost darum, eine gültige RFC 5322 E-Mail zu erstellen. SparkPost wird Ersetzungsvariablen aus substitution_data in den Text und HTML-Inhalt einfügen. Dies ist eine mächtige Methode, um benutzerdefinierte Inhalte für jeden Empfänger in einer gemeinsamen Vorlage zu generieren.

Hier ist ein Beispiel transmission mit HTML- und Textinhalt mit 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>"
  }
}


Überblick über die Ersetzungsfunktionen

Fähigkeit

Beschreibung

Einfache Variablenersetzung

Fügt einzelne dynamische Werte in Text- oder HTML-Inhalte ein

Bedingte Logik

Gibt unterschiedliche Inhalte basierend auf booleanscher oder Ausdrucksauswertung wieder

Array-Iteration

Durchläuft Arrays (z.B. Dateilisten), um wiederkehrende Inhalte zu erzeugen

Roh-HTML-Einfügung ({{{ }}})

Erlaubt unangetastetes HTML für Situationen, in denen das Markup aus der Datenquelle stammt

Personalisierung pro Empfänger

Unterstützt vollständig einzigartige Inhalte für jeden Empfänger


Ersetzen Sie Arrays von Daten

Viele Leute erkennen, dass SparkPost’s Übertragungs- und Vorlagenendpunkte einfache Inhalt Substitution in E-Mail-Headern und E-Mail-Körpern durchführen können. Aber viele übersehen die Fähigkeit, bedingte Inhalte oder Datenarrays bereitzustellen, die ebenfalls ersetzt werden können. Sie können auch für jeden Empfänger eindeutige Inhalte bereitstellen. In diesem Beispiel senden wir jedem Empfänger ein Array eindeutiger Links.

Dies wird erreicht, indem ein JSON-Array von Daten bereitgestellt wird, das in den E-Mail-Körper eingefügt wird. Sobald die Daten bereitgestellt werden, verwendet SparkPost Logik in der Vorlage, um sie zu füllen.

In diesem Beispiel wird SparkPost nach Ersatzdaten namens „files_html“ suchen und ein „for each“ für jedes Element im Array durchführen. Es wird eine Zeile mit dem Wert von „file“ im „files_html“-Element erstellen. Beachten Sie die dreifachen geschweiften Klammern um „loop_var.file“. Dies liegt daran, dass jedes Element des Arrays HTML enthält und wir dem Server mitteilen müssen, es unverändert zu verwenden und nicht zu escapen. Der Textteil wird ein einfaches Textetikett und die URL zur Datei sein.

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


Hier ist das vollständige Arbeitsbeispiel:

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

Tipp vom Profi: In Ihrem Code ist es ratsam, das Ansichtsmarkup von den Daten getrennt zu halten, aber das Ziel hier war es, das Beispiel so einfach und nachvollziehbar wie möglich zu halten, also haben wir zwei Arrays erstellt. Ein Array ist für den HTML-Teil und das andere für den Textteil. In der Produktion wäre es üblich, einen Datensatz zu haben und die Logik im Vorlagencode zu schreiben.

Viele Leute erkennen, dass SparkPost’s Übertragungs- und Vorlagenendpunkte einfache Inhalt Substitution in E-Mail-Headern und E-Mail-Körpern durchführen können. Aber viele übersehen die Fähigkeit, bedingte Inhalte oder Datenarrays bereitzustellen, die ebenfalls ersetzt werden können. Sie können auch für jeden Empfänger eindeutige Inhalte bereitstellen. In diesem Beispiel senden wir jedem Empfänger ein Array eindeutiger Links.

Dies wird erreicht, indem ein JSON-Array von Daten bereitgestellt wird, das in den E-Mail-Körper eingefügt wird. Sobald die Daten bereitgestellt werden, verwendet SparkPost Logik in der Vorlage, um sie zu füllen.

In diesem Beispiel wird SparkPost nach Ersatzdaten namens „files_html“ suchen und ein „for each“ für jedes Element im Array durchführen. Es wird eine Zeile mit dem Wert von „file“ im „files_html“-Element erstellen. Beachten Sie die dreifachen geschweiften Klammern um „loop_var.file“. Dies liegt daran, dass jedes Element des Arrays HTML enthält und wir dem Server mitteilen müssen, es unverändert zu verwenden und nicht zu escapen. Der Textteil wird ein einfaches Textetikett und die URL zur Datei sein.

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


Hier ist das vollständige Arbeitsbeispiel:

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

Tipp vom Profi: In Ihrem Code ist es ratsam, das Ansichtsmarkup von den Daten getrennt zu halten, aber das Ziel hier war es, das Beispiel so einfach und nachvollziehbar wie möglich zu halten, also haben wir zwei Arrays erstellt. Ein Array ist für den HTML-Teil und das andere für den Textteil. In der Produktion wäre es üblich, einen Datensatz zu haben und die Logik im Vorlagencode zu schreiben.

Viele Leute erkennen, dass SparkPost’s Übertragungs- und Vorlagenendpunkte einfache Inhalt Substitution in E-Mail-Headern und E-Mail-Körpern durchführen können. Aber viele übersehen die Fähigkeit, bedingte Inhalte oder Datenarrays bereitzustellen, die ebenfalls ersetzt werden können. Sie können auch für jeden Empfänger eindeutige Inhalte bereitstellen. In diesem Beispiel senden wir jedem Empfänger ein Array eindeutiger Links.

Dies wird erreicht, indem ein JSON-Array von Daten bereitgestellt wird, das in den E-Mail-Körper eingefügt wird. Sobald die Daten bereitgestellt werden, verwendet SparkPost Logik in der Vorlage, um sie zu füllen.

In diesem Beispiel wird SparkPost nach Ersatzdaten namens „files_html“ suchen und ein „for each“ für jedes Element im Array durchführen. Es wird eine Zeile mit dem Wert von „file“ im „files_html“-Element erstellen. Beachten Sie die dreifachen geschweiften Klammern um „loop_var.file“. Dies liegt daran, dass jedes Element des Arrays HTML enthält und wir dem Server mitteilen müssen, es unverändert zu verwenden und nicht zu escapen. Der Textteil wird ein einfaches Textetikett und die URL zur Datei sein.

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


Hier ist das vollständige Arbeitsbeispiel:

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

Tipp vom Profi: In Ihrem Code ist es ratsam, das Ansichtsmarkup von den Daten getrennt zu halten, aber das Ziel hier war es, das Beispiel so einfach und nachvollziehbar wie möglich zu halten, also haben wir zwei Arrays erstellt. Ein Array ist für den HTML-Teil und das andere für den Textteil. In der Produktion wäre es üblich, einen Datensatz zu haben und die Logik im Vorlagencode zu schreiben.

Anhänge in Transmission Capabilities

Der Übertragungsendpunkt bietet auch eine Abstraktion für das Senden von Anhängen. Unten sehen Sie, dass Anhänge im content.attachments-Array angegeben sind, wobei jedes Objekt im Array einen einzelnen Anhang beschreibt. Wie zuvor wird SparkPost die Kodierung von text, HTML, substitutions übernehmen und das Anhangsarray durchlaufen, um eine korrekt formatierte E-Mail-Nachricht zu kodieren.

Best Practices besagen, dass das Senden von Anhängen möglichst vermieden werden sollte, es sei denn, es ist ausdrücklich als Teil Ihres Dienstes erforderlich.

Unten sind die erforderlichen Felder für einen Anhang aufgeführt:

  • type: Der MIME-Typ des Anhangs

  • name: Der Dateiname des Anhangs

  • data: Base64-codierte Dateidaten

Erforderliche Felder für Anhänge

Feld

Bedeutung

type

MIME-Typ des Anhangs

name

Dateiname, wie er für den Empfänger angezeigt wird

data

Base64-codierte Dateinutzlast


So sieht ein Anhang im Übertragungsinhalts-Abschnitt aus:

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

Sie können auch „Inline-Bilder“ in einer Übertragung senden. Diese sind den Anhängen sehr ähnlich und werden im content.inline_images Array angegeben, wobei jedes der inline_image -Objekte ähnlich dem oben gezeigten Anhangsobjekt ist.

Der Übertragungsendpunkt bietet auch eine Abstraktion für das Senden von Anhängen. Unten sehen Sie, dass Anhänge im content.attachments-Array angegeben sind, wobei jedes Objekt im Array einen einzelnen Anhang beschreibt. Wie zuvor wird SparkPost die Kodierung von text, HTML, substitutions übernehmen und das Anhangsarray durchlaufen, um eine korrekt formatierte E-Mail-Nachricht zu kodieren.

Best Practices besagen, dass das Senden von Anhängen möglichst vermieden werden sollte, es sei denn, es ist ausdrücklich als Teil Ihres Dienstes erforderlich.

Unten sind die erforderlichen Felder für einen Anhang aufgeführt:

  • type: Der MIME-Typ des Anhangs

  • name: Der Dateiname des Anhangs

  • data: Base64-codierte Dateidaten

Erforderliche Felder für Anhänge

Feld

Bedeutung

type

MIME-Typ des Anhangs

name

Dateiname, wie er für den Empfänger angezeigt wird

data

Base64-codierte Dateinutzlast


So sieht ein Anhang im Übertragungsinhalts-Abschnitt aus:

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

Sie können auch „Inline-Bilder“ in einer Übertragung senden. Diese sind den Anhängen sehr ähnlich und werden im content.inline_images Array angegeben, wobei jedes der inline_image -Objekte ähnlich dem oben gezeigten Anhangsobjekt ist.

Der Übertragungsendpunkt bietet auch eine Abstraktion für das Senden von Anhängen. Unten sehen Sie, dass Anhänge im content.attachments-Array angegeben sind, wobei jedes Objekt im Array einen einzelnen Anhang beschreibt. Wie zuvor wird SparkPost die Kodierung von text, HTML, substitutions übernehmen und das Anhangsarray durchlaufen, um eine korrekt formatierte E-Mail-Nachricht zu kodieren.

Best Practices besagen, dass das Senden von Anhängen möglichst vermieden werden sollte, es sei denn, es ist ausdrücklich als Teil Ihres Dienstes erforderlich.

Unten sind die erforderlichen Felder für einen Anhang aufgeführt:

  • type: Der MIME-Typ des Anhangs

  • name: Der Dateiname des Anhangs

  • data: Base64-codierte Dateidaten

Erforderliche Felder für Anhänge

Feld

Bedeutung

type

MIME-Typ des Anhangs

name

Dateiname, wie er für den Empfänger angezeigt wird

data

Base64-codierte Dateinutzlast


So sieht ein Anhang im Übertragungsinhalts-Abschnitt aus:

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

Sie können auch „Inline-Bilder“ in einer Übertragung senden. Diese sind den Anhängen sehr ähnlich und werden im content.inline_images Array angegeben, wobei jedes der inline_image -Objekte ähnlich dem oben gezeigten Anhangsobjekt ist.

Anhänge in Templates

Jetzt, da wir den richtigen Hintergrund für das Senden von Anhängen mit dem Übertragungsendpunkt haben, werfen wir einen Blick darauf, wie man dies mit Vorlagen macht. Zum Zeitpunkt dieses Schreibens gibt es keine Anlageabstraktion, wie sie für Inline-Übertragungen gefunden wird. Man könnte schließen, dass Vorlagen nicht mit Anhängen erstellt werden können. Sie hätten teilweise recht, aber es gibt einen Umweg, obwohl Sie nicht länger isoliert vom RFC 5322-Format sind.

Sie können Anhänge in Vorlagen erreichen, indem Sie den RFC 5322-Content selbst codieren, der die Anhänge umfasst. Die gute Nachricht ist, dass Sie nicht die Fähigkeit verlieren, weiterhin Substitutionsdaten in Ihren Email-Headers, HTML und Text-Teilen zu verwenden. Beachten Sie, dass dieser Vorlagentyp die Substitutionen auf die Headers und den ersten HTML- und ersten Text-Teil beschränkt.


RFC 5322 Vorlage Einschränkungen

Einschränkung

Beschreibung

Substitutionen beschränkt

Nur auf Headers, ersten HTML-Teil und ersten Textteil anwendbar

Manuelle MIME-Behandlung

Entwickler muss alle MIME-Grenzen und Anlagenteile konstruieren

Höherer Wartungsaufwand

Schwerer zu aktualisieren, prüfen und zu versionieren

Nicht abtraktsionsfreundlich

Umgeht den Komfort des SparkPost-Vorlagensystems


Hier ist ein Beispiel, wie es gemacht wird.

RFC822 Email

Erstellen Sie Ihre RFC 5322-E-Mail mit den gewünschten Substitutionsdaten. Ich habe dieses in meinem E-Mail-Client erstellt und an mich selbst gesendet. Sobald ich es erhalten hatte, habe ich die Quelle kopiert und die Felder ersetzt, die ich dynamisch ersetzen möchte.

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

Der letzte MIME-Teil in dieser Nachricht zeigt Content-Disposition: attachment; filename=myfile.txt”. Dort wird der Name der Datei definiert. Ihr Anlageninhalt wird mit Sicherheit viel komplexer sein, aber dieses Beispiel versucht, es einfach zu halten.

Jetzt, da wir den richtigen Hintergrund für das Senden von Anhängen mit dem Übertragungsendpunkt haben, werfen wir einen Blick darauf, wie man dies mit Vorlagen macht. Zum Zeitpunkt dieses Schreibens gibt es keine Anlageabstraktion, wie sie für Inline-Übertragungen gefunden wird. Man könnte schließen, dass Vorlagen nicht mit Anhängen erstellt werden können. Sie hätten teilweise recht, aber es gibt einen Umweg, obwohl Sie nicht länger isoliert vom RFC 5322-Format sind.

Sie können Anhänge in Vorlagen erreichen, indem Sie den RFC 5322-Content selbst codieren, der die Anhänge umfasst. Die gute Nachricht ist, dass Sie nicht die Fähigkeit verlieren, weiterhin Substitutionsdaten in Ihren Email-Headers, HTML und Text-Teilen zu verwenden. Beachten Sie, dass dieser Vorlagentyp die Substitutionen auf die Headers und den ersten HTML- und ersten Text-Teil beschränkt.


RFC 5322 Vorlage Einschränkungen

Einschränkung

Beschreibung

Substitutionen beschränkt

Nur auf Headers, ersten HTML-Teil und ersten Textteil anwendbar

Manuelle MIME-Behandlung

Entwickler muss alle MIME-Grenzen und Anlagenteile konstruieren

Höherer Wartungsaufwand

Schwerer zu aktualisieren, prüfen und zu versionieren

Nicht abtraktsionsfreundlich

Umgeht den Komfort des SparkPost-Vorlagensystems


Hier ist ein Beispiel, wie es gemacht wird.

RFC822 Email

Erstellen Sie Ihre RFC 5322-E-Mail mit den gewünschten Substitutionsdaten. Ich habe dieses in meinem E-Mail-Client erstellt und an mich selbst gesendet. Sobald ich es erhalten hatte, habe ich die Quelle kopiert und die Felder ersetzt, die ich dynamisch ersetzen möchte.

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

Der letzte MIME-Teil in dieser Nachricht zeigt Content-Disposition: attachment; filename=myfile.txt”. Dort wird der Name der Datei definiert. Ihr Anlageninhalt wird mit Sicherheit viel komplexer sein, aber dieses Beispiel versucht, es einfach zu halten.

Jetzt, da wir den richtigen Hintergrund für das Senden von Anhängen mit dem Übertragungsendpunkt haben, werfen wir einen Blick darauf, wie man dies mit Vorlagen macht. Zum Zeitpunkt dieses Schreibens gibt es keine Anlageabstraktion, wie sie für Inline-Übertragungen gefunden wird. Man könnte schließen, dass Vorlagen nicht mit Anhängen erstellt werden können. Sie hätten teilweise recht, aber es gibt einen Umweg, obwohl Sie nicht länger isoliert vom RFC 5322-Format sind.

Sie können Anhänge in Vorlagen erreichen, indem Sie den RFC 5322-Content selbst codieren, der die Anhänge umfasst. Die gute Nachricht ist, dass Sie nicht die Fähigkeit verlieren, weiterhin Substitutionsdaten in Ihren Email-Headers, HTML und Text-Teilen zu verwenden. Beachten Sie, dass dieser Vorlagentyp die Substitutionen auf die Headers und den ersten HTML- und ersten Text-Teil beschränkt.


RFC 5322 Vorlage Einschränkungen

Einschränkung

Beschreibung

Substitutionen beschränkt

Nur auf Headers, ersten HTML-Teil und ersten Textteil anwendbar

Manuelle MIME-Behandlung

Entwickler muss alle MIME-Grenzen und Anlagenteile konstruieren

Höherer Wartungsaufwand

Schwerer zu aktualisieren, prüfen und zu versionieren

Nicht abtraktsionsfreundlich

Umgeht den Komfort des SparkPost-Vorlagensystems


Hier ist ein Beispiel, wie es gemacht wird.

RFC822 Email

Erstellen Sie Ihre RFC 5322-E-Mail mit den gewünschten Substitutionsdaten. Ich habe dieses in meinem E-Mail-Client erstellt und an mich selbst gesendet. Sobald ich es erhalten hatte, habe ich die Quelle kopiert und die Felder ersetzt, die ich dynamisch ersetzen möchte.

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

Der letzte MIME-Teil in dieser Nachricht zeigt Content-Disposition: attachment; filename=myfile.txt”. Dort wird der Name der Datei definiert. Ihr Anlageninhalt wird mit Sicherheit viel komplexer sein, aber dieses Beispiel versucht, es einfach zu halten.

Stored Template

Sobald Sie eine gültige RFC 5322-E-Mail haben, speichern Sie sie mit der Form email_rfc822 des Vorlagenendpunkts, anstatt die Felder text und HTML zu verwenden. Hier ist ein Beispiel dafür, wie der content für diese Nachricht aussieht:

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

Wenn die Anfrage abgeschlossen ist, antwortet SparkPost mit einem eindeutigen Identifikator für Ihre neue Vorlage. Zum Beispiel xxxxxxx.

Sobald Sie eine gültige RFC 5322-E-Mail haben, speichern Sie sie mit der Form email_rfc822 des Vorlagenendpunkts, anstatt die Felder text und HTML zu verwenden. Hier ist ein Beispiel dafür, wie der content für diese Nachricht aussieht:

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

Wenn die Anfrage abgeschlossen ist, antwortet SparkPost mit einem eindeutigen Identifikator für Ihre neue Vorlage. Zum Beispiel xxxxxxx.

Sobald Sie eine gültige RFC 5322-E-Mail haben, speichern Sie sie mit der Form email_rfc822 des Vorlagenendpunkts, anstatt die Felder text und HTML zu verwenden. Hier ist ein Beispiel dafür, wie der content für diese Nachricht aussieht:

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

Wenn die Anfrage abgeschlossen ist, antwortet SparkPost mit einem eindeutigen Identifikator für Ihre neue Vorlage. Zum Beispiel xxxxxxx.

Fazit

Jetzt, da Sie sehen, wie SparkPost verwendet werden kann, um E-Mails nahezu jeder Komplexität zu senden, möchten Sie vielleicht einen Blick auf „SparkPost Supports Sending Email on Apple Watch“ werfen oder sich die Ersetzungssyntax ansehen, um zu sehen, wie sie mit „if then else“, „Ausdrücken in Konditionalen“ oder „Array-Iteration“ direkt in Ihrem Vorlagen- oder Übermittlungsinhalt verwendet werden kann.

Jetzt, da Sie sehen, wie SparkPost verwendet werden kann, um E-Mails nahezu jeder Komplexität zu senden, möchten Sie vielleicht einen Blick auf „SparkPost Supports Sending Email on Apple Watch“ werfen oder sich die Ersetzungssyntax ansehen, um zu sehen, wie sie mit „if then else“, „Ausdrücken in Konditionalen“ oder „Array-Iteration“ direkt in Ihrem Vorlagen- oder Übermittlungsinhalt verwendet werden kann.

Jetzt, da Sie sehen, wie SparkPost verwendet werden kann, um E-Mails nahezu jeder Komplexität zu senden, möchten Sie vielleicht einen Blick auf „SparkPost Supports Sending Email on Apple Watch“ werfen oder sich die Ersetzungssyntax ansehen, um zu sehen, wie sie mit „if then else“, „Ausdrücken in Konditionalen“ oder „Array-Iteration“ direkt in Ihrem Vorlagen- oder Übermittlungsinhalt verwendet werden kann.

Andere Neuigkeiten

Mehr lesen aus dieser Kategorie

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

Die komplette AI-native Plattform, die mit Ihrem Business skalierbar ist.

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

Die komplette AI-native Plattform, die mit Ihrem Business skalierbar ist.