Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка e-mail на существование 
:(
    Опции темы
Sl@va
Дата 24.2.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 22.11.2004
Где: Нижний Новгород

Репутация: нет
Всего: нет



Здравствуйте !
Не подскажете, где можно найти скрипт, проверяющий e-mail адрес не на правильность ввода, а на само его существование.
Уже много мест облазил, но так ни где не смог его найти.
Заранее спасибо.

smile
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 24.2.2005, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Для этого надо попытаться залогинется... Сам понимаешь это не так уж хорошо...
PM ICQ   Вверх
Akina
Дата 24.2.2005, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



Такого нет. как ты себе представляешь механизм такой проверки?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Наставник
Дата 24.2.2005, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 4.11.2004

Репутация: нет
Всего: 15



Возможно доп. проверить следующим образом (работает только под Unix)

Код

// проверяем существует ли домен, который содержится в адресе электронной почты
$email="[email protected]";
list($user,$domain)=explode("@",$email);
// извлекаем домен из электронного адреса почтового ящика
// теперь $domain="test.com";
// checkdsnrr - проверяет существует ли домен, второй параметр может быть MX -который проверяет, может ли данный домен принимать работать с почтой, но к сожалению, не на все почтовых серверах записи MX есть... (можете протестить на mail.ru, там записи MХ есть)
if(checkdsnrr($domain,"ANY"))
 return true;
else
 return false;


Удачи.

Это сообщение отредактировал(а) Наставник - 24.2.2005, 17:35


--------------------
Богатство языка определяет широту мысли
Персональный сайт >>
PM MAIL WWW   Вверх
Sl@va
Дата 24.2.2005, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 22.11.2004
Где: Нижний Новгород

Репутация: нет
Всего: нет



А возможно ли на php общение с почтовым сервером по протоколу smtp ?, в смысле возможна ли такая реализация ообще. И тогда по ответу почтового сервера можно будет узнать о существоании e-mail адреса.
PM MAIL WWW ICQ Skype   Вверх
Akina
Дата 24.2.2005, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



Цитата(PHP)
For the Mail functions to be available, PHP must have access to the sendmail binary on your system during compile time. If you use another mail program, such as qmail or postfix, be sure to use the appropriate sendmail wrappers that come with them. PHP will first look for sendmail in your PATH, and then in the following: /usr/bin:/usr/sbin:/usr/etc:/etc:/usr/ucblib:/usr/lib. It's highly recommended to have sendmail available from your PATH. Also, the user that compiled PHP must have permission to access the sendmail binary.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Наставник
Дата 24.2.2005, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 4.11.2004

Репутация: нет
Всего: 15



Естественно возможна через SMTP, а также POP3, да и даже через IMAP..
Если успею, то кину пример класса, для подсоединения по протоколу SMTP, и последующего анализа.


--------------------
Богатство языка определяет широту мысли
Персональный сайт >>
PM MAIL WWW   Вверх
Sl@va
Дата 24.2.2005, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 22.11.2004
Где: Нижний Новгород

Репутация: нет
Всего: нет



Ок, буду ждать.
Заранее спасибо.
PM MAIL WWW ICQ Skype   Вверх
Akina
Дата 24.2.2005, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



Зачем класс? если сендмэйл подключен - его и пользуем...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Наставник
Дата 24.2.2005, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 4.11.2004

Репутация: нет
Всего: 15



Цитата(Akina @ 24.2.2005, 18:26)
Зачем класс? если сендмэйл подключен - его и пользуем...

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

1. Новой версии, которая у меня работала, я не могут найти, так что очень древняя, но рабочая версия... (спасибо книги "Профессиональное PHP программирование")

Итак.

файл mailsimple.php

Код

<?php
/*
*  Базовый класс MailSimple
*  Использует встроенную функция mail(...), для того чтобы отправить письмо.
*  Использует настройки php.ini для правильной работы mail(...);
*/

  include("errormsg.php");

//   mailsimple.php

    class MailSimple
    {
        // основные параметры
        var $to="";            // адрес того, кому отправляем сообщением (может быть несколько)
        var $from="";          // адрес того, кто отправляет сообщение
        var $replyTo="";       // адрес, на который будет приходить ответ об удачном/неудачном отправлении письма
        var $cc="";            // адреса, кому придут копии соообщения от отправителя, все получатели видят, кто ещё получил копии
        var $bcc="";           // слепая копия - копия сообщения, но получатели не видят кто ещё получил копии, кроме него
        var $subj="";          // заголовок сообщения электронной почты
        var $body="";          // тело сообщения электронной почты

        // дополнительные параметры
        var $ereg_check=true;      // проверка почтовых адресов с помощью регулярных выражений (true - да)
        var $subj_empty=false;     // возможность отправить электронного сообщения с пустым заголовком (false - нет)
        var $body_empty=false;     // возможность отправить электронного сообщения с пустым телом (false - нет)
        var $view_email=array();   // используется для вывода электронного письма на экран, в удобном виде

        // переменная для создания экземпляра класса ошибок
        var $ErrorMessageSimple='ErrorMessageSimpleClass';
        var $E;

        // конструктор
        function MailSimple() {
            $this->ERR__=new $this->ErrorMessageSimple();
        }

        // проверка на пустоту заголовка с учетом доп. параметров
        // проверка почтовых адресов c помощью регулярного выражения
        function checkMail()
        {
            if(empty($this->to)){
                $this->E=$this->ERR__->E_EMPTY_MAIL_TO;
                return false;
            }

            if(empty($this->subj) && !$this->subj_empty) {
                $this->E=$this->ERR__->E_EMPTY_SUBJ;
                return false;
            }

            if(empty($this->body) && !$this->body) {
                $this->E=$this->ERR__->E_EMPTY_BOBY;
                return false;
            }

            // замена; на , в полях: to, cc, bcc
            $this->to=ereg_replace(";", ",", $this->to);
            $this->cc=ereg_replace(";", ",", $this->cc);
            $this->bcc=ereg_replace(";", ",", $this->bcc);

            if(!empty($this->from))
                $this->headers[]="From: $this->from";
            if(!empty($this->replyTo))
                $this->headers[]="Reply-To: $this->replyTo";

            if($this->validate_email) {
                $toM=explode(",",$this->to);
                if(!empty($this->cc)) $ccM=explode(",", $this->cc);
                if(!empty($this->bcc)) $bccM=explode(",", $this->bcc);

                if(!$this->eregMail($toM)) {
                    $this->E=$this->ERR__->E_TO_EMAIL;
                    return false;
                }

                if(is_array($ccM) && !$this->eregMail($ccM)) {
                    $this->E=$this->ERR__->E_CC_EMAIL;
                    return false;
                }

                if(is_array($bccM) && !$this->eregMail($bccM)) {
                    $this->E=$this->ERR__->E_BCC_EMAIL;
                    return false;
                }
             }

            return true;
         }

         // проверка, почтовых адресов c помощью регулярного выражения
         function eregMail($_email) {
             foreach($_email as $temp) {
                 if(!eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+))*$",$temp)) {
                     return false;
                 }
             }
             return true;
         }

         // включение заголовков
         function buildTitle() {
             if(!empty($this->cc)) $this->headers[]="Cc: $this->cc";
             if(!empty($this->bcc)) $this->headers[]="Bcc: $this->bcc";
         }

         // вывод сообщения письма
         function viewMail() {
             if($this->checkMail()) return false;

             $this->headers=array();
             $this->buildTitle();
             $this->headers[]="From: $this->from";
             $this->headers[]="To: $this->to";
             $this->headers[]="Subject: $this->subject";

             $viewM=implode("\r\n",$this->headers);
             $viewM.="\r\n";
             $viewM.=$this->body;

             return $viewM;
         }

        function sendMail() {
            if(!$this->checkMail()) return true;
            $this->buildTitle();

            if(mail($this->to,stripslashes(trim($this->subj)),stripslashes($this->body),implode("\r\n",$this->headers)))
                return true;
            else {
                $this->E=$this->ERR__->E_SEND;
                return false;
            }
        }

    }

?>



файл errormsg.php

Код

<?php

    class ErrorMessageSimple {

        // сообщения об ошибках
        var $E_EMPTY_MAIL_TO;
        var $E_EMPTY_SUBJ;
        var $E_EMPTY_BOBY;
        var $E_TO_EMAIL;
        var $E_CC_EMAIL;
        var $E_BCC_EMAIL;
        var $E_SEND;
       
        function ErrorMessageSimple() {
            $this->E_EMPTY_MAIL_TO="Empty to field.";
            $this->E_EMPTY_SUBJ="Empty subject field.";
            $this->E_EMPTY_BOBY="Emmpty body field.";
            $this->E_TO_EMAIL="To - incorrectly set field.";
            $this->E_CC_EMAIL="Cc - incorrectly set field.";
            $this->E_BCC_EMAIL="Bcc - incorrectly set field.";
            $this->E_SEND="Not send, because error";
        }

    }
   
    class ErrorMessageSMTP {

        // сообщения об ошибках
        var $E_SMTP_HOST;
        var $E_SMTP_CONN;
        var $E_SMTP_NOT_CONN;
        var $E_INIT_SOCKET;
        var $E_UNKNOWN;
        var $E_HELO_NOT;
        var $E_HELO_FAILED;
        var $E_QUIT_FAILED;
        var $E_MAIL_NOT;
        var $E_RCPT_NOT;
        var $E_DATA_NOT;
       

        function ErrorMessageSMTP() {
            $this->E_SMTP_HOST="SMTP host not set yet";
            $this->E_INIT_SOCKET="Couldn't initialize the socket";
            $this->E_SMTP_CONN="Failed to connect";
            $this->E_UNKNOWN="Unknown response from the server";
            $this->E_SMTP_NOT_CONN="Not connect to SMTP server";
            $this->E_HELO_NOT="HELO command needs an arguments";
            $this->E_HELO_FAILED="HELO command failed";
            $this->E_MAIL_NOT="MAIL command needs an arguments";
            $this->E_RCPT_NOT="RCPT command needs an arguments";
            $this->E_DATA_NOT="DATA command needs an arguments";
            $this->E_QUIT_FAILED="QUIT command failed";
        }

    }
?>


файл mailsmtp.php
Вот этот файл Вам и нужен, со всеми остальными, пока нет времени, потом комментарии напишу.


Код

<?php
include "mailsimple.php";

        class MailSMTP extends MailSimple
        {
              var $smtp_host="";
              var $smtp_port=25;
              var $socket=0; // сокет, через который общается сценарий и сервер SMTP
              var $response_code=0;
              var $response_msg="";
             
              var $ErrorMessageSMTP='ErrorMessageSMTP';
              var $E;
             
              function MailSMTP() {
                  $this->ER__=new $this->ErrorMessageSMTP();
              }
             
              function connect()
              {
                  if(empty($this->smtp_host)) {
                      $this->E=$this->ER__->E_SMTP_HOST;
                      return false;
                  }
                  $this->socket=fsockopen($this->smtp_host,$this->smtp_port,&$err_no,&$err_str);
                 
                  if(!$this->socket) {
                      if(!$err_no){
                          $err_str=$this->ER__->E_INIT_SOCKET;
                      }
                      $this->E=$this->ER__->E_SMTP_CONN . "$err_no: $err_str";
                      return false;
                  }
                 
                  if(!$this->getAns()) {
                      $this->E=$this->ER__->E_UNKNOWN . " : " . $this->response_msg;
                      return false;
                  }
                 
                  if($this->response_code!=220){
                      $this->E=$this->ER__->E_SMTP_CONN." ".$this->response_code." ".$this->response_msg;
                      return false;
                  }
                 
                  return true;
              }
             
              function getAns()
              {
                  if(!$this->socket) {
                      $this->E=$this->ER__->E_SMTP_NOT_CONN;
                      return false;
                  }
                 
                  $server_response=fgets($this->socket,1024);
                  if(ereg("^([0-9]{3})(.*)$",$server_response,$match)) {
                      $this->response_code=$match[1];
                      $this->response_msg=$match[2];
                      return true;
                  }
                  $this->response_msg=$server_response;
                  return false;
              }
             
              function see($_command,$_arg='')
              {
                  if($this->socket) {
                      $this->E=$this->ER__->E_SMTP_NOT_CONN;
                      return false;
                  }
             
                  switch($_command) {

                      case "HELO":
                          if (empty($_arg)) {
                              $this->E=$this->ER__->E_HELO_NOT;
                              return false;
                          }
                          $smtp_cmd="HELO $_arg\r\n";
                          fwrite($this->socket,$smtp_cmd);
                          if(!$this->getAns()){
                             $this->E=$this->ER__->E_UNKNOWN.":".$this->response_msg;
                             return false;
                          }
                          if($this->response_code!=250){
                              $this->E=$this->ER__->E_HELO_FAILED." ".$this->response_code." ".$this->response_msg;
                              return false;
                          }
                          break;
                         
                       case "MAIL":
                          if(empty($_arg)) {
                              $this->E=$this->ER__->E_MAIL_NOT;
                              return false;
                          }
                          $smtp_cmd="MAIL FROM: $_arg\r\n";
                          fwrite($this->socket,$smtp_cmd);
                          if(!$this->getAns()) {
                              $this->E=$this->ER__->E_UNKNOWN.":".$this->response_msg;
                              return false;
                          }
                          if($this->response_code!=250){
                              $this->E=$this->ER__->E_MAIL_FAILED." ".$this->response_code." ".$this->response_msg;
                              return false;
                          }
                          break;
                         
                       case "RCPT":
                          if(empty($_arg)) {
                              $this->E=$this->ER__->E_RCPT_NOT;
                              return false;
                          }
                          $toM=explode(",",$_arg);
                          foreach ($toM as $temp){
                              $smtp_cmd="RCPT TO: $temp\r\n";
                              fwrite($this->socket,$smtp_cmd);
                              if(!$this->getAns()) {
                                 $this->E=$this->ER__->E_UNKNOWN.":".$this->response_msg;
                                 return false;
                             }

                             if($this->response_code!=250){
                                 $this->E=$this->ER__->E_RCPT_FAILED." ".$this->response_code." ".$this->response_msg;
                                 return false;
                             }
                          }
                          break;
                         
                       case "DATA":
                          if(empty($_arg)) {
                              $this->E=$this->ER__->E_DATA_NOT;
                              return false;
                          }
                          $smtp_cmd="DATA\r\n";
                          fwrite($this->socket,$smtp_cmd);
                          if(!$this->getAns()) {
                              $this->E=$this->ER__->E_UNKNOWN.":".$this->response_msg;
                              return false;
                          }
                          if($this->response_code!=354){
                              $this->E=$this->ER__->E_DATA_FAILED." ".$this->response_code." ".$this->response_msg;
                              return false;
                          }
                          $smtp_cmd="$_arg\r\n"."."."\r\n";
                          fwrite($this->socket,$smtp_cmd);
                          if(!$this->getAns()) {
                              $this->E=$this->ER__->E_UNKNOWN.":".$this->response_msg;
                              return false;
                          }
                          if($this->response_code!=250){
                              $this->E=$this->ER__->E_DATA_FAILED." ".$this->response_code." ".$this->response_msg;
                              return false;
                          }
                          break;
                         
                       case "QUIT":
                          $smtp_cmd="QUIT\r\n";
                          fwrite($this->socket,$smtp_cmd);
                          if(!$this->getAns()) {
                              $this->E=$this->ER__->E_UNKNOWN.":".$this->response_msg;
                              return false;
                          }
                          if($this->response_code!=221){
                              $this->E=$this->ER__->E_QUIT_FAILED." ".$this->response_code." ".$this->response_msg;
                              return false;
                          }
                          break;
                         
                       default:
                          $this->E=$this->ER__->E_UNRECOG;
                          return false;
                          break;
                       }
                       
                       return true;
               }
               
               function sendMail()
               {
                  if($this->checkMail()) return false;
                 
                  $this->buildTitle();
                  if(!$this->connect()) return false;
                  if(!$this->see("HELO",$GLOBALS["SERVER_NAME"])) return false;
                  if(!$this->see("MAIL", $this->from)) return false;
                  if(!$this->see("RCPT", $this->to)) return false;
                 
                  if(!empty($this->to)) $this->headers[]="To: $this->to";
                  if(!empty($this->subject)) $this->headers[]="Subject: $this->subject";
                  if(!$this->see("DATA", implode("\r\n",$this->headers) . "\r\n\r\n" . $this->body)) return false;
                  if(!$this->see("QUIT")) return false;
                  fclose($this->socket);
                 
                  return true;
               }

           }
?>


файл testsmtp.php
Честно признаюсь, т.к. это старая версия, не уверен что работает, хотя...


Код

<?php
 include("mailsmtp.php");

 $mail=new MailSMTP();
 $mail->smtp_host="mail.ru";
 
 $mail->to="[email protected]";
 $mail->from="[email protected]";
 $mail->subject="Test";
 $mail->body="Is it work?";
 
 if($mail->sendMail()){
     echo("Success : $mail->subj");
 } else die("Error : $mail->subj " . $mail->E);
 
 echo("<br>");
 echo(str_replace("\r\n","<br",$mail->viewMail()));
?>


Все удачи.

Это сообщение отредактировал(а) Наставник - 24.2.2005, 18:42


--------------------
Богатство языка определяет широту мысли
Персональный сайт >>
PM MAIL WWW   Вверх
Akina
Дата 24.2.2005, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



Цитата
чтобы отправить не только текст, но и встроенные изображения в тело письма, да и приаттачить файлы

а какие проблемы-то?
Цитата(PHP)
mail
(PHP 3, PHP 4 , PHP 5)

mail -- send mail
Description
bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]])

mail() automatically mails the message specified in message to the receiver specified in to. Multiple recipients can be specified by putting a comma between each address in to. Email with attachments and special types of content can be sent using this function. This is accomplished via MIME-encoding - for more information, see this Zend article or the PEAR Mime Classes.


Sl@va
Даже если удаленный хост принял письмо, это не означает что адрес существует - там вполне может быть мультибокс.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Sl@va
Дата 24.2.2005, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 22.11.2004
Где: Нижний Новгород

Репутация: нет
Всего: нет



Ок, спасибо.
Попробуем чего нето сделать, надеюсь что получится.
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 24.2.2005, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Цитата
Естественно возможна через SMTP, а также POP3, да и даже через IMAP..

Только через IMAP...
PM ICQ   Вверх
Sl@va
Дата 25.2.2005, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 22.11.2004
Где: Нижний Новгород

Репутация: нет
Всего: нет



Почемуто пишет что невозможно модключится к почтовому серверу.
может быть почтовый серер производит фильтрацию IP, пропуская тем самым только IP других почтовых серверов.
Пробывал подключаться к Rambler'у - тоже самое
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 25.2.2005, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Беплатные хостеры не предоставляют возможности работы с IMAP с удаленных серверов..
Раньше такое было точно. Думаю не изменилось.
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.1021 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.