Email címzettek szűrése
2020 Mar.

Batch email küldés esetén sokszor használok Faker által generált email címeket, melyek example.com, example.net, example.org címekre végződnek.

A címlistákban vannak valós emailek is, hogy megnézzem jó-e az email szerkezete, tartalma ami majd élesben ki fog menni. 


Azért, hogy ne adjak át érvénytelen címeket a Postmark szolgáltatásnak, a sok teszt regisztrációból kiszűröm a fake emaileket, meghatározott minta alapján.


Az alábbi script segít ezt megoldani:

private function filterEmail($email)
{
    $partsToSkip = [
        ['command' => 'ends_with', 'data' => '@example.net'],
        ['command' => 'ends_with', 'data' => '@example.com'],
        ['command' => 'ends_with', 'data' => '@example.org'],
        ['command' => 'starts_with', 'data' => 'sz.b@'],
        ['command' => 'str_contains', 'data' => '@domain.']
    ];

    $result = collect($partsToSkip)->filter(function($value) use ($email) {
        return call_user_func($value['command'], trim($email), $value['data']);
    });

    return $result->count() > 0;
}

A filterEmail metódusnak átadom a kiküldési ciklusban aktuális email címet, mely átmegy egy szűrőn. Hogyan működik ez a szűrő?

A sablon tömb ($partsToSkip) command kulcsa jelenti a Laravel helper parancsot, a data pedig, hogy mi alapján szűrje az átadott email címet.

Pl. az első sor így néz ki összerakva :

ends_with($email, '@example.net')

ami logikai értéket ad vissza, hogy @example.net-re végződik-e az email cím.

Ha igen, akkor ezt hozzáadja a $result collection-höz. A végén mi csak arra vagyunk kiváncsiak, hogy legalább egy esetben egyezett-e a minta az email címünkkel, és ha igen, akkor kihagyjuk ezt az email küldésből.   
 

Megjegyzés: Laravel 5.8-ig ezek a globális helper függvények a rendszer részei, az újabb Laravel verziót használóknak vagy installálni kell a következő csomagot: https://github.com/laravel/helpers vagy átírni a scriptet class alapú helperekre (pl. Str::endsWith)