تایید آدرس ایمیل سخت ولی یک کار مهم در دنیای وب است. یک ایمیل معتبر می توانید برای شما در یک بازایابی, سودآور باشد اما ایمیل نامعتبر هزینه ها و نتایج یک بازاریابی ایمیلی را خراب می کند.
مشابه آن, اعتبارسنجی ایمیل نیز از قابلیت های مهم و کاربردی در اپلیکیشن های تحت وب است.
در وبسایت نت پارادیس هم اوایل کار کاربران برای دانلود فایل ها از ایمیل های یکبارمصرف و حتی ایمیل های غیرواقعی استفاده می کردند که با اضافه کردن قابلیت فیلتر ایمیل ها این مشکل را رفع کردیم و باعث شدیم یک لیست پربازده از ایمیل علاقه مندان داشته باشیم.
تشخیص ایمیل واقعی با php به راحتی می توانید با تابع filter_var()
به همراه ثابت FILTER_VALIDATE_EMAIL
فیلتر شود. این تابع بررسی می کند که آیا فرمت نوشتاری آدرس ایمیل داده شده صحیح است یا خیر.
1 2 3 4 5 6 7 8 |
$email = "netparadis@example.com"; // Validate email if(filter_var($email, FILTER_VALIDATE_EMAIL)){ echo "$email is a valid email address"; }else{ echo "$email is not a valid email address"; } |
در آموزش اعتبارسنجی فرم ها در php بصورت مفصل در این مورد روش هایی را ارایه دادیم.این روش به تنهایی برای بررسی اینکه آدرس ایمیل واقعی و قابل دسترس است کافی نیست.
پس در این آموزش PHP , قصد داریم به شما نحوه تشخیص ایمیل واقعی با php را نشان بدیم.
در اسکریپت PHP اعتبارسنجی اینکه ایمیل واقعی و تقلبی ما از یک روش اثبات شده استفاده می کنیم که بسیاری از وب سرویس هایی که api پولی را ارایه می دهند معمولا از این روش بهره می برند.
در آموزش تشخیص ایمیل واقعی با php ما با چک کردن رکورد های MX DNS و دامنه, ایمیل را اعتبارسنجی می کنیم. این اسکریپت برای اعتبارسنجی (verify) ایمیل کاربر قبل از ارسال ایمیل و یا قرار دادن در دیتابیس مفید است.
کتابخانه تشخیص ایمیل واقعی با php
از کلاس VerifyEmail
برای چک کردن اینکه آدرس ایمیل صحیح است و از یک پروتکل SMTP واقعی استفاده می کند یا خیر, بهره بردیم.
شما فقط نیاز است که یک شی از کلاس را ساخته و تابع check()
را به کار ببرید
تابع check()
- بررسی فرمت نوشتاری آدرس ایمیل
- دریافت رکوردهای MX دامنه آدرس ایمیل
- اتصال به سرور SMTP با رکوردهای MX
- بر اساس کد پاسخ دریافتی (response code) :
- بررسی می کند که آدرس ایمیل ثبت شده صحیح است یا خیر.
- بررسی می کند دامنه ایمیل داده شده وجود دارد یا خیر.
- وضعیت ارسال پیام را چک می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
<?php class VerifyEmail { protected $stream = false; protected $port = 25; protected $from = 'root@localhost'; protected $max_connection_timeout = 30; protected $stream_timeout = 5; protected $stream_timeout_wait = 0; protected $exceptions = false; protected $error_count = 0; public $Debug = false; public $Debugoutput = 'echo'; const CRLF = "\r\n"; public $ErrorInfo = ''; public function __construct($exceptions = false) { } public function setEmailFrom($email) { } public function setConnectionTimeout($seconds) {} public function setStreamTimeout($seconds) {} public function setStreamTimeoutWait($seconds) {} public static function validate($email) { } public function getMXrecords($hostname) {} public static function parse_email($email, $only_domain = TRUE) {} protected function set_error($msg) {} public function isError() {} protected function edebug($str) {} public function check($email) { } protected function _streamQuery($query) {} protected function _streamResponse($timed = 0) {} protected function _streamCode($str) {} } class verifyEmailException extends Exception { public function errorMessage() {} } ?> |
برای دانلود کامل کلاس به همراه متدها لطفا از باکس دانلود آخر این پست استفاده کنید.
مثال تشخیص ایمیل واقعی با php
استفاده از کتابخانه VerifyEmail
برای اعتبارسنجی ایمیل با php بسیار آسان است.
ابتدا یک شی از کلاس VerifyEmail
می سازیم. بعد Timeout
, debug
و آدرس ایمیل را مشخص می کنیم.
تابع check()
را صدا زده و آدرس ایمیلی که قصد داریم واقعی یا تقبلی بودن آن را بررسی کنیم, بهش پاس می دیم.
- اگر خروجی
true
بود, آدرس ایمیل داده شده صحیح و واقعی است. همچنین نشان می دهد که دامنه ایمیل وجود دارد و کاربر معتبر است. - اگر خروجی
false
بود, پس آدرس ایمیل نامعتبر و غیر واقعی است.
اگر تابع check()
خروجی false
را برگشت دهد, می توانید از تابع validate()
برای چک کردن اینکه فرمت ایمیل صحیح است یا خیر اما کاربر موردنظر در دامنه اشاره شده وجود ندارد, استفاده کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?php // Include library file require_once 'VerifyEmail.class.php'; // Initialize library class $mail = new VerifyEmail(); // Set the timeout value on stream $mail->setStreamTimeoutWait(20); // Set debug output mode $mail->Debug= TRUE; $mail->Debugoutput= 'html'; // Set email address for SMTP request $mail->setEmailFrom('from@email.com'); // Email to check $email = 'email@example.com'; // Check if email is valid and exist if($mail->check($email)){ echo 'Email <'.$email.'> is exist!'; }elseif(verifyEmail::validate($email)){ echo 'Email <'.$email.'> is valid, but not exist!'; }else{ echo 'Email <'.$email.'> is not valid and not exist!'; } ?> |
امیدوارم از آموزش تشخیص ایمیل واقعی با php استفاده مفید را برده باشید.
برای دانلود سورس کد از باکس دانلود زیر استفاده کنید.
هر سوالی داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق و پیروز باشید.
سلام
خسته نباشید
ببخشید من میخواستم ورودی ایمیل رو توی یک فرم چک کنم
که آیا دامنه ایمیل معتبر هست یا نه
ولی چون تازه کارم نمیدونم چطور از کدی که گذاشتین باید استفاده کنم
ممنون میشم راهنماییم کنین
خیلی ضرروری هست برام
سلام. ممنون.
از این کد استفاده کنید و اگر هم php بلد نیستید که خب باید بسپارید به فردی که بلده یا اینکه مقدمات php رو یاد بگیرید
سلام.خسته نباشید.چ کار کنیم تا سرعت تست وجود داشتن ایمیل بیشتر بشه.من از هاست اشتراکی استفاده میکنم.
سلام. ممنون.
متاسفانه این مورد خارج از دسترسی شما هست و کاملا بستگی به هاست داره که میتونید سرورهای مجازی پرسرعت تهیه کنید.
موفق باشید.
سلام این اعتبار سنجی ایمیل کامل نیست مثلا من یک ایمیل فرضا matrix_shiri2000@yahoo.cرو وارد کردم و پیغام معتبر بودن ایمیل رئ داد در صورتی که معتبر نیست
سلام. در هاست واقعی هم تست کنید احتمالا بدلیل میل سرور میتونه باشه یا اینکه میتونید متد ارسال ایمیل رو تغییر و از phpmailer استفاده کنید
ارسال ایمیل با php
موفق باشید.
سلام خسته نباشید.
لطفا جواب بدید.
این کدها روی لوکال هاست هم قابل تست هست یا ارور میده؟
سلام ممنون.
در لوکال هاست تست نشده ولی احتمالا جواب بده که باز بستگی به میل سرور داره.
موفق باشید.
سلام خسته نباشید
آیا میشه در php کد های base64 جستجو کرد و در خروجی نمایش داد؟
سلام. ممنون
از این regex میتونید استفاده کنید :
[^-A-Za-z0-9+/=]|=[^=]|={3,}$
آموزش :
https://netparadis.com/php-string-functions-1
https://netparadis.com/regular-expression-regex-php
موفق باشید.