1. Formatprüfung mit filter_var
$email = trim($_POST['email'] ?? '');
if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
exit('Bitte geben Sie eine gültige E-Mail-Adresse ein.');
}
2. Nimmt die Domain E-Mails an?
$domain = substr(strrchr($email, '@'), 1);
if (!checkdnsrr($domain, 'MX') && !checkdnsrr($domain, 'A')) {
exit('Diese E-Mail-Domain existiert nicht.');
}
3. Das Postfach mit der API prüfen
function validate_email_api(string $email): array {
$ch = curl_init('https://api.emailvalidation.io/v1/info?email=' . urlencode($email));
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['apikey: ' . getenv('EMAILVALIDATION_API_KEY')],
]);
$body = curl_exec($ch);
curl_close($ch);
return json_decode($body, true) ?? [];
}
$result = validate_email_api($email);
if (($result['state'] ?? '') === 'undeliverable' || !empty($result['disposable'])) {
exit('Bitte verwenden Sie eine gültige, dauerhafte E-Mail-Adresse.');
}
Laravel
$request->validate([
'email' => ['required', 'email:rfc,dns', function ($attribute, $value, $fail) {
$r = Http::withHeaders(['apikey' => config('services.emailvalidation.key')])
->timeout(10)
->get('https://api.emailvalidation.io/v1/info', ['email' => $value])
->json();
if (($r['state'] ?? null) === 'undeliverable' || ($r['disposable'] ?? false)) {
$fail('Bitte verwenden Sie eine gültige, dauerhafte E-Mail-Adresse.');
}
}],
]);
Läuft der API-Aufruf in einen Timeout, lassen Sie die Adresse durch, statt die Anmeldung zu blockieren.