Rendszer email küldése

Hogy lehet kiküldeni egy rendszer email-t.

2022.11.02 — Posted by Webb & Flow


Előfeltételek

  • Létre kell hozni az API kapcsolathoz egy Service account-ot
  • Létre kell hozni azt az email template-et, amit az API-n keresztül küldeni akarunk
    • ennek System típusúnak kell lennie, mivel EDM típusú leveleket az email listákon keresztül lehet kiküldeni
    • Email kezelés

Email küldés

Az email küldő API végpont a POST https://app.forwardhub.com/send végponton található.

Az email küldéséhez a következő példa kódot felhasználva lehet meghívni az API-t:

$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_ENCODING, "gzip, deflate");
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, $apiKey.':'.$apiPassword);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($curl, CURLOPT_TIMEOUT, 5);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt(
    $curl,
    CURLOPT_POSTFIELDS,
    http_build_query(
        array(
            'TEMPLATE' => $templateName,
            'TARGET' => $emailOfTarget,
            // a paraméterek értékei
        )
    )
);
curl_setopt($curl, CURLOPT_URL, 'https://app.forwardhub.com/send');

curl_exec($curl);

$curlResult = curl_exec($curl);
$headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);

$result = array(
    'responseHeaders' => substr($curlResult, 0, $headerSize),
    'status' => curl_getinfo($curl, CURLINFO_HTTP_CODE),
    'errorCode' => curl_errno($curl),
    'response' => json_decode(substr($curlResult, $headerSize), 1),
);
curl_close($curl);

A $apiKey illetve $apiPassword változó értéke a service account login, illetve password értéke. A $templateName a template neve úgy, ahogy a template listában és a name mezőben is megjelenik. A $emailOfTarget az az email cím, ahova a levelet küldeni akarjuk.

Az email template paramétereit a ‘CURLOPT_POSTFIELDS’ hívásnál található tömbben lehet felsorolni. A paraméterek nevei lehetnek kis és nagybetűsek is, az API mentéskor midegyiket nagybetűssé konvertálja. A paraméterek értékei minden változtatás nélkül fognak mentődni.

Két kötelező paraméter van:

  • TEMPLATE
    • annak a template-nek a neve vagy az azonosítója, amit ki akarunk küldeni
    • amennyiben a küldött értéket a rendszer ismeri, mint template id, azonosítóként fogja kezelni, ellenkező esetben template névként
  • TARGET
    • a címzett email címe

Opcionális paraméter:

  • LANG
    • amennyiben több nyelvű template lett felépítve, itt lehet elküldeni a megfelelő nyelv kódját (ha nincs megadva, akkor a projektben beállított default nyelv lesz használva)

A TARGET paraméter csak olyan email címeket fogad el, amiknél a tld (az utolsó . utáni szöveg a domain névben) minimum 2, de maximum 4 karakter hosszú.

Ezek mellett minden olyan paramétert el kell küldeni, amire a template-ben változóval hivatkozunk, és fel van sorolva a template parameters listájában. Minden paraméter értéke kizárólag skaláris értéket vehetnek fel (string, egész, illetve valós szám). Amennyiben dátumot akarunk beküldeni, azt unix timestamp-ként, egész számként kell küldeni, és a template formázási lehetőségeit kihasználva megjeleníteni a levélben (másik lehetőségként lehet egyből a megfelelő formátumban, string-ként küldeni, ekkor nem kell külön a template-ben formázni, viszont így az API híváskor kell megoldani a nyelv specifikus dátum formázást). Például, ha küldeni akarok egy levelet, amiben a címzett nevét is ismerem, és azt is el akarom küldeni az API-n keresztül, hogy azon tudjam megszólítani, akkor a következőképp fog kinézni a paraméter tömb:

array(
    'TEMPLATE' => 'teszt email template',
    'TARGET' => 'gipsz@jakab.hu',
    'NAME' => 'Gipsz Jakab',
)

Csatolmányok küldése

A csatolmányokat a speciális ‘ATTACHMENTS’ paraméterben kell beküldeni. Ez a csatolmányok listáját tartalmazza (akkor is listát kell küldeni, ha csak 1 csatolmányt akarunk küldeni). Egy csatolmánynak 3 kötelező mezeje van:

Korlátozások: A csatolmányok száma nincs korlátozva, azonban az összes csatolmány teljes eredeti mérete nem haladhatja meg a 12MB-ot (azaz base64 encode-olt stringként a 16MB-ot).

Példa kód:

$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_ENCODING, "gzip, deflate");
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, $apiKey.':'.$apiPassword);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($curl, CURLOPT_TIMEOUT, 5);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt(
    $curl,
    CURLOPT_POSTFIELDS,
    http_build_query(
        array(
            'TEMPLATE' => $templateName,
            'TARGET' => $emailOfTarget,
            'ATTACHMENTS' => [
                [
                    'name' => 'file1.txt',
                    'type' => 'text/plain',
                    'content' => base64_encode('content of file1'),
                ],
                [
                    'name' => 'file2.txt',
                    'type' => 'text/plain',
                    'content' => base64_encode('content of file2'),
                ],
                [
                    'name' => 'sheet.pdf',
                    'type' => 'application/pdf',
                    'content' => base64_encode(file_get_contents('path_of_my_pdf_file')),
                ],
            ],
            // a további paraméterek értékei
        )
    )
);
curl_setopt($curl, CURLOPT_URL, 'https://app.forwardhub.com/send');

curl_exec($curl);

$curlResult = curl_exec($curl);
$headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);

$result = array(
    'responseHeaders' => substr($curlResult, 0, $headerSize),
    'status' => curl_getinfo($curl, CURLINFO_HTTP_CODE),
    'errorCode' => curl_errno($curl),
    'response' => json_decode(substr($curlResult, $headerSize), 1),
);
curl_close($curl);

Ez a kód elküld egy levelet 3 csatolmánnyal:

  • file1.txt
    • php oldalon generált txt fájl
  • file2.txt
    • php oldalon generált txt fájl
  • sheet.pdf
    • egy előre generált pdf fájl, ami a ‘path_of_my_pdf_file’ elérési útvonalon található

Titkos másolatok (BCC levelek) küldése

A BCC címzetteket a ‘BCC’ paraméterben kell beküldeni, egy email címeket tartalmazó tömbként.

A BCC levelek önálló levélként lesznek kezelve, de csak attól a pillanattól, hogy az eredeti levél ki lett küldve.

Példa kód:

$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_ENCODING, "gzip, deflate");
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, $apiKey.':'.$apiPassword);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($curl, CURLOPT_TIMEOUT, 5);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt(
    $curl,
    CURLOPT_POSTFIELDS,
    http_build_query(
        array(
            'TEMPLATE' => $templateName,
            'TARGET' => $emailOfTarget,
            'BCC' => [
                'bcctarget1@example.com',
                'bcctarget2@example.com',
                'bcctarget3@example.com'
            ],
            // a további paraméterek értékei
        )
    )
);
curl_setopt($curl, CURLOPT_URL, 'https://app.forwardhub.com/send');

curl_exec($curl);

$curlResult = curl_exec($curl);
$headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);

$result = array(
    'responseHeaders' => substr($curlResult, 0, $headerSize),
    'status' => curl_getinfo($curl, CURLINFO_HTTP_CODE),
    'errorCode' => curl_errno($curl),
    'response' => json_decode(substr($curlResult, $headerSize), 1),
);
curl_close($curl);

Ez a kód elküld egy levelet a $emailOfTarget email címre, és 3 titkos másolatot a következő címekre:

  • bcctarget1@example.com
  • bcctarget2@example.com
  • bcctarget3@example.com

Egyedi válaszcím (REPLYTO) megadása

Amennyiben a levél küldésekor teljesen egyedi válaszcímet akarunk megadni, és nem azt használni, amit a levél template-je, vagy a projekt alap beállítása ad, a címet a ‘REPLYTO’ mezőben kell küldeni.

Példa kód:

$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_ENCODING, "gzip, deflate");
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, $apiKey.':'.$apiPassword);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($curl, CURLOPT_TIMEOUT, 5);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt(
    $curl,
    CURLOPT_POSTFIELDS,
    http_build_query(
        array(
            'TEMPLATE' => $templateName,
            'TARGET' => $emailOfTarget,
            'REPLYTO' => 'replyto@example.com',,
            // a további paraméterek értékei
        )
    )
);
curl_setopt($curl, CURLOPT_URL, 'https://app.forwardhub.com/send');

curl_exec($curl);

$curlResult = curl_exec($curl);
$headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);

$result = array(
    'responseHeaders' => substr($curlResult, 0, $headerSize),
    'status' => curl_getinfo($curl, CURLINFO_HTTP_CODE),
    'errorCode' => curl_errno($curl),
    'response' => json_decode(substr($curlResult, $headerSize), 1),
);
curl_close($curl);

Ez a kód elküld egy levelet, aminek a ReplyTo mezejének az értéke a replyto@example.com cím lesz.