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)