php проверка валидности email

Проверяем e-mail на валидность на PHP/jQuery

Сегодня я хотел бы поговорить с вами немного о валидности. Что это такое? Это проверка введенной информации согласно какому-либо шаблону, маске. Все мы знаем, что мобильный телефон для России начинается с +7, а e-mail должен содержать в себе знак @.

Если какое-то из условий не выполнено, то логично уведомить об этом пользователя, чтобы в последующем не получить от него ошибочных данных. Сегодня я покажу вам, как двумя способами проверить корректность введенной электронной почты пользователя.

Проверка валидности e-mail на PHP

Итак, мы полагаем, что в какую-то переменную нам поступает e-mail пользователя. Наша задача – проверить ее корректность, и если в адресе имеется ошибка – сообщить пользователю об этом.

Соответственно, если e-mail некорректен, вы можете вывести необходимое сообщение и остановить дальнейшее выполнение скрипта (в нашем случае – отправку) до тех пор, пока не будет указан правильный e-mail.

Проверка валидности e-mail на jQuery

Поскольку jQuery – клиентский скрипт (то есть выполняется на стороне пользователя), то здесь мы рассмотрим live-пример, где при введении e-mail в некоторое поле будет мобильно происходить проверка его на корректность.

У нас есть поле для ввода e-mail:

Теперь напишем небольшой скрипт, который будет проверять корректность заполненного поля после того, как оно потеряло фокус:

По желанию, в случае некорректного ввода можно вывести необходимое сообщение или, например, заблокировать кнопку формы.

Источник

Проверка Email на валидность и существование.

Данная форма позволяет проверить Email на формальную валидность и существование на почтовом сервере.

Как проверяется email адрес

Проверка синтаксиса

При запросе подтверждения адреса электронной почты в первую очередь будет выполннена проверка синтаксиса электронной почты, т.е. проверено его соответствие правилам регулярных выражений, таким как:

Доменная часть email должна соответствовать строгим правилам: она должна соответствовать требованиям к имени хоста, состоящему из букв, цифр, дефисов и точек. Кроме того, доменная часть может быть литералом IP-адреса, заключенным в квадратные скобки, хотя это крайне редко встречается.

Проверка доступности почтового сервера

Проверяется доступность MX-записи почтового сервера с помощью DNS-запроса.

Проверка самого ящика на сервере (проверить по SMTP)

Для этого сервис устанавливает соединение с почтовым сервером получателя и отправляет ему команды по аналогии с отправкой письма. Если на сервере нет такого получателя, то при отправке команды «письмо для такого-то мыла»(RCPT TO:) сервер отвечает что такого ящика нет(код 550). Не все сервера отвечают согласно требованиям RFC, например сервера mail.ru на любое письмо отвечает кодом 250, что всё Ok.

Если включена проверка по SMTP: списывается два запроса, адреса в результирующем файле будут упорядочены по smtp-серверам

С примером установления соединения и отправки команд можете ознакомиться здесь. Время проверки каждого е-mail может занимать до 60 секунд.

Некоторые почтовые сервера для защиты от спама используют технологию серых списков (Greylisting). При отправке письма сервер отвечает кодом 450 или 451, что он временно не готов принять письмо. В этом случае необходимо повторно проверить почтовый адрес более чем через 30 минут. При разовой проверке и проверке по API повторный запрос не отправляется. При пакетной обработке файла система будет ждать 30+ минут и повторно опрашивать почтовый сервер. Время обработки файла с почтовыми адресами в этом случе существенно возрастает. Дополнительная оплата при пакетной обработке за повторную проверку не взимается.

Почтовый сервер mail.ru (inbox.ru, bk.ru, list.ru) на любой адрес отвечает, что такой получатель есть и принимают для него полностью письмо. И только потом присылают FBL письмо, что такого адреса не существует. Вам нужно сделать почтовый ящик для таких писем прописать его в mail.ru и обрабатывать отписку для таких адресов.

Пример проверки Email на валидность

Данный пример при выходе из поля проверяет корректность заполнения поля е-mail.

Внимание! Использовать этот пример можно только из приватных сетей, т.к. он использует API_KEY на стороне клиента.

Исходный код этого примера:

Api проверки Email на валидность

format_valid = false
error = ‘Неверный символ в e-mail!’

mx_found = false
error = ‘Email сервер не существует!’

Если сервер защищен с помощью технологии серых списков, будет возвращено:
gray_listing=true
Для получения достоверного результата необходимо вызвать API повторно через час-полтора.

Если все проверки пройдены, возвращается:
message = ’email валидный’

Примеры API запросов проверки email

Пример запроса в формате json: https://htmlweb.ru/json/service/email?email=kdg@a12sd.ru

Пример запроса: https://htmlweb.ru/json/service/email?email=kdg@gmail.com

Пример запроса: https://htmlweb.ru/json/service/email?email=kdg22@htmlweb.ru&smtp_check

Команды SMTP сервера

SMTP (Simple Mail Transfer Protocol — простой протокол передачи почты) — это сетевой протокол, предназначенный для передачи электронной почты в сетях TCP/IP. ESMTP (англ. Extended SMTP) — масштабируемое расширение протокола SMTP. В настоящее время под «протоколом SMTP», как правило, подразумевают ESMTP и его расширения. SMTP использует порт Порты TCP 25.

Протокол SMTP (RFC 821) использует простые текстовые команды в формате ASCII и возвращает трехзначные кодированные ответы с текстовыми сообщениями.

Формат команд в SMTP прост: command [parameter], где command — четырехсимвольная команда протокола SMTP, а parameter — необязательный параметр, определяющий тип данных в команде.

Купить скрипт проверки email адресов

На написание этого скрипта ушло меньше часа времени, а на его отладку я потратил больше месяца. Неоднократно я получал бан от почтовых серверов и потом вытаскивал свой ip из бана. Если Вы не хотите пройти через все злоключения, Вы можете приобрести скрипт проверки почтовых адресов за 8000 рублей (

110$). Код скрипта реализован на PHP, полностью открытый и не использует никаких дополнительных библиотек. Скрипт НЕ будет работать на виртуальном хостинге с закрытым портом SMTP.

Источник

Почему валидации email регуляркой недостаточно. Проверка MX-записей с примерами на PHP и Ruby

Уж сколько раз твердили Миру… Существует давний и, вероятно, нескончаемый спор о том, какой именно регуляркой правильно и нужно проверять поле email пользователя.

Да, проверять регуляркой действительно нужно. Но ведь наши продукты работают в Сети. Так почему бы не использовать её настоящую мощь?

К тому-же нередко бывают ситуации, когда пользователи реально ошибаются при вводе адреса email (в том числе и в домене). Ну или, в поле email вводят любую возможную «Хабракадабру», что легко пролетит через regexp, но никак не может быть почтой, потому что даже домена такого не существует в природе 🙂

Кстати, на этом вот нюансе мы буквально только что подзалетели: суть в том что на сайте, поднятом на одной, довольно популярной CMS-ке у нас почему-то прекратили идти email-уводемления.

Причиной, как выяснилось, стало попадание адреса рассыльщика в спам.

Причин было несколько:

В общем почтовый адрес периодически подпадал под спам.

Посему опыту, соответственно, можно и нужно утверждать что проверка наличия домена в Интернете, а также — наличия на нём почтового сервиса (MX-записей для домена) — это то, что по идее должно существовать и работать в системах регистрации пользователей.

Собственно суть проверки довольно проста: при регистрации, на стадии валидации данных пользователя мы отщепляем домен от email-а, и смотрим что там есть по MX-ам.

Сложно? На самом деле нет. Но позволяет существенно снизить нагрузку на почтовые службы. И, кстати, гораздо реже попадать в спам-листы (ведь отсылка большого числа писем на несуществующие почтовые адреса — один из признаков спама).

На PHP, как ни странно, сделать это довольно просто:

Поясню по довольно «монструозному» if-у. Дело в том, что в документации к функции getmxrr были комментарии с упоминаниями про не совсем корректное его поведение. И хотя на php7.1 мне их обнаружить не удалось — лишняя проверка — не лишняя 🙂

На ruby это делается схожим образом:

При этом уточню, что подобная проверка поля email может не только довольно серьёзно сказаться на качестве информации в базе данных вашего проекта (и снизить риск попадания рассыльщиков уведомлений в спам), но и повлечь за собой снижение нагрузок. Ведь отправка писем из скрипта — довольно не быстрый на практике процесс.

Источник

Проверка правильности email на PHP

Проверка правильного формата вводимых данных очень важна в любых информационных системах. В данной статье, мы рассмотрим возможности PHP проверить, корректно ли указан адрес электронной почты (email). Обращу внимание, что речь идет лишь о проверке корректной структуры адреса. Дело в том, что адрес, может либо быть корректным (т.е. валидным), но при этом не существовать. Например, пользователь может просто ошибиться символом при вводе. Поэтому задача данной статьи – отсеять заведомо некорректные значения для email.

Как известно email состоит из двух основных частей. Например, адрес: MyEmail@myssite.ru.

Здесь, MyEmail – это непосредственный адрес (или логин) пользователя, а myssite.ru – адрес сайта, которому соответствует электронная почта.

Следовательно, проверка адреса на валидность заключается в том, что он должен соответствовать структуре:

В итоге, задача сводилась к построению регулярного выражения для проверки, соответствует ли проверяемая стока допустимым символам и структуре email. Но, начиная с PHP 5.2, появилась возможность выполнить эту проверку встроенной функцией filter_var(). Пример такой проверки:

В первый параметр функции указывается строковое значение, которое нужно проверить. Второй параметр – это идентификатор применяемого фильтра (в данном случае для проверки email). Функция filter_var() универсальна и может быть использована для проверки различных значений – числовое значение, логическое или проверка валидности IP-адреса.

Валидация email с использованием регулярного выражения PHP

Если же либо версия PHP не позволяет вам применить описанный выше метод, либо хотите просто действовать по старинке, то можно использовать регулярные выражения:

Если используете подобное регулярное выражение, стоит быть внимательным к возможным адресам. Например, в данный код решит, что введенное значение не email, если доменная зона будет более 5 символов или если адрес будет задан кириллицей. Поэтому, применяя его, учитывайте возможные вводимые значения.

Источник

Php проверка валидности email

Проверять данные обработчиком на стороне сервера всегда полезно, а в некоторых случаях жизненно необходимо, так как это поможет избежать множество проблем в будущем. В данном случае я расскажу как нужно правильно делать проверку e-mail на валидность (правильность) при помощи PHP. Я расскажу 2 способа, один из которых уже устарел, а второй относительно недавно начал использоваться многими php программистами. Начнем по порядку с устаревшего.

Устаревший способ проверки валидности email на PHP при помощи регулярных выражений

И начну я с описание с того, как именно этот способ проверяет емейл и почему его сейчас лучше не использовать.

Как же он проверяет почту? А делается это примерно вот так:

Где проверяется с помощью регулярного выражения, соответствует ли содержимое переменной $email шаблону email’а вида «СИМВОЛЫ@СИМВОЛЫ.ДОМЕН».

Почему его лучше не использовать сейчас? Главный минус этой регулярки в том, что её нужно постоянно корректировать в соответствии с изменениями в названиях email. Самый яркий пример этого: домены с русскими именами, например в зоне «.рф». Регулярное выражение выше уже не пропустит емейл типа виталик@почта.рф, так как там забито условие a-z0-9_.- (самое обширное), то есть правильными будут признаны только те названия почт, которые будут содержать английские символы, цифры, земля, точка и пробел. Все остальные будут отсеяны как не правильные.

В общем я бы советовал использовать проверку регуляркой только тем, кто понимает, что она делает и хочет получить какой-то частный результат.

Новый способ проверки правильности e-mail на PHP при помощи базовой функции языка

Я советую использовать вам именно этот способ, так как единожды поставив такую проверку в код, в будущем вы будете уверены, что она работает как нужно. Разработчики языка PHP сами внесут нужные корректировки в новых версиях.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *