בשביל מה הסוגריים המרובעים והמספרים בסיומת?
למשל עבור:
PHP קוד:
$email = "myname@[a.1]";
הביטוי שלך יחזיר:
ובכל מקרה, ביטויים רגולריים עבור איימיילים לדעתי לעולם לא יהיו מושלמים.
אבל זה מה יש.
השיטה האלטרנתיבית, גם היא לא מושלמת היא לבדוק האם לדומיין אחריי ה@ יש mx.
אבל היא גם יודעת להגיד מתי כתובת שניראת לגטימית היא לא (למרות שכאן זה גם הצד החלש של השיטה)
משהו כזה:
PHP קוד:
<?php
error_reporting( E_ALL );
$emails = Array();
$emails[] = "SDF@freebsd.co.il"; // looks ok, right? but no MX, should fail the check.
$emails[] = "SDF@nix.co.il"; // looks ok and passes the check.
$emails[] = "user@hosts.co.il"; // ok
$emails[] = "user@gmail.com@walla.co.il"; // fail
$emails[] = "user@someunkown"; // fail
foreach ( $emails as $email )
{
$data = explode("@", $email);
$ct = count($data);
if ( $ct > 2 || $ct <= 0 )
{
printf(">> FAIL: Email %s failed the check.\n", $email);
continue;
}
$hostname = $data[1];
if ( getmxrr ( $hostname, $mxhosts, $weight ) )
{
if ( !count( $mxhosts ) )
{
printf(">> FAIL: NO MX for email %s\n", $email);
}
else
{
printf(">> OK: Email %s were OK.\n", $email);
}
}
else
{
printf(">> FAIL: DNS failed for email %s\n", $email);
}
}