Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Реальный e-mail
 
 автор: sim5   (23.01.2007 в 08:45)   письмо автору
 
 

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

   
 
 автор: Гончий пёс   (23.01.2007 в 09:45)   письмо автору
 
   для: sim5   (23.01.2007 в 08:45)
 

С помощью регулярных выражений.

Допустим, в переменной $mail находится адрес ящика, тогда:

<?
if (preg_match("|^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}$|i"$mail))
{
//отправляем
}
else
{
//не отправляем
}
?>

   
 
 автор: elenaki   (23.01.2007 в 09:53)   письмо автору
 
   для: Гончий пёс   (23.01.2007 в 09:45)
 

это проверка синтаксиса адреса, а не его реальности, т.е. существования. можно влепить любой адрес вроде: eee@uuu.oo и он пройдет эту проверку. на самом же деле такого адреса и даже сервера нет и ответ с ошибкой все равно придет. проверку на существование почтового сервера и адреса на этом сервере тут приводили. правда, у меня она очень медленно работает...

самый лучший способ иметь реальные e-mail'ы - требовать от юзеров подтверждения регистрации. тот, кто дал несуществующий адрес, никогда не получит активационнный линк.

   
 
 автор: ddhvvn   (23.01.2007 в 10:24)   письмо автору
 
   для: elenaki   (23.01.2007 в 09:53)
 

>проверку на существование почтового сервера и адреса на этом сервере тут приводили. правда, у меня она очень медленно работает...

Киньте, пожалуйста, ссылку на нее или код

   
 
 автор: elenaki   (23.01.2007 в 10:34)   письмо автору
 
   для: ddhvvn   (23.01.2007 в 10:24)
 

вот эта тема

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=12785&page=1

   
 
 автор: Гончий пёс   (23.01.2007 в 10:49)   письмо автору
 
   для: elenaki   (23.01.2007 в 09:53)
 

Ну дык об том и речь! Пущай вводят что хотят... Как говорится, ври, да не завирайся=) Но на случай, если юзер добросовестный, и действительно случайно ошибся очень пойдет...

Кстати, не спорю, проверять существование самого ящика очень даже надо... А то я не знаю сколько писем ушло в космос, пока я регился со сломанной клавой, где хреново работала одна клавиша, которая была адресе моего ящика=)

   
 
 автор: sim5   (23.01.2007 в 11:24)   письмо автору
 
   для: Гончий пёс   (23.01.2007 в 10:49)
 

Я поставил этот вопрос потому, что наши пользователи в основном женщины, и часто просто по невнимательности пишут, например, вместо rambler, ramdler. Нужно проверить реальность адреса, и не "выбрасывать" пользователя куда-то на иную страницу, а указать на ошибку и предложить исправить ее. Для нас "реальность" e-mail очень важна.

   
 
 автор: Richard Ferlow   (23.01.2007 в 11:48)   письмо автору
 
   для: sim5   (23.01.2007 в 11:24)
 

Боюсь, единственное что можно сделать - проверять существование введенного сервера после собаки. И все.
Существование конкретного ящика никто проверить не даст.

   
 
 автор: sim5   (23.01.2007 в 11:56)   письмо автору
 
   для: Richard Ferlow   (23.01.2007 в 11:48)
 

Опять облом!

   
 
 автор: Trianon   (23.01.2007 в 12:31)   письмо автору
 
   для: Richard Ferlow   (23.01.2007 в 11:48)
 

>Существование конкретного ящика никто проверить не даст.
Не говорите ерунду.

elenaki привела ссылку на тему, где описывалась методика проверки адреса на реальность полностью. Вкратце: нужно выполнить сокращенный smtp-обмен без отправки письма:
HELO host
MAIL FROM: my_addr
RCPT TO: target_addr
QUIT
И проанализировать ответы сервера.

   
 
 автор: sim5   (23.01.2007 в 12:40)   письмо автору
 
   для: Trianon   (23.01.2007 в 12:31)
 

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

   
 
 автор: Trianon   (23.01.2007 в 15:19)   письмо автору
 
   для: sim5   (23.01.2007 в 12:40)
 

Никакой он не глючный.
Нужно просто честно выполнять шаги протокола smtp. И автор об этом в курсе.

   
 
 автор: sim5   (23.01.2007 в 15:23)   письмо автору
 
   для: Trianon   (23.01.2007 в 15:19)
 

Благодарю, в таком случае попробуем.

   
 
 автор: sim5   (23.01.2007 в 18:31)   письмо автору
 
   для: sim5   (23.01.2007 в 15:23)
 

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

   
 
 автор: sim5   (24.01.2007 в 05:24)   письмо автору
 
   для: sim5   (23.01.2007 в 18:31)
 

Есть добрые люди, встроили код, добавили функцию, для проверки передаю свой реальный адрес. Ответ получаем в файл. Запускаем в сети - ответ:

Warning: fsockopen() [function.fsockopen]: unable to connect to mxs.mail.ru:25 (Permission denied) in
/domain/test.php on line 96. Это строка:

$Connect=fsockopen($connect_host, 25);

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

   
 
 автор: cheops   (24.01.2007 в 13:15)   письмо автору
 
   для: sim5   (24.01.2007 в 05:24)
 

Фраза "Permission denied" означает, что у скрипта не достаточно прав доступа для осуществления операции. Так бывает, когда хостер запрещает обращение к чужим ресурсам со своего хоста через сокеты.

   
 
 автор: sim5   (24.01.2007 в 14:23)   письмо автору
 
   для: cheops   (24.01.2007 в 13:15)
 

Значит использовать это http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=12785&page=1 можно, только договорившись с хостером. Видимо придется довольствоваться "виртуальным" адресом.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования