Zaawansowane szablony e-mail

Ptak

25 mar 2016

Email

1 min read

Zaawansowane szablony e-mail

Najważniejsze informacje

    • Szablony SparkPost wspierają proste i zaawansowane tworzenie wiadomości e-mail, w tym HTML, tekst, logikę warunkową, pętle oraz dynamiczne dane dla każdego odbiorcy poprzez zmienne substytucyjne.

    • Tablice mogą być przekazywane do danych substytucyjnych, co pozwala na przechodzenie przez elementy (np. listy plików, ostatnie aktywności, niestandardowe wiersze tabeli), aby generować spersonalizowane sekcje dla każdego odbiorcy.

    • Potrójne klamry {{{ }}} pozwalają na wstawianie surowego, nieescapowanego HTML, co jest niezbędne, gdy twoje dane substytucyjne już zawierają znacznikowanie.

    • Załączniki mogą być wysyłane łatwo przy użyciu punktu końcowego transmisji (content.attachments), który abstrahuje granice MIME i kodowanie za ciebie.

    • Obrazy inline działają podobnie do załączników, ale są renderowane w treści przy użyciu cid: odniesień.

    • Same szablony nie wspierają natywnie załączników, ale możesz nadal je uwzględnić, tworząc pełną wiadomość e-mail RFC 5322 z częściami MIME i zapisując to jako szablon email_rfc822.

    • Tworząc surowe szablony RFC 5322, substytucje wciąż działają — ale tylko w nagłówkach oraz w pierwszych częściach MIME HTML i tekstowym.

    • Używanie klienta poczty w swoim języku programowania (np. JavaMail) oferuje inną ścieżkę: generowanie pełnych wiadomości MIME programowo i wysyłanie ich za pomocą API transmisji SparkPost.

    • Aby zapewnić możliwość utrzymania, trzymaj znacznikowanie i dane oddzielone, ilekroć to możliwe—szczególnie podczas tworzenia szablonów, które zawierają pętle lub wiele sekcji MIME.

    • Zaawansowane funkcje szablonów (warunki, wyrażenia, iteracja tablic) pozwalają deweloperom na budowanie wyrafinowanych, spersonalizowanych wiadomości e-mail bez przepisywania całych szablonów dla każdego przypadku użycia.

Podsumowanie pytań i odpowiedzi

  • Czy szablony SparkPost mogą obsługiwać pętle i tablice?

    Tak. Szablony mogą iterować po tablicach przy użyciu konstrukcji for each. Umożliwia to dynamiczne tabele, listy lub powtarzające się bloki HTML dla każdego odbiorcy.

  • Do czego służą potrójne klamry?

    {{{ variable }}} wstawia surowy HTML bez escapowania. Jest to wymagane, gdy twoje dane do zastąpienia już zawierają oznaczenia HTML.

  • Czy mogę wysyłać załączniki z szablonami?

    Niez bezpośrednio przez pola szablonu — ale możesz to zrobić, przechowując szablon email_rfc822, który zawiera części załącznika MIME.

  • Czy zastępowanie wciąż działa w szablonach RFC 5322?

    Tak, ale tylko w nagłówkach i pierwszych częściach MIME HTML + tekstowych.

  • Kiedy powinienem używać punktu końcowego transmisji zamiast szablonów?

    Kiedy wysyłasz dynamiczne załączniki, obrazy w tle, lub kiedy potrzebujesz, aby SparkPost automatycznie obsługiwał MIME.

  • Czy lepiej osadzić logikę widoku, czy trzymać ją oddzielnie?

    Najlepszą praktyką jest oddzielenie markupów widoków od danych. Używaj szablonów do prezentacji i przekazuj czyste, uporządkowane dane do substytucji.

  • Czy mogę wygenerować pełny email MIME za pomocą biblioteki programistycznej?

    Tak. Biblioteki takie jak JavaMail pozwalają na programowe tworzenie wiadomości RFC 5322 i wysyłanie ich przez API transmisji SparkPost.

  • Czy zaawansowane funkcje szablonów są powszechnie używane?

    Zaskakująco niewielu programistów ich używa, ale odblokowują potężną personalizację: pętle, warunki, logikę wbudowaną i niestandardowe struktury MIME.

  • Dlaczego kiedykolwiek potrzebowałbym szablonów RFC 5322?

    Tylko podczas wysyłania złożonych wiadomości e-mail z różnymi częściami (załączniki, niestandardowe typy MIME), które są nieobsługiwane przez standardową abstrakcję szablonów SparkPost.

Ten post jest skierowany do dewelopera, który chce w pełni wykorzystać możliwości szablonów e-maili SparkPost. Zakłada się, że jesteś zaznajomiony z czytaniem treści JSON i podążaniem za podstawowym przepływem programowania. W miarę wprowadzania terminów, które mogą być dla Ciebie nowe, takich jak RFC 5322, tekst jest powiązany z jego źródłowym odniesieniem.

Niech to będzie na względzie, przeskoczmy od razu do rzeczy.

Możliwości szablonów i transmisji SparkPost sprawiają, że wysyłanie e-maili jest proste. Te możliwości zapewniają abstrakcję dla treści tekstowych i HTML, co oznacza, że w większości przypadków nie ma potrzeby bezpośredniego kodowania surowego formatu e-maili, który jest zdefiniowany w RFC 5322 znanym wcześniej jako (RFC 822). Ale czasami możesz chcieć stworzyć bardziej złożone wiadomości, które mają inne części Multipurpose Internet Mail Extensions (MIME), które nie są bezpośrednio dostępne za pośrednictwem interfejsu RESTful SparkPost.

Ten post jest skierowany do dewelopera, który chce w pełni wykorzystać możliwości szablonów e-maili SparkPost. Zakłada się, że jesteś zaznajomiony z czytaniem treści JSON i podążaniem za podstawowym przepływem programowania. W miarę wprowadzania terminów, które mogą być dla Ciebie nowe, takich jak RFC 5322, tekst jest powiązany z jego źródłowym odniesieniem.

Niech to będzie na względzie, przeskoczmy od razu do rzeczy.

Możliwości szablonów i transmisji SparkPost sprawiają, że wysyłanie e-maili jest proste. Te możliwości zapewniają abstrakcję dla treści tekstowych i HTML, co oznacza, że w większości przypadków nie ma potrzeby bezpośredniego kodowania surowego formatu e-maili, który jest zdefiniowany w RFC 5322 znanym wcześniej jako (RFC 822). Ale czasami możesz chcieć stworzyć bardziej złożone wiadomości, które mają inne części Multipurpose Internet Mail Extensions (MIME), które nie są bezpośrednio dostępne za pośrednictwem interfejsu RESTful SparkPost.

Ten post jest skierowany do dewelopera, który chce w pełni wykorzystać możliwości szablonów e-maili SparkPost. Zakłada się, że jesteś zaznajomiony z czytaniem treści JSON i podążaniem za podstawowym przepływem programowania. W miarę wprowadzania terminów, które mogą być dla Ciebie nowe, takich jak RFC 5322, tekst jest powiązany z jego źródłowym odniesieniem.

Niech to będzie na względzie, przeskoczmy od razu do rzeczy.

Możliwości szablonów i transmisji SparkPost sprawiają, że wysyłanie e-maili jest proste. Te możliwości zapewniają abstrakcję dla treści tekstowych i HTML, co oznacza, że w większości przypadków nie ma potrzeby bezpośredniego kodowania surowego formatu e-maili, który jest zdefiniowany w RFC 5322 znanym wcześniej jako (RFC 822). Ale czasami możesz chcieć stworzyć bardziej złożone wiadomości, które mają inne części Multipurpose Internet Mail Extensions (MIME), które nie są bezpośrednio dostępne za pośrednictwem interfejsu RESTful SparkPost.

Wysyłanie szablonu

Dobrą wiadomością jest to, że stworzenie treści RFC 5322 było najtrudniejszą częścią. Od teraz wysyłanie tego szablonu z SparkPost jest dokładnie takie samo jak wysyłanie jakiegokolwiek innego szablonu.

Oto jak wysyłamy ten szablon i wypełniamy dane dotyczące zamiany:

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

Dobrą wiadomością jest to, że stworzenie treści RFC 5322 było najtrudniejszą częścią. Od teraz wysyłanie tego szablonu z SparkPost jest dokładnie takie samo jak wysyłanie jakiegokolwiek innego szablonu.

Oto jak wysyłamy ten szablon i wypełniamy dane dotyczące zamiany:

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

Dobrą wiadomością jest to, że stworzenie treści RFC 5322 było najtrudniejszą częścią. Od teraz wysyłanie tego szablonu z SparkPost jest dokładnie takie samo jak wysyłanie jakiegokolwiek innego szablonu.

Oto jak wysyłamy ten szablon i wypełniamy dane dotyczące zamiany:

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

Uproszczona kompozycja e-maila

Najpierw przejrzyjmy scenariusz słonecznego dnia dotyczący wysyłania e-maila. Użyj punktu końcowego transmisji, aby dostarczyć text i treść HTML. Za kulisami SparkPost zajmuje się tworzeniem ważnego e-maila RFC 5322. SparkPost wstawia zmienne substytucyjne z substitution_data do treści tekstowej i HTML. To jest potężny sposób na generowanie dostosowanej treści dla każdego odbiorcy w wspólnym szablonie.

Oto przykład transmisji z treścią HTML i tekstową z 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>"
  }
}


Przegląd możliwości substytucji

Możliwość

Opis

Podstawowa substytucja zmiennych

Wstawia pojedyncze dynamiczne wartości do treści tekstowej lub HTML

Logika warunkowa

Renderuje różną treść w oparciu o ewaluację boolean lub wyrażenia

Iteracja po tablicach

Przechodzi przez tablice (np. listy plików), aby generować powtarzającą się treść

Wstawianie surowego HTML ({{{ }}})

Umożliwia nieprzetworzony HTML w sytuacjach, gdy znacznik pochodzi z źródła danych

Personalizacja dla każdego odbiorcy

Obsługuje całkowicie unikalną treść dla każdego odbiorcy


Najpierw przejrzyjmy scenariusz słonecznego dnia dotyczący wysyłania e-maila. Użyj punktu końcowego transmisji, aby dostarczyć text i treść HTML. Za kulisami SparkPost zajmuje się tworzeniem ważnego e-maila RFC 5322. SparkPost wstawia zmienne substytucyjne z substitution_data do treści tekstowej i HTML. To jest potężny sposób na generowanie dostosowanej treści dla każdego odbiorcy w wspólnym szablonie.

Oto przykład transmisji z treścią HTML i tekstową z 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>"
  }
}


Przegląd możliwości substytucji

Możliwość

Opis

Podstawowa substytucja zmiennych

Wstawia pojedyncze dynamiczne wartości do treści tekstowej lub HTML

Logika warunkowa

Renderuje różną treść w oparciu o ewaluację boolean lub wyrażenia

Iteracja po tablicach

Przechodzi przez tablice (np. listy plików), aby generować powtarzającą się treść

Wstawianie surowego HTML ({{{ }}})

Umożliwia nieprzetworzony HTML w sytuacjach, gdy znacznik pochodzi z źródła danych

Personalizacja dla każdego odbiorcy

Obsługuje całkowicie unikalną treść dla każdego odbiorcy


Najpierw przejrzyjmy scenariusz słonecznego dnia dotyczący wysyłania e-maila. Użyj punktu końcowego transmisji, aby dostarczyć text i treść HTML. Za kulisami SparkPost zajmuje się tworzeniem ważnego e-maila RFC 5322. SparkPost wstawia zmienne substytucyjne z substitution_data do treści tekstowej i HTML. To jest potężny sposób na generowanie dostosowanej treści dla każdego odbiorcy w wspólnym szablonie.

Oto przykład transmisji z treścią HTML i tekstową z 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>"
  }
}


Przegląd możliwości substytucji

Możliwość

Opis

Podstawowa substytucja zmiennych

Wstawia pojedyncze dynamiczne wartości do treści tekstowej lub HTML

Logika warunkowa

Renderuje różną treść w oparciu o ewaluację boolean lub wyrażenia

Iteracja po tablicach

Przechodzi przez tablice (np. listy plików), aby generować powtarzającą się treść

Wstawianie surowego HTML ({{{ }}})

Umożliwia nieprzetworzony HTML w sytuacjach, gdy znacznik pochodzi z źródła danych

Personalizacja dla każdego odbiorcy

Obsługuje całkowicie unikalną treść dla każdego odbiorcy


Zastąp tablice danych

Wiele osób zdaje sobie sprawę, że punkty końcowe transmisji i szablonów SparkPost mogą wykonywać prostą podmianę treści w nagłówkach e-maili i treści wiadomości e-mail. Jednak wiele osób pomija możliwość zapewnienia warunkowej treści lub tablic danych, które również mogą być podmieniane. Możesz również dostarczyć unikalną treść dla każdego odbiorcy. W tym przykładzie wysyłamy tablicę unikalnych linków do każdego odbiorcy.

Osiąga się to poprzez dostarczenie tablicy JSON danych, które będą wstawione do treści e-maila. Gdy dane są dostarczone, SparkPost wykorzysta logikę w szablonie do ich wstawienia.

W tym przykładzie SparkPost będzie szukać danych do podmiany o nazwie “files_html” i wykona “for each” na każdym elemencie w tablicy. Utworzy wiersz z wartością “file” w elemencie “files_html”. Zauważ potrójną klamrę wokół “loop_var.file“. To dlatego, że każdy element tablicy zawiera HTML i musimy poinformować serwer, aby używał go tak, jak jest, a nie aby go przekształcał. Część tekstowa będzie prostą etykietą tekstową i linkiem do pliku.

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


Oto kompletny działający przykład:

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

Wiele osób zdaje sobie sprawę, że punkty końcowe transmisji i szablonów SparkPost mogą wykonywać prostą podmianę treści w nagłówkach e-maili i treści wiadomości e-mail. Jednak wiele osób pomija możliwość zapewnienia warunkowej treści lub tablic danych, które również mogą być podmieniane. Możesz również dostarczyć unikalną treść dla każdego odbiorcy. W tym przykładzie wysyłamy tablicę unikalnych linków do każdego odbiorcy.

Osiąga się to poprzez dostarczenie tablicy JSON danych, które będą wstawione do treści e-maila. Gdy dane są dostarczone, SparkPost wykorzysta logikę w szablonie do ich wstawienia.

W tym przykładzie SparkPost będzie szukać danych do podmiany o nazwie “files_html” i wykona “for each” na każdym elemencie w tablicy. Utworzy wiersz z wartością “file” w elemencie “files_html”. Zauważ potrójną klamrę wokół “loop_var.file“. To dlatego, że każdy element tablicy zawiera HTML i musimy poinformować serwer, aby używał go tak, jak jest, a nie aby go przekształcał. Część tekstowa będzie prostą etykietą tekstową i linkiem do pliku.

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


Oto kompletny działający przykład:

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

Wiele osób zdaje sobie sprawę, że punkty końcowe transmisji i szablonów SparkPost mogą wykonywać prostą podmianę treści w nagłówkach e-maili i treści wiadomości e-mail. Jednak wiele osób pomija możliwość zapewnienia warunkowej treści lub tablic danych, które również mogą być podmieniane. Możesz również dostarczyć unikalną treść dla każdego odbiorcy. W tym przykładzie wysyłamy tablicę unikalnych linków do każdego odbiorcy.

Osiąga się to poprzez dostarczenie tablicy JSON danych, które będą wstawione do treści e-maila. Gdy dane są dostarczone, SparkPost wykorzysta logikę w szablonie do ich wstawienia.

W tym przykładzie SparkPost będzie szukać danych do podmiany o nazwie “files_html” i wykona “for each” na każdym elemencie w tablicy. Utworzy wiersz z wartością “file” w elemencie “files_html”. Zauważ potrójną klamrę wokół “loop_var.file“. To dlatego, że każdy element tablicy zawiera HTML i musimy poinformować serwer, aby używał go tak, jak jest, a nie aby go przekształcał. Część tekstowa będzie prostą etykietą tekstową i linkiem do pliku.

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


Oto kompletny działający przykład:

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

Załączniki w zdolnościach transmisyjnych

Końcowy punkt transmisji zapewnia również abstrakcję do wysyłania załączników. Poniżej zobaczysz, że załączniki są określone w tablicy content.attachments , w której każdy obiekt w tablicy opisuje pojedynczy element załącznika. Tak jak wcześniej, SparkPost zajmie się kodowaniem tekstu, HTML, substytucji oraz iterowaniem przez tablicę załączników, aby zakodować poprawnie sformułowaną wiadomość e-mail.

Najlepsze praktyki nakazują unikanie wysyłania załączników, chyba że wyraźnie wymagane jako część twojej usługi.

Poniżej znajdują się wymagane pola dla załącznika:

  • typ: Typ MIME załącznika

  • nazwa: Nazwa pliku załącznika

  • dane: Dane pliku zakodowane w Base64

Wymagane pola dla załączników

Pole

Znaczenie

typ

Typ MIME załącznika

nazwa

Nazwa pliku, która pojawi się przed odbiorcą

dane

Dane ładunku pliku zakodowane w Base64


Tak wygląda załącznik wewnątrz bloku treści transmisji:

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

Możesz także wysyłać „obrazy w linii” w transmisji. Są one bardzo podobne do załączników i są określone w tablicy content.inline_images , w której każdy z obiektów inline_image jest podobny do obiektu załącznika pokazano powyżej.

Końcowy punkt transmisji zapewnia również abstrakcję do wysyłania załączników. Poniżej zobaczysz, że załączniki są określone w tablicy content.attachments , w której każdy obiekt w tablicy opisuje pojedynczy element załącznika. Tak jak wcześniej, SparkPost zajmie się kodowaniem tekstu, HTML, substytucji oraz iterowaniem przez tablicę załączników, aby zakodować poprawnie sformułowaną wiadomość e-mail.

Najlepsze praktyki nakazują unikanie wysyłania załączników, chyba że wyraźnie wymagane jako część twojej usługi.

Poniżej znajdują się wymagane pola dla załącznika:

  • typ: Typ MIME załącznika

  • nazwa: Nazwa pliku załącznika

  • dane: Dane pliku zakodowane w Base64

Wymagane pola dla załączników

Pole

Znaczenie

typ

Typ MIME załącznika

nazwa

Nazwa pliku, która pojawi się przed odbiorcą

dane

Dane ładunku pliku zakodowane w Base64


Tak wygląda załącznik wewnątrz bloku treści transmisji:

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

Możesz także wysyłać „obrazy w linii” w transmisji. Są one bardzo podobne do załączników i są określone w tablicy content.inline_images , w której każdy z obiektów inline_image jest podobny do obiektu załącznika pokazano powyżej.

Końcowy punkt transmisji zapewnia również abstrakcję do wysyłania załączników. Poniżej zobaczysz, że załączniki są określone w tablicy content.attachments , w której każdy obiekt w tablicy opisuje pojedynczy element załącznika. Tak jak wcześniej, SparkPost zajmie się kodowaniem tekstu, HTML, substytucji oraz iterowaniem przez tablicę załączników, aby zakodować poprawnie sformułowaną wiadomość e-mail.

Najlepsze praktyki nakazują unikanie wysyłania załączników, chyba że wyraźnie wymagane jako część twojej usługi.

Poniżej znajdują się wymagane pola dla załącznika:

  • typ: Typ MIME załącznika

  • nazwa: Nazwa pliku załącznika

  • dane: Dane pliku zakodowane w Base64

Wymagane pola dla załączników

Pole

Znaczenie

typ

Typ MIME załącznika

nazwa

Nazwa pliku, która pojawi się przed odbiorcą

dane

Dane ładunku pliku zakodowane w Base64


Tak wygląda załącznik wewnątrz bloku treści transmisji:

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

Możesz także wysyłać „obrazy w linii” w transmisji. Są one bardzo podobne do załączników i są określone w tablicy content.inline_images , w której każdy z obiektów inline_image jest podobny do obiektu załącznika pokazano powyżej.

Załączniki w szablonach

Teraz, gdy mamy właściwe tło do wysyłania załączników za pomocą punktu końcowego transmisji, przyjrzyjmy się, jak zrobić to za pomocą szablonów. W chwili pisania tego tekstu nie ma abstrakcji załączników, jaką znajdziesz dla transmisji w linii. Można by dojść do wniosku, że nie można tworzyć szablonów z załącznikami. Byłbyś częściowo w błędzie, ale istnieje obejście, chociaż nie będziesz już izolowany od formatu RFC 5322.

Możesz osiągnąć załączniki w szablonach, kodując treści RFC 5322 samodzielnie, co obejmuje załączniki. Dobrą wiadomością jest to, że nie utracisz możliwości używania danych zastępczych w swoich nagłówkach e-mail, HTML i częściach tekstowych. Pamiętaj, że ten typ szablonu ogranicza substytucje do nagłówków oraz pierwszej części HTML i pierwszej części tekstowej.


Ograniczenia szablonów RFC 5322

Ograniczenie

Opis

Substytucje ograniczone

Stosują się tylko do nagłówków, pierwszej części HTML i pierwszej części tekstowej

Ręczne zarządzanie MIME

Programista musi skonstruować wszystkie granice MIME i części załączników

Wyższy koszt utrzymania

Trudniejsze do aktualizacji, audytu i wersjonowania

Nieprzyjazne dla abstrakcji

Obchodzi wygodę systemu szablonów SparkPost


Oto przykład, jak to zrobić.

RFC822 E-mail

Utwórz swój e-mail RFC 5322 z danymi zastępczymi, które chcesz. Stworzyłem ten w swoim kliencie pocztowym i wysłałem go do siebie. Gdy go otrzymałem, skopiowałem źródło i zastąpiłem pola, które chcę dynamicznie zastąpić.

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

Ostatnia część MIME w tej wiadomości, którą zobaczysz, to Content-Disposition: attachment; filename=myfile.txt”. To tam definiowana jest nazwa pliku. Zawartość twojego załącznika na pewno będzie znacznie bardziej złożona, ale ten przykład stara się to uprościć.

Teraz, gdy mamy właściwe tło do wysyłania załączników za pomocą punktu końcowego transmisji, przyjrzyjmy się, jak zrobić to za pomocą szablonów. W chwili pisania tego tekstu nie ma abstrakcji załączników, jaką znajdziesz dla transmisji w linii. Można by dojść do wniosku, że nie można tworzyć szablonów z załącznikami. Byłbyś częściowo w błędzie, ale istnieje obejście, chociaż nie będziesz już izolowany od formatu RFC 5322.

Możesz osiągnąć załączniki w szablonach, kodując treści RFC 5322 samodzielnie, co obejmuje załączniki. Dobrą wiadomością jest to, że nie utracisz możliwości używania danych zastępczych w swoich nagłówkach e-mail, HTML i częściach tekstowych. Pamiętaj, że ten typ szablonu ogranicza substytucje do nagłówków oraz pierwszej części HTML i pierwszej części tekstowej.


Ograniczenia szablonów RFC 5322

Ograniczenie

Opis

Substytucje ograniczone

Stosują się tylko do nagłówków, pierwszej części HTML i pierwszej części tekstowej

Ręczne zarządzanie MIME

Programista musi skonstruować wszystkie granice MIME i części załączników

Wyższy koszt utrzymania

Trudniejsze do aktualizacji, audytu i wersjonowania

Nieprzyjazne dla abstrakcji

Obchodzi wygodę systemu szablonów SparkPost


Oto przykład, jak to zrobić.

RFC822 E-mail

Utwórz swój e-mail RFC 5322 z danymi zastępczymi, które chcesz. Stworzyłem ten w swoim kliencie pocztowym i wysłałem go do siebie. Gdy go otrzymałem, skopiowałem źródło i zastąpiłem pola, które chcę dynamicznie zastąpić.

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

Ostatnia część MIME w tej wiadomości, którą zobaczysz, to Content-Disposition: attachment; filename=myfile.txt”. To tam definiowana jest nazwa pliku. Zawartość twojego załącznika na pewno będzie znacznie bardziej złożona, ale ten przykład stara się to uprościć.

Teraz, gdy mamy właściwe tło do wysyłania załączników za pomocą punktu końcowego transmisji, przyjrzyjmy się, jak zrobić to za pomocą szablonów. W chwili pisania tego tekstu nie ma abstrakcji załączników, jaką znajdziesz dla transmisji w linii. Można by dojść do wniosku, że nie można tworzyć szablonów z załącznikami. Byłbyś częściowo w błędzie, ale istnieje obejście, chociaż nie będziesz już izolowany od formatu RFC 5322.

Możesz osiągnąć załączniki w szablonach, kodując treści RFC 5322 samodzielnie, co obejmuje załączniki. Dobrą wiadomością jest to, że nie utracisz możliwości używania danych zastępczych w swoich nagłówkach e-mail, HTML i częściach tekstowych. Pamiętaj, że ten typ szablonu ogranicza substytucje do nagłówków oraz pierwszej części HTML i pierwszej części tekstowej.


Ograniczenia szablonów RFC 5322

Ograniczenie

Opis

Substytucje ograniczone

Stosują się tylko do nagłówków, pierwszej części HTML i pierwszej części tekstowej

Ręczne zarządzanie MIME

Programista musi skonstruować wszystkie granice MIME i części załączników

Wyższy koszt utrzymania

Trudniejsze do aktualizacji, audytu i wersjonowania

Nieprzyjazne dla abstrakcji

Obchodzi wygodę systemu szablonów SparkPost


Oto przykład, jak to zrobić.

RFC822 E-mail

Utwórz swój e-mail RFC 5322 z danymi zastępczymi, które chcesz. Stworzyłem ten w swoim kliencie pocztowym i wysłałem go do siebie. Gdy go otrzymałem, skopiowałem źródło i zastąpiłem pola, które chcę dynamicznie zastąpić.

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

Ostatnia część MIME w tej wiadomości, którą zobaczysz, to Content-Disposition: attachment; filename=myfile.txt”. To tam definiowana jest nazwa pliku. Zawartość twojego załącznika na pewno będzie znacznie bardziej złożona, ale ten przykład stara się to uprościć.

Przechowywany szablon

Gdy masz ważny adres e-mail RFC 5322, przechowaj go używając formy email_rfc822 punktu końcowego szablonu zamiast używać pól text i HTML. Oto przykład tego, jak wygląda content dla tej wiadomości:

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

Gdy żądanie zostanie zakończone, SparkPost odpowie unikalnym identyfikatorem dla twojego nowego szablonu. Na przykład xxxxxxx.

Gdy masz ważny adres e-mail RFC 5322, przechowaj go używając formy email_rfc822 punktu końcowego szablonu zamiast używać pól text i HTML. Oto przykład tego, jak wygląda content dla tej wiadomości:

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

Gdy żądanie zostanie zakończone, SparkPost odpowie unikalnym identyfikatorem dla twojego nowego szablonu. Na przykład xxxxxxx.

Gdy masz ważny adres e-mail RFC 5322, przechowaj go używając formy email_rfc822 punktu końcowego szablonu zamiast używać pól text i HTML. Oto przykład tego, jak wygląda content dla tej wiadomości:

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

Gdy żądanie zostanie zakończone, SparkPost odpowie unikalnym identyfikatorem dla twojego nowego szablonu. Na przykład xxxxxxx.

Podsumowanie

Teraz, gdy widzisz, jak SparkPost może być używany do wysyłania e-maili o niemal dowolnej złożoności, możesz chcieć rzucić okiem na „SparkPost wspiera wysyłanie e-maili na Apple Watch” lub zapoznać się z składnią substytucji, aby zobaczyć, jak można jej używać z „jeśli to, to tamto”, „wyrażenia w warunkach” lub „iteracja tablic” bezpośrednio w treści szablonu lub transmisji.

Teraz, gdy widzisz, jak SparkPost może być używany do wysyłania e-maili o niemal dowolnej złożoności, możesz chcieć rzucić okiem na „SparkPost wspiera wysyłanie e-maili na Apple Watch” lub zapoznać się z składnią substytucji, aby zobaczyć, jak można jej używać z „jeśli to, to tamto”, „wyrażenia w warunkach” lub „iteracja tablic” bezpośrednio w treści szablonu lub transmisji.

Teraz, gdy widzisz, jak SparkPost może być używany do wysyłania e-maili o niemal dowolnej złożoności, możesz chcieć rzucić okiem na „SparkPost wspiera wysyłanie e-maili na Apple Watch” lub zapoznać się z składnią substytucji, aby zobaczyć, jak można jej używać z „jeśli to, to tamto”, „wyrażenia w warunkach” lub „iteracja tablic” bezpośrednio w treści szablonu lub transmisji.

Inne wiadomości

Przeczytaj więcej z tej kategorii

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

Kompletna platforma oparta na sztucznej inteligencji, która rośnie wraz z Twoim biznesem.

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

Kompletna platforma oparta na sztucznej inteligencji, która rośnie wraz z Twoim biznesem.