Comments 79
Спасибо. Натолкнули на идею. А вроде бы на поверхности лежала). Есть один минус — если сервер пользователя находится в дауне — ваш скрипт вызовет ошибку. И юзер откроет широко глаза…
Можно расширить данную функцию, проверив домен на наличие в спамлистах. Тогда вообще круто будет.
Можно расширить данную функцию, проверив домен на наличие в спамлистах. Тогда вообще круто будет.
А спам-листы это идея, попробую реализовать в свободное время(:
Не сервер, а ДНС в дауне, тогда ошибка будет.
«домен на наличие в спамлистах»?
это ерунда, хотите, я вам спам от вашего же почтового адреса зашлю?
это ерунда, хотите, я вам спам от вашего же почтового адреса зашлю?
давай
диктуйте ваш почтовый адрес и ваш MX.
может вам ещё пароль сказать, чтобы наверняка? :)
это совсем не обязательно.
неужели непонятно, что по домену отправителя нельзя судить о самом отправителе?
никогда не приходил спам с вашего собственного адреса?
в MAIL FROM:<example@example.com> при инициировании SMTP-сессии можно подставить что угодно, это во-первых.
во-вторых, что угодно можно подставить и в заголовок From самого письма.
неужели непонятно, что по домену отправителя нельзя судить о самом отправителе?
никогда не приходил спам с вашего собственного адреса?
в MAIL FROM:<example@example.com> при инициировании SMTP-сессии можно подставить что угодно, это во-первых.
во-вторых, что угодно можно подставить и в заголовок From самого письма.
Данная тема заинтересовала, подскажите какой-нибудь
онлайн-сервис для быстрой проверки записей домена,
включая МХ записи
онлайн-сервис для быстрой проверки записей домена,
включая МХ записи
Сделайте кат, пожалуйста.
у меня чисто теоретический вопрос — А что часто бывают домены без MX записей? (вопрос без под%ба, просто интересно)
Действительно было бы гораздо эффективней ИМХО проверять на наличие в спам листах. Но и тут бывают косяки. Взять хотябы спамхаус — там полроссии заблочено.
Действительно было бы гораздо эффективней ИМХО проверять на наличие в спам листах. Но и тут бывают косяки. Взять хотябы спамхаус — там полроссии заблочено.
Существование домена без МХ записей — возможно, но встречается редко. Часто бывает, что указаны неправильные МХ.
по первому согласен. А вот что вы понимаете под «неправильным MX» для меня загадка
Я имел в виду умышленную или неумышленную ошибку в МХ записи, или указание МХ левого ресурса.
у меня в MX прописан домен моего сервера, который отличается от самого домена email, это не запрещено и нормально работает, не всегда почта хостится там же где и сайт.
Это на случай, если пользователь введет что-нить типа 'qwer@asfasfasf.ru', в большинстве случаев все же заставляет ввести существующий емыл(: Ну и избавление от назойливого экспшена доктрины, иногда бывает, что внести изменения в модель нет возможности.
Домены без MX записей? Ещё как бывают!
При этом MTA лезет на запись @ IN A…
При этом MTA лезет на запись @ IN A…
> А что часто бывают домены без MX записей?
Строго говоря, MX-запись не обязательна. Поэтому разработчики должны исходить из того, что её может и не быть.
Строго говоря, MX-запись не обязательна. Поэтому разработчики должны исходить из того, что её может и не быть.
Если у домена нет MX записи, то значит что у него нет почты. А если нет почты — то и указывать ее нечего.
Опа, ссылку, пожалуйста на обоснование.
Если бы я сказал, что если у домена нет A записи, то у него нет сайта, то тоже бы потребовался пруфлинк?
Да, ибо без A-записи сайт не может работать в принципе. Однако без MX-записи почта работать может, что прямо утверждается в RFC 2821:
Usually, intermediate hosts are determined via the DNS MX record, not by explicit "source" routing (see section 5 and appendices C and F.2). … If no MX records are found, but an A RR is found, the A RR is treated as if it was associated with an implicit MX RR, with a preference of 0, pointing to that host.
а вы не ставили перед собой задачу помимо мх-ов проверять еще и существование учетки на сервере, чтобы исключить возможность фейковых адресов, например dfglkshdfsgdfgs@host.ru?
каким образом?
отсылать пустое мыло на адрес и смотреть код ответа
Нашел.
Альтернативой checkdnsrr() может стать функция getmxrr(), предназначенная для возврата MX — записей для предоставленного домена. В случае, если ни одной записи не найдено, функция вернет false. Массив $mxhosts используется для сохранения всех найденных записей MX для предоставленного домена.
Ссылка на источник — netbird.ru/articles/view/email_verification
Там полностью описан процес верификации почты — от даваскрипта и до проверки МХ
Альтернативой checkdnsrr() может стать функция getmxrr(), предназначенная для возврата MX — записей для предоставленного домена. В случае, если ни одной записи не найдено, функция вернет false. Массив $mxhosts используется для сохранения всех найденных записей MX для предоставленного домена.
Ссылка на источник — netbird.ru/articles/view/email_verification
Там полностью описан процес верификации почты — от даваскрипта и до проверки МХ
это опять же проверка мх-ов, а не учетки :)
Мда. Поспешил я однако. Наверное — тогда соглашусь с вами. Можно определить по коду ответа при отправке письма по адресу. Хотя и не 100% он придет. Но для реальных систем — это уже излишество. Надо придумать универсальный метод. Из академического интереса.
if (@getmxrr($domen, $mxhostsarr, $weight)) // забираем мх { if (is_array($mxhostsarr) && count($mxhostsarr)) { foreach ($mxhostsarr as $mxhost) // долбимся в каждый мх { $smtp_conn = @fsockopen($mxhost, 25, $errno, $errstr, 60); // устанавливаем соединение if ($smtp_conn) { echo "conn to ".$mxhost."\n"; flush(); sleep(10); fputs($smtp_conn,"helo hostname.ru\r\n"); // представляемся sleep(2); fputs($smtp_conn,"mail from:<>\r\n"); sleep(2); foreach($email_list as $k => $email) { if ($smtp_conn && $email['checked']==0) // если еще есть соединение и адрес непроверен { fputs($smtp_conn,"rcpt to:<".$k.">\r\n"); // имитируем письмо, получаем ответ sleep(1); while ($str = fgets($smtp_conn)) { $result = $str; echo $k."==".$str."\n"; flush(); } $ans = substr($result,0,3); if ($ans=="250") { // адрес проверен, активный } elseif ($ans=="550") { // адрес проверен, ненеактивный } else { // не удалось проверить адрес } } } fputs($smtp_conn,"quit\r\n"); // закрываем соединение unset($smtp_conn); } } } }
как-то так выглядят мои попытки проверки :)
Круто)) И не лень вам было сейчас писать. Есть проблемма — 25 порт. Он не всегда есть портом по умолчанию.
Также настораживает
sleep(10);
sleep(2);
sleep(2);
Значит вам надо будет на валидацию одного адреса >14 секунд.
Надо новый почтовый протокол придумать).
Хотел также спросить. Только 250 — код успеха? Или есть еще?
Также настораживает
sleep(10);
sleep(2);
sleep(2);
Значит вам надо будет на валидацию одного адреса >14 секунд.
Надо новый почтовый протокол придумать).
Хотел также спросить. Только 250 — код успеха? Или есть еще?
При сочетании всех методов — исчезает вероятность ошибочного ввода адреса.
а вот и нет :)
как уже писали:
1. почтовый сервак может быть временно в ауте, а мх вы его не получите.
2. как ни билась, но на ВСЕ адреса с mail.ru мне приходил положительный ответ о существовании учетки. даже на фейковые.
3. при удалении учетки, ее данные хранятся на серваке еще 3 месяца. а по факту писать некому.
это первое, что приходит в голову. может еще какие проблемы есть. так что на 100% неправильность мыла проверить нельзя.
как уже писали:
1. почтовый сервак может быть временно в ауте, а мх вы его не получите.
2. как ни билась, но на ВСЕ адреса с mail.ru мне приходил положительный ответ о существовании учетки. даже на фейковые.
3. при удалении учетки, ее данные хранятся на серваке еще 3 месяца. а по факту писать некому.
это первое, что приходит в голову. может еще какие проблемы есть. так что на 100% неправильность мыла проверить нельзя.
Только-что проверил. Да. Вы правы. Мейл.ру — нормальные ответы возвращает на любой адрес. Надо что-то понадежнее искать.
Может вариантом будет завести у себя черный список таких серверов и отправлять юзерам письмо активации почты? Другого выхода в данном направлении я не вижу.
Может вариантом будет завести у себя черный список таких серверов и отправлять юзерам письмо активации почты? Другого выхода в данном направлении я не вижу.
что значит 25 порт не всегда по умолчанию?
если сервер, записанный в MX, не принимает соединения на TCP 25, то это уже неверная MX-запись.
если сервер, записанный в MX, не принимает соединения на TCP 25, то это уже неверная MX-запись.
А что же вы скажете о случае, когда 25 порт блокируют в целях безопасности, открывая 465 порт (secure SMTP) или 587 (Submission)? Оба варианта также описаны с помощью RFC.
Извините, но если ты объявляешь себя MX'ом — то обязан принимать соединения по tcp/25.
см. rfc 4409
не принимаешь — то извини, то ты не MX, а просто MTA «для своих».
см. rfc 4409
не принимаешь — то извини, то ты не MX, а просто MTA «для своих».
Извините, пожалуйста но в приведенном вами доке не совсем о том говорится. Там ни словом не упоминаются MxRR.
Посмотрите, что я накопал.
RFC 2821 Simple Mail Transfer Protocol
It is important to note that MX records can point to SMTP servers
which act as gateways into other environments, not just SMTP relays
and final delivery systems
Вот то о чем я говорил. А рассматривать МТА из внешней сети не стоит. С сетью работает MSA(587), который и есть каналом между МUA и MTA.
Ссылка на RFC: tools.ietf.org/html/rfc2821
Страница: 24
Может, я, конечно, в чем-то не прав. Не серчайте на меня=)
Посмотрите, что я накопал.
RFC 2821 Simple Mail Transfer Protocol
It is important to note that MX records can point to SMTP servers
which act as gateways into other environments, not just SMTP relays
and final delivery systems
Вот то о чем я говорил. А рассматривать МТА из внешней сети не стоит. С сетью работает MSA(587), который и есть каналом между МUA и MTA.
Ссылка на RFC: tools.ietf.org/html/rfc2821
Страница: 24
Может, я, конечно, в чем-то не прав. Не серчайте на меня=)
На серверах с целью защиты от спамером часто включают задержку SMTP Greeting. Она может быть до 30 секунд. Для нормальных почтовиков это не страшно, но для такого скрипта и спамеров — это вилы!
Если вы делаете такую проверку то я могу использовать ваш сервис для абуза чужих емайл серверов.
Зачем столько слипов? Можно просто использовать блокированные сокеты с таймаутом и все.
увы, но подобный код не пройдёт дальше greylisting'а
Это будет атака типа Directory Harvesting. На большинстве почтовиков от нее защита.
Т.е. теперь проверка будет выполнятся дважды (т.е. два запроса на удаленные сервера)? Не проще ли обрабатывать exception?
Думаю, стоит ознакомиться с вопросом что такое эксепшн и найти способ проще… Хотя может вселенские законы только для питона? :)
этот способ валидации не соответствует стандартам.
согласно RFC 2821, если MX-записи нет, то MTA должен отправлять почту на A-запись.
согласно RFC 2821, если MX-записи нет, то MTA должен отправлять почту на A-запись.
Вот и я не понимаю — зачем весь этот огород.
Просто не задавайте для поля правило валидации на email и все. Особенно учитывая что email уже прошел валидацию в контроле symfony!
Если надо получить 100% работающий почтовый ящик — зашлите на него письмо со ссылко для активации этого ящика в учетной записи пользователя (или активации самого пользователя).
Просто не задавайте для поля правило валидации на email и все. Особенно учитывая что email уже прошел валидацию в контроле symfony!
Если надо получить 100% работающий почтовый ящик — зашлите на него письмо со ссылко для активации этого ящика в учетной записи пользователя (или активации самого пользователя).
это скорей всего для случая с формой заказа без регистрации
В любом случае важно получить работающий емейл. Единственный способ в этом убедиться — отправить на него письмо. Что, если пользователь ошибся в имени, корректно указав домен? MX-запись для такого емейл будет в полном порядке, но связь с пользователем будет потеряна…
А избегать эксепшин доктрины да еще после валидации в контроле симфони таким образом — по моему как-то слишком сложно… Эксепшина можно избежать много проще.
А избегать эксепшин доктрины да еще после валидации в контроле симфони таким образом — по моему как-то слишком сложно… Эксепшина можно избежать много проще.
просто тут какой момент
есть форма заказа/обратной связи.
нам важно чтобы пользователь написал валидный мейл, дабы потом на него можно было отослать ответ
если он ошибся форма не пройдет валидацию и пользователю предложат указать правильное мыло
тут избегания эксепшына это не задача а симптом
задача — получить валидное мыло
есть форма заказа/обратной связи.
нам важно чтобы пользователь написал валидный мейл, дабы потом на него можно было отослать ответ
если он ошибся форма не пройдет валидацию и пользователю предложат указать правильное мыло
тут избегания эксепшына это не задача а симптом
задача — получить валидное мыло
хотелось бы иметь такй метод проверки на вооружении конечно всем, но он неработает по самой своей сути.
Дело в том что спамеры собирают свою базу ящиков из двух источников. Первое — парсинг сайтов(пауки), второе — опрос днс серверов. Последнее уже известно много лет назад, в связи с чем многие средства антиспама блокируют такие запросы.
Дело в том что спамеры собирают свою базу ящиков из двух источников. Первое — парсинг сайтов(пауки), второе — опрос днс серверов. Последнее уже известно много лет назад, в связи с чем многие средства антиспама блокируют такие запросы.
А что можно узнать у DNS-сервера кроме MX-записи?
SRV-записи, правда, в данном контексте они фактически не нужны.
Да конечно это я протупил. Я имел ввиду другое. Почтовые сервера — на них можно подавать запросы на отправку письма а потом резко обрывать и делать вывод о наличии такого ящика в этом домене. Таким образом можно отсканировать довольно большой список адресов. Но эту лавочку прикрыли фильтры антиспама.
Одно непонятно
где тут Doctrine?
где тут Doctrine?
Пригодилось еще как!
Sign up to leave a comment.
Валидация Email с проверкой MX-записи домена